質問: Application.WorksheetFunction.VLookup(管理番号, マスデ.Worksheets("情報_01").Range("A1:C100"), 2, False) '計算結果を検索する End With End Sub ```
回答: 原因について ====== おそらく、シート「情報_01」のA列(「管理番号(D+E)」の列)に入っている管理番号のデータが数値として入っているため、VBA 条でString 型として定義されている変数 「管理情報」とのマッチングでマッチしないのだと思われます。 ISNUMBER()関数などで当該セルを確認してみてください、おそらくTRUE となると思います。 解決方法 ==== 解決方法としては、以下のように、当該列のデータを文字列にすることが考えられます。 1. 当該列の選択し、セル書式で表示形式を「文字列」にする。 2. 当該列のデータをテキストエディタなどにコピーしたのち、再度貼り付ける。 VBA プログラム上で、「管理番号」を数値(Integer)にする方法も考えられますが、あまりお勧めしません。 理由は、「管理番号」が数値というよりもIDとして扱われていると思われるため 「010100」といった、ゼロから始まる番号が出現する可能性も考えられ、その場合はうまく処理できなくなってしまうためです。 この種のエラーを調べる方法について ================= Excel の関数を VBA で使っていて思った通りに動かない場合は、 いったん VBA から離れて、元のExcel の関数で動作を確認してみるのが 早道だと思います。 今回の場合なら、同一ブックに適当なシートを追加するなりして、 適当なセルに以下のような式を入れてみれば、 すくなくとも、VBAの問題か、Excel 関数の問題かの切り分けはすぐにできます。 ``` =VLOOKUP(A1, 情報_01!A1:D3, 2, FALSE) ``` ※A1 は任意のセルを指定 ここまで調べて、Excel 関数の問題だと判明した状態なら、Excel の問題として質問できるので、回答できる人も多くなり、より良い回答がより速く得られるでしょう。