Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(指定なし : 指定なし)
VBA XLOOKUP テーブルの複数列が検索範囲
投稿日時: 23/01/27 11:43:41
投稿者: tarima

ワークシートでは、以下のような式で結果を得られます。
=XLOOKUP("8888"&"99",tbl_科目[科目コード]&tbl_科目[科目コード2],tbl_科目[金額])
 
VBAで取得する場合、以下のように書くと「型が一致しません。」のエラーになります。
テーブルの複数列を検索対象として、結果を得たいです。
どこを修正すればよいのか教えていただけますでしょうか。
 
 Dim KAMOKUcode1 As String
  Dim KAMOKUcode2 As String
  KAMOKUcode1 = "8888"
  KAMOKUcode2 = "99"
  Dim KINGAKU
   
KINGAKU = WorksheetFunction.XLookup(KAMOKUcode1 & KAMOKUcode2, Range("tbl_科目[科目コード]") & Range("tbl_科目[科目コード2]"), Range("tbl_科目[金額]"))
 
  

回答
投稿日時: 23/01/27 13:36:32
投稿者: simple

 Range("tbl_科目[科目コード]") & Range("tbl_科目[科目コード2]")
が配列と配列を直接、連結しようとしていますが、そうしたことはできない仕様です。
 
式をそのまま評価してしまうこともたぶん可能だと思います。
KINGAKU =[XLOOKUP("8888"&"99",tbl_科目[科目コード]&tbl_科目[科目コード2],tbl_科目[金額])]
こちらも動作未確認で恐縮です。結果お知らせください。
 
正攻法については他の回答者さんの回答をお待ちください。

投稿日時: 23/01/27 13:50:46
投稿者: tarima

simpleさん
ありがとうございます。値を直接指定の場合は取得できました。
 
変数 KAMOKUcode1, KAMOKUcode2 使用する場合の書き方がわかりません。

回答
投稿日時: 23/01/27 16:56:49
投稿者: simple

XLOOKUP("888899",tbl_科目[科目コード]&tbl_科目[科目コード2],tbl_科目[金額])
という文字列を構成して、それを Evaluateメソッドに渡すだけですが。
ダブルクオーテーションの再現方法が手間取るかもしれませんが、文字列作成の問題です。
トライしてみてください。
 
しかし、なんだか本末転倒感があります。
なぜVBAなんでしたっけ?
ワークシート上でできているなら、それでいいじゃないですか。
 
どうしてもマクロだということなら、
(1)テーブルの項目に連結した列を作成する方法はどうですか?
(2)もしくは、自前で連結した配列を作成して、それをXLOOKUPに渡す。
(3)
 ・ワークシート上で引数をセル参照にしたXLOOKUPを使った計算式を書いて置いて、
 マクロ側からは、
 ・その引数にあたるセルに値を入れ
 ・結果のセルの値を取得
する
(4)XLOOKUPを離れて、dictionaryを使って書くことも可能でしょう。
  (ワークシート関数で簡単にできるならそれを使ったほうがいいでしょうね。)
 
なにか簡単な書き方がありそうな気もします。(どなたかから回答があればいいですね)

投稿日時: 23/01/28 20:33:45
投稿者: tarima

回答ありがとうございます。
他の方法にします。