この記事では、シート移動なしで別シートのデータを配列変数に格納する方法をご紹介していきます。
以下の2つのパターンに分けて解説していきます。
①変数=Range(” * : * “)
②変数=Range(Cells( * , * ), Cells( * , * ))
特に②のパターンは少し難しいので、わざわざ別シートをアクティブにしてから変数化している人は多いと思います。
この記事の内容を取り入れることで、コードがすっきりしますし、なにより動作が早くなると思います。
ぜひマスターしておきましょう。
それでは早速やっていきます。
事前知識
実際のコーディングに入る前に必要となる事前知識を解説していきましょう。
VBAでシート移動をせずに、別シートのデータを変数として取り扱う場合、以下のように記述します。
例: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上級者への第一歩です。
ぜひこの記事のやり方をマスターしておきましょう!
このように、私のブログではエクセルスキルはもちろん、様々なプログラミングスキルを紹介しています。
今は仕事中で時間がないかもしれませんが、ぜひ通勤時間中などに他の記事も読んでいただけると嬉しいです。
⇒興味をもった方は【ヒガサラ】で検索してみてください。
確実にスキルアップできるはずです。
最後に、この記事が役に立ったという方は、ぜひ応援よろしくお願いします。
↓ 応援ボタン
それではまた!
コメント