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

f:id:yshgs_elec:20210408220445p:plain

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

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

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

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

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

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

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

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

スポンサーリンク

事前知識

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

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

変数=WorkSheets(“シート名”).指定データ

例:a=WorkSheets(“Sheet1”).Range(“A1”)

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

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

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

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

スポンサーリンク

作業内容の解説

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

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

f:id:yshgs_elec:20210408213653j:plain

このデータは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にいる状態で実行してみます。

f:id:yshgs_elec:20210408214229j:plain

しっかりと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をコピーしました