行っている方向けに、エクセルでの作業を劇的に速く、効率化する方法をお伝えします。HatenaPocketvlookup関数を使うと、条件に一致する行が複数ある場合、一番上の行しか抽出できません。そこで、条件に一致する行「すべて」を抽出できるようなユーザー定義関数を作ります。まとめvlookup関数を使うと1行しか抽出できないたとえば、次のように、請求明細から請求書に自動転記をすることを考えます。このような転記をする場合、真っ先に思い浮かぶのがvlookup関数だと思います。ところが、vlookup関数を使うと、同じNoの行が複数ある場合には、最初の行しか転記することができません。条件に合う複数行を転記できるユーザー定義関数を作るエクセルには、このような条件に合う複数の行を転記できるような関数はないので、自力でarrayvlookupという関数を作ってしまいます。この関数を使うと、次のように、該当する行が複数行でも全て転記することができます。この関数を入力する方法この関数は、通常の関数とは少し入力方法が違います。いわゆる「配列数式」と同じように入力をします。1.同じ数式を入力したい範囲(=縦1列)を選択まず、最初に同じ数式を入力したい範囲を選択します。今回のarrayvlookup関数の場合は、縦1列に同じ数式を入力しますので、縦1列を選択します。2.数式を入力します実際に数式を入力します。書式は、通常のvlookup関数とまったく一緒です。3.Ctrl+Shift+Enterを押す数式を入力し終わったら、数式を確定させるのですが、通常の数式の場合とは違い「Ctrl」、「Shift」の両方のキーを押しながら「Enter」キーを押します。これで、arrayvlookup関数の入力ができました。数式を変更したいとき数式を変更したいときには、次のようにします。B3セル~B5セルの数式をC3セル~C5セルにコピーすると、正しい数式になりません。そこで、C3セル~C5セルの数式を変更してみようと思います。同じ数式が入力されている「範囲」を選択します。今回のarrayvlookup関数の場合は、縦1列に同じ数式が入力されていますので、縦1列を選択します。2.数式を編集するF2キーを押すか、数式バーをクリックすると数式を編集できます3.Ctrl+Shift+Enterを押す数式を編集し終わったら、入力時と同様に「Ctrl」、「Shift」の両方のキーを押しながら「Enter」キーを押します。これで、arrayvlookup関数が入っているセルの修正ができました。数式を削除したいとき数式を変更したいときには、次のようにします。同じ数式が入力されている「範囲」を選択します。今回のarrayvlookup関数の場合は、縦1列に同じ数式が入力されていますので、縦1列を選択します。C3セル~C5セルを選択すると次のようになります。2.数式を削除するDelキーを押す、あるいは右クリックから「数式と値のクリア」を選択すると、数式を削除できます。arrayvlookup関数-VBAソースコードarrayvlookup関数のソースコードは次のとおりです。下記ソースコードを、標準モジュールに貼り付けてください。Function関数の引数について基本的にはvlookup関数と同じ感覚で使えるのですが、vlookup関数と違う点があります。1つ目の引数:ワイルドカードの仕様が違う1つ目の引数にはワイルドカードが使えるのですが、次のような仕様になっており、ワイルドカードの仕様がvlookup関数とは違うのでご注意ください。]の中の文字を変更することで、任意の文字以外の文字を指定できます4つ目の引数:検索の型をTRUEにしても動きは変わらない4つめの引数(検索の型)をTRUEにしても、arrayvlookup関数の動作は変わりません。vlookup関数の近似値検索のようなことはできませんので、ご注意ください。以下、簡単にソースコードの解説をしていきます。ソースコードを理解しないでもarrayvlookup関数は使えます。難しいと思ったら読み飛ばしてください。Variant返り値を入れる用の変数(ret)を準備します。普通は、返り値は関数名(arrayvlookup)と同名の変数に代入して終わりです。ところが、今回のように複数セル分の返り値を格納する場合には、いったん別の変数を経由してarayvlookupに格納しないといけません(そういう仕様のようです)。そこで、retという変数を準備します。Variant形で変数を宣言した後に、2次元配列として変数を再宣言します。Variant「Application.Caller」を使うと、呼び出し元のセル範囲が分かります。そこで、「Application.Caller」の内容に応じて、変数ret(=返り値を一時格納する変数)の配列長を決めています。R.Worksheet.UsedRange)処理対象となる「範囲」を設定します。通常は、2つめの引数で受け取った変数Rを使えば問題はありません。「$B:$C」や「$B1:$C65535」といった、多数の行を含む引数を指定された場合に、後続処理で時間がかかってしまいます。そこで、2つめの引数と、実際に使われている領域(UsedRange)に共通する部分(intersect)を、変数targetRに入れます。2つめの引数(変数R)の内容が「$B:$C」UsedRangeが「$A1:$E999」だとすると、変数targetRには、その共通部分である「$B$1:$C$999」が格納されます。ここから後の処理は、targetRについてのみ行います。targetRエクセルでは、セルの内容を見るという処理には非常に時間がかかります。そこで、ここで、セルの内容を一気に、Dataという変数に取り込んでしまいます。この文だけ見ると非常にわかりにくいですが、結果としてDataは2次元配列になります。targetRが「$B$1:$C$999」だとすると、Dataは999行×2列の2次元配列になります。2)」として変数を作ったのと、まったく同じ状態になると思ってください。その配列に、targetRで指定したセルの内容が格納されます。B1セルの内容は「Data(1,1)」B2セルの内容は「Data(2,1)」C2セルの内容は「Data(2,2)」にそれぞれ格納されます。Nextここが、今回の処理の中心部分です。Forループで、Data(1,1)、Data(2,1)、Data(3,1)と順番に、内容を確認していきます。その中で1つめの引数(変数key)と等しいものがあった場合には、返り値(変数ret)に3つめの引数(変数C)で指定した列のデータを格納していきます。「=arrayvlookup(A3,$A$11:$G$17,2,FALSE)」という数式が入力された場合を考えてみます。3つめの引数(変数C)には「2」が指定されています。仮に、Data(1,1)とA3セルの内容(変数Key)が等しい場合には、「Data(1,2)」の内容を変数retに格納することになります。実際には、変数retは配列なので、もう少し複雑な処理をしていますが、複雑になるので説明は省略します。If変数retは(5つ目の引数をしてしない場合)最大で20行分の値を格納できます。変数keyに該当する行が2行しかなかった場合、変数retの残り18行分は何も処理されないままになってしまいます。そこで、その場合には、明示的に「""」(=空欄)を格納します。retY>1でない場合(=1行も変数keyに該当する行がなかった場合)には、vlookupと同じように、返り値の初期値を「#N/A」に設定しておきます。ret変数retの内容を返り値格納用変数arrayvlookupに代入します。まとめvlookup関数で条件に一致する複数行の値が欲しいときには、ユーザー定義関数を作りましょう。この関数は「配列数式」と同じように、入力方法がやや特殊です。数式入力時に「Ctrl+Shift+Enter」と押す必要がありますので、気をつけてください。総収録時間162分)を無料プレゼント中です!このマニュアルで解説していることを一通り学べば、経理事務を行う上で最低限必要となる知識が得られます。名メールアドレス無料動画マニュアルを受け取る>※ご登録頂いたメールアドレスに、エクセルを使いこなすための情報を配信するメールセミナー「エクセル倍速講座」も合わせて配信させていただきます。小数をif関数、vlookup関数に使うときは演算誤差に注意エクセルで小数を使うときには注意が必要です。...【超々初心者向き】エクセルVBA-変数とは何か?使いこなすポイントを徹底解説エクセルVBAを使いこなすためには「変数」を理解することは欠かせません。...【エクセルVBA】全シートでA1セルを選択した状態にするマクロあらかじめ、全てのシートでA1セルを選択した状態にする方法を紹介します。...vlookup関数がおかしい・エラーを解消する8つのチェックポイントvlookup関数を使うと非常に効率的な作業ができます。