| Home |
可視セルのみにデータを転記(コピー)する。
オートフィルタを使用した際、表示されているセル(可視セル)のみにワークシート上のデータを転記(コピー)します。
SpecialCellsメソッドを利用して、非表示のセルには転記されないようにします。


ワークシート上のコピー元、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 文字

▲Top