【VBA】シート移動必要なしで別シートのデータを配列変数化する方法!

f:id:yshgs_elec:20210408220445p:plain

この記事では、シート移動なしで別シートのデータを配列変数に格納する方法をご紹介していきます。

 

以下の2つのパターンに分けて解説していきます。

①変数=Range(” * : * “)

②変数=Range(Cells( * , * ), Cells( * , * ))

 

特に②のパターンは少し難しいので、わざわざ別シートをアクティブにしてから変数化している人は多いと思います。

この記事の内容を取り入れることで、コードがすっきりしますし、なにより動作が早くなると思います。

 

ぜひマスターしておきましょう。

それでは早速やっていきます。

スポンサーリンク

事前知識

実際のコーディングに入る前に必要となる事前知識を解説していきましょう。

VBAでシート移動をせずに、別シートのデータを変数として取り扱う場合、以下のように記述します。

 

変数=WorkSheets(“シート名”).指定データ
例:a=WorkSheets(“Sheet1”).Range(“A1”)

 

要は指定するデータの前に

【WorkSheets(“シート名”).】を付けるだけですね。

 

配列を変数にする場合も基本的には同じ考え方です。

以降のコードを見る際はこの点に注意してみてください。

スポンサーリンク

作業内容の解説

本題に入る前に今回行う作業内容をシェアしておきましょう。

今回は以下の画像に示している表データを配列化してみようと思います。

配列化するサンプルデータの確認

このデータはSheet2に記載されています。

Sheet1にいる状態でこのデータを配列化していきます。

状況がわかったところで、いよいよ本題に入っていきましょう。

スポンサーリンク

別シートを配列化する方法①Range(“*:*”)の場合

まずは

変数=Range(” * : * “)

というパターンでやってみます。

以下がサンプルコードです。

◆別シートのデータを配列化するサンプルコード①

Sub test1()
    Dim array1 As Variant
    array1 = Worksheets("Sheet2").Range("A2:G9")
    MsgBox array1(5, 5)
End Sub

先ほど紹介したように指定データの前に【WorkSheets(“シート名”).】がついていることをご確認ください。

 

また、今回は配列化したあとに配列の(5,5)の数値を表示されるようにしています。

 

先ほどの画像で示すように、配列の(5,5)には2という数値が入っていますので、このコードを実行するとメッセージボックスに2が表示されるはずです。

 

実際に実行してみましょう。

※Sheet1にいる状態で実行してみます。

マクロ実行前のアクティブシートの確認結果

 

しっかりと2が表示されましたね。

※Sheet1が選択されていることもあわせてご確認ください。

 

というわけでしっかりとシート移動なく別シートのデータを配列変数に格納できることが確認できましたね。

 

まぁここは特に難しいことはないと思います。

問題は次ですね。

スポンサーリンク

別シートを配列化する方法①Range(cells,cells)の場合

次はおそらくつまづく人が多い

変数=Range(Cells( * , * ), Cells( * , * ))

のパターンでやってみましょう。

 

以下がサンプルコードです。

◆別シートのデータを配列化するサンプルコード②

Sub test2()
    Dim array2 As Variant
    array2 = Range(Worksheets("Sheet2").Cells(2, 1), Worksheets("Sheet2").Cells(9, 7))
    MsgBox array2(5, 5)
End Sub

やっていることは先ほどと同じです。

 

ポイントとしては、領域をしているする各Cellsの前に【WorkSheets(“シート名”).】を付け加えるという点です。

 

Cellsではなく、最初のRangeの前につけて失敗する人は非常に多いと思います。

(私もそうでした。)

 

しかしながら、

「同じ【WorkSheets(“シート名”).】を2回使うのはカッコ悪い!」

こんなことを考えている人も多いと思います。

 

その気持ち、すごくわかります。

そんな人はWith構文を使いましょう。

 

以下がWith構文をつかって書いた場合のコードです。

※やっていることは同じです。

Sub test3()
    Dim array3 As Variant
    With Worksheets("Sheet2")
       array3 = Range(.Cells(2, 1), .Cells(9, 7))
    End With
    MsgBox array3(5, 5)
End Sub

これなら何度もWorksheets(“Sheet2”)を書かなくてOKです。

 

念のため、これらのコードを実行してみましたが、問題なく動作することが確認できました。

スポンサーリンク

おわりに

というわけで今回は、シート移動必要なしで別シートのデータを配列変数化する方法をご紹介しました。

 

配列をうまく扱えることはVBA上級者への第一歩です。

ぜひこの記事のやり方をマスターしておきましょう!

 

このように、私のブログではエクセルスキルはもちろん、様々なプログラミングスキルを紹介しています。

 

今は仕事中で時間がないかもしれませんが、ぜひ通勤時間中などに他の記事も読んでいただけると嬉しいです。

⇒興味をもった方は【ヒガサラ】で検索してみてください。

確実にスキルアップできるはずです。

 

最後に、この記事が役に立ったという方は、ぜひ応援よろしくお願いします。

↓ 応援ボタン

にほんブログ村 IT技術ブログ VBAへ
にほんブログ村

それではまた!

コメント

タイトルとURLをコピーしました