ワークシート上のコピー元、A1、A2、A3の値をそれぞれB6、B9、B12に転記します。
ワークシート上から、Range("A1:A3")を選択・コピーし、セルB6に貼り付けます。
すると、「No1」の表示しか見えません。そこでオートフィルターを解除してみると、残りの2つはセルB7とB8にコピーされています。これでは意図した結果になりません。そこで、VBAを使い「可視セル」のみに転記したものが下記になります。
※プロシージャ例
1
2
3
4
5
6
7
8
9
10
11 |
Sub myvisible()
Dim i As Integer, j As Integer
Dim myrng As Range, rng As Range
i = 0
i = Range("A65536").End(xlUp).Row
Set myrng = Range(Cells(6, 2), Cells(i, 2)).SpecialCells(xlCellTypeVisible)
j= 1
For Each rng In myrng
rng = Cells(j, 1).Value
j = j + 1
Next
End Sub
|
1
2
3
4
5
6
7
8
9
10
11
|
myvisibleという名のプロシージャを記述します。。
変数を宣言します。
変数iを初期化します。
Endプロパティを使い、最下行(A列65536行目)を基準として、そこからデータの入力されている上端のセルを参照し、その行番号を変数
i に代入します。(この場合12)
Setステートメントを使い、変数myrngにセル範囲(B6:B12)の中で「可視セル」のみを代入します。
変数 j に1を代入します。
For Each・・・Nextステートメントでオブジェクト変数rngに5で取得した「可視セル」のセルを順番に格納して、8・9の処理を繰り返し実行します。
オブジェクト変数rngにCells(j, 1).の値(この場合"No1")を代入します。
変数 j に加算値1を足します。
オブジェクト変数rngに次の可視セルを代入して、8に戻ります。
プロシージャの記述を終了します。
|
■SpecialCellsメソッド
SpecialCellsメソッドは特定のセルを参照する時に使用します。その戻り値は指定したセル範囲の中で条件を満たす全てのセルが対象になります。
オブジェクト.SpecialCells(Type,Value)
オブジェクト・・・必ず指定します。Rangeオブジェクトを指定します。
Type・・・必ず指定します。XlCellTypeクラスの定数を使用します。
定数 |
内容 |
xlCellTypeAllFormatConditions |
すべての条件付き書式 |
xlCellTypeAllValidation |
すべての入力規則 |
xlCellTypeBlanks |
空白セル |
xlCellTypeComments |
コメント |
xlCellTypeConstants |
定数 |
xlCellTypeFormulas |
数式 |
xlCellTypeLastCell |
最後のセル |
xlCellTypeSameFormatConditions |
同じ条件付き書式 |
xlCellTypeSameValidation |
同じ入力規則 |
xlCellTypeVisible |
可視セル |
Value・・・(省略可)引数TypeにxlCellTypeConstantsまたはxlCellTypeFormulasを指定した時に、引数ValueにxlSpecialCellsValuesクラスの定数を使用して、特定のセルだけを取得する事ができます。省略した場合は全ての定数、および数式が対象になります。
定数 |
内容 |
xlErrors |
エラー値 |
xlLogical |
論理値 |
xlNumbers |
数値 |
xlTextValues |
文字 |