日本で使われる郵便番号は一般的には7桁の999-9999形式のため正規表現でチェックしています。 もし海外の郵便番号への対応が必要になるなどの特殊事情がある場合はチェックをゆるくするなどの対応が必要になります。 <コード>, Filterは配列の検索条件に一致したデータを一気に配列で返してくれるという点が便利ですが、複雑な条件の検索には不向きです。 この記事を読むのに必要な時間は約 4 分です。 vbaで配列を使うことってありますよね。 単純に値を格納する方法以外に、ある関数を使って入れることができます。 複数の値を一度に格 … というわけで、戻り値は配列を格納することができるバリアント型の変数で取得します。 VBAで配列の要素の数を取得するには、UBound 関数を使用します。 UBound 関数 UBound 関数の構文は以下のとおりです。 [crayon-5fabce302f4ce947016254/… 4 2次元配列の使い道. 第1引数には配列名を指定します。第2引数には要素数を取得したい次元を指定します。第2引数を省略した場合は、1が適用されます。戻り値には取得した要素数が返されます。, 配列 A は1次元目の要素数が3、2次元目の要素数が6の2次元配列です。上のプログラムを実行すると、イミディエイトウィンドウに以下のように表示されます。, UBound関数は、配列のサイズをあらかじめ決められないような場合、威力を発揮します。下記は、セル値を配列Aに代入し、指定した行番R(下記例では1)の要素を配列Bに代入するものです。配列Bを動的配列(要素数が決まっていない配列)にし、UBound関数でサイズを決めてやります。それによって、Aの要素数が変わっても宣言部(Dim)を変更するだけでよく、それ以外のコードは変更せずに済みます。, For~Nextでセルの値を配列Aに書き込みました。Redimは中身が空だった配列Bの再定義をしています。, さらに、Aも動的配列にし、Endプロパティを使用して配列サイズを取得するようにすれば、セル数が変更されてもコードの変更はまったく必要なくなります。Endプロパティは、選択されたセル範囲の終端を返します。, Copyright © Members Co.,Ltd. A1セルに10、B1セルに20、C1セルに30が記入されます。, 配列の勉強をしていると、配列の書式はわかった。でも、どう使えばいいのかピンと来ないというふうに感じる方が多いようです。, 実際の例として「新規シートを3枚挿入して、指定の名前に変更する」処理を書いてみようと思います。, 配列を使って「添え字」で、参照する変数を切り替えることができるため、「シート挿入」→「シート名変更」のロジックをFor~Nextループでまとめることができるのです。, 配列は、見方を少し変えると、添え字(=「整数」)を指定することで、対応する値を取得できるものだとも考えられます。, そのため、整数値に応じて、条件分岐するような場面で「If文の代わりに使う」ことができます。, たとえば、2行目~10行目まで、次のような計算をして、その集計結果をD11セルに表示させようと思います。, 配列を使ったときとの対比をわかりやすくするため、7行目、9行目の書き方がすこしわざとらしくなっています。, 文字列を大量に結合する場合、1つ1つ文字列を結合していくより、配列とjoin関数を使って文字列結合をしたほが動作速度が速くなります。, また、今回のように、文字列を結合するときに、文字列の間に「区切り文字」をはさんで連結をする場合には、配列+Join関数を使うほうがプログラムをわかりやすく書くことができます。, 文字列を、区切り文字ごとに分割して細切れの文字列を取得したいときにはSplit関数を使うと簡単に分割できます。, Split関数による分割結果は「配列」に格納されるため、配列を使う必要があります。, Split関数を使うときには、その結果を入れる変数は、Dim文で要素数・型を指定しないことに注意してください。, 実際、先ほどのソースコードの5行目を見て見ると、「Dim Parts」というように「要素数」「型」のどちらも指定していないことがわかります。, そして、Split関数を使った段階で、変数Partsは、自動的に「配列」になります。, VBAの仕様で、Split関数で作った配列は、必ず、添え字が「0」で始まる配列になりますので、ご注意ください。, 次のマクロを実行すると、A1セル~B3セルの内容が、D1セル~E3セルに転記されることになります。, 先ほどのプログラムを見ると、Dataを2次元配列にしたおかげで、CellsとDataの書き方がそっくりになりました。, このように、2次元配列は「セル範囲を丸ごと読み込んだり、丸ごと書き込む」用途に使うと、プログラムがわかりやすく書けます。, 先ほどのプログラムを改良すると、さらにシンプルに書くことができ、しかも、実行速度を速くすることができます。, 先ほどとまったく同じ意味のプログラムですが、一気に行数が短く・シンプルになりました。, 実は、Range(あるいはCells)を呼び出す回数が少なくなればなるほど実行速度は速くなります。, 改良前と改良後で呼び出す回数を比較すると改良後のほうが回数が少ないため、改良後のプログラムのほうが動作速度が速くなるのです。, 今回程度のプログラムであれば体感できる差は付きませんが、セルへの読み書きが多いと、場合によっては、数十倍近く動作速度が変わります。, 実行速度が遅いと感じたら、セルの読み書きは複数セルをまとめて行うように心がけてみてください。, セル範囲と2次元配列との間で、データの読み書きをするときには、何点か気をつけないといけないポイントがあります。, 少し気持ち悪いかもしれませんが、変数宣言時は添え字の下限・上限の指定をせず、Variant型変数として宣言をしてください。, 型を何も指定しなければ、自動的にVariant型になりますので、上記のように変数名のみ指定するのがおすすめです。, 少し気持ち悪いかもしれませんが、3行目の代入後は2次元配列として使えるようになります。, セル範囲を変数に代入した段階で、自動的に2次元配列になるわけですが、そのときの添え字は1から始まります。, セル範囲を丸ごと変数に代入する場合、添え字を「0」始まりにすることはできませんので、気をつけてください。, このように、VBAでは、言語仕様として、添え字を「0始まり」「1始まり」のどちらかに統一することはできません。, このプログラムは、文字列の分割のところで紹介したプログラムを、For文とLBound、UBoundを使って書き換えたものです。, Splitを使うと、プログラムを実行してみるまで、配列の添え字の上限が決まらないため、事前に、For文の「To」の指定ができません。, そこで、UBoundを使うことで、Splitで分割されたデータの個数が変わっても、プログラムの変更をする必要がなくなります。, また、LBoundを使うことで、配列の添え字の「下限」を意識する必要性が少なくなります。, 2次元配列の場合には、次のような書式で、配列の添え字の下限、上限を調べることができます。, 次のように、配列名の後に、添え字の下限・上限を知りたい「次元」を入れると、それぞれの次元の下限・上限を調べることができます。, セル範囲への読み込み、書き込みを高速にするで紹介したプログラムに変更を加えてみようと思います。, 「A1~B3セル」の内容を「D1~E3セル」にコピーするときに、値を2倍にしたうえで転記してみます。, For~Nextループの二重ループで、ループ変数の初期値、最終値にLBound、UBoundで得た値を使っています。, 「経理事務のためのエクセル基礎講座(初級編)」(動画マニュアル 総収録時間162分)を無料プレゼント中です!, このマニュアルで解説していることを一通り学べば、経理事務を行う上で最低限必要となる知識が得られます。, ご登録者の方には、合わせて、公認会計士が実体験を通して身に付けたエクセルを使う技をメールにてお伝えしていきます!, ※ご登録頂いたメールアドレスに、エクセルを使いこなすための情報を配信するメールセミナー「エクセル倍速講座」も合わせて配信させていただきます。. All rights reserved. ちなみにこのコードでは検索条件にヒットした最初の1件でループ処理を中断していますが、 郵便番号形式チェック. Copyright © 2020 経理・会計事務所向けエクセルスピードアップ講座 All Rights Reserved. 配列の宣言 topへ. VBAで配列の内容を検索する方法についてご説明します。 配列内で該当する条件のデータを探す場合はループ処理で1つずつデータを確認する方法と Filter関数を使用する方法があります。それでは、詳しい手順について確認してみましょう。 Copyright © ミスターフュージョン All rights reserved. 4. WordPress Luxeritas Theme is provided by "Thought is free". VBAで配列の内容を検索する方法についてご説明します。 Excel VBA の Filter 関数を紹介します。 Filter関数の使い方 Filter 関数は、文字列の配列から指定した文字列を含む配列だけを返します。検索したいときやフィルタリングに使用し… 【エクセルVBA】ワークブックを開くWorkbooks.Openの使い方とエラーの対処法, 「シート挿入」→「シート名変更」のロジックをFor~Nextループでまとめることができる, 【エクセル初心者】表の縦・横の項目を指定して値を検索する(INDEX、MATCH). また検索条件に当てはまるデータが無い場合は戻り値の配列に値が格納されていないため、UBound関数で要素数の最大値を調べると-1を返します。 配列内で該当する条件のデータを探す場合はループ処理で1つずつデータを確認する方法と 経理・会計業務を行っている方向けに、エクセルでの作業を劇的に速く、効率化する方法をお伝えします。, エクセルVBAの「配列」は、概念はわかりやすいけれど、使い道がわからないという方が多いようです。, そこで、このページでは、配列の基本的な使い方とともに、どういう用途で使うのかについて詳しく解説していきます。, 次のように、通常の変数宣言の後に「( ... to ...)」という形の指定をします。, VBAの場合は、セル範囲を配列に格納すると「下限」が自動的に「1」になってしまうので、それに合わせてこだわりがなければ下限は「1」にすることをおすすめします。, この場合には、モジュール冒頭の「Option Base」文の指定に応じて、下限は「0」または「1」に自動的に設定されます(「Option Base」の指定がない場合には、下限は「0」になります)。, たとえば、Option Baseの指定がない場合に「Dim Data(3)」と変数宣言をすると、下記のように4つ分の領域が確保されます。, 次のマクロを実行すると、 4.1 「セル」と「配列」の書き方がそっくりなので便利; 4.2 セル範囲への読み込み、書き込みを高速にする; 4.3 セル範囲を読み書きするときに気をつけるべき点. 例では配列をループ処理で一つずつチェックし、If文の条件と当てはまる文字列が見つかったらメッセージを表示しています。 複数の条件を組み合わせた検索を行いたい場合はIf文やAND、OR等を使用してループ処理でデータを検索するようにしましょう。. プログラミングの教室比較やプログラマーに特化した求人、RestAPIのSaaS情報サイト【プログラミング教育ナビ】. Filter関数を使用する方法があります。それでは、詳しい手順について確認してみましょう。, <実行例> 配列には宣言時に要素数を固定する(固定長配列)とコードの途中で変化させるもの(動的配列)があります。 固定長配列 Dim A(5) As Integer と宣言すると、要素数はA(0)~A(5)の6要素になります。 ()内の数値をインデックス番号といいます。 【例】 Exit Forを削除すると配列の最後まで検索を継続することができます。, Filter関数は1つ目の引数で指定した配列について、2つ目の引数で指定した文字列が含まれる要素を配列にして戻り値として返します。