配列を利用してセルを取得し別のシートにセット

Pocket

前に複数のセルに値をセットするときは配列を使うと処理が速いということを紹介しましたが、今回はその応用です。
「あるシートのデータを加工して別のシートにセットする」という場合があります。
下で紹介するサンプルは、あるシートのデータを一気に配列に取得して、別のシートに一気にセットします。
一般に、セルを一つずつする処理するより、配列の要素を処理する方が速いです。

サンプル

Sub シートの全てのセルを取得し別のシートにセットする()
    '元のシートのデータを取得
    Sheets("moto").Select
    arrs = Cells(1, 1).CurrentRegion
    '各要素を加工
    For r = 2 To UBound(arrs, 1)
        For c = 2 To UBound(arrs, 2)
            arrs(r, c) = arrs(r, c) * 2
        Next c
    Next r
    '別のシートにデータをセット
    Sheets("saki").Select
    Range(Cells(1, 1), Cells(UBound(arrs, 1), UBound(arrs, 2))) = arrs
End Sub

解説

元のシートのデータを取得

「arrs = Cells(1, 1).CurrentRegion」の部分は、セルを一つ指定してCurrentRegionを適用すると、アクティブセル領域(空白行と空白列で囲まれたセル範囲)を取得できます。そのセルを含む「表」を取得するときに便利です。
r行目c列目のセルはarrs(r, c)になります。ちょうど「Cells(r, c)」に相当します。
1行目1列目のセルはarrs(1, 1)です。

各要素を加工

UBound(arrs, 1)は、配列の1次元目の添え字の最大値です。この場合、「表」の行数を表します。
UBound(arrs, 2)は、「表」の列数を表します。
ForNextの部分は、2行目から最後の行まで、2列目から最後の列まで、の各要素について、値を2倍にしています。

別のシートにデータをセット

別のシートの範囲を指定して、そこに配列を一気にセットします。

[ 2015年1月20日 | カテゴリー: Excel | タグ: ]

« | »

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

送信してください。


タグ

カテゴリー

最近の投稿

最近のコメント

固定ページ

アーカイブ

stabucky

写真

メタ情報