• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エラーも起きず何も分からない(~_~;) VBA)

エラーも起きず何も分からない(VBA)

このQ&Aのポイント
  • VBAでコーディング中にエラーが発生せず、しかし何も結果が得られない問題が発生しています。具体的には、特定のコードの実行後、変数「kyu」に値が入らず、原因がわからない状況です。
  • 問題のコードは条件分岐を行う内容で、特定の条件の場合にはワークシートの特定のセルの値を変数「kyu」に代入する処理が行われるはずです。しかし、この処理が実行されていないようであり、その理由が不明です。
  • 原因の特定のため、コードの変数の値や条件の確認、およびデバッグが必要です。具体的には、条件分岐の条件が正しく設定されているか、ワークシートのセルの範囲や値が正しく指定されているか、変数の値が適切に代入されるかを確認する必要があります。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

>順番にやっていくとVlookupがうまくいっていないようです、、、 H = Application.WorksheetFunction.VLookup(a, .Range("B9:J13"), 3) は「aの中身の値が、B9~B13の中にあったら、あった行のD列の中身を取り出す」です。 取り出す場所はD列ではないのではないですか?H列から取り出さないといけない筈ですが? 3つ目の引数の「3」は「左から数えて3番目から取り出す」を意味します。 2つ目の引数で、セル範囲をB~Jの範囲で指定していますから、3つ目の引数は 0以下⇒実行時エラー(引数が範囲外) 1⇒B列から取り出す 2⇒C列から取り出す 3⇒D列から取り出す 4⇒E列から取り出す 5⇒F列から取り出す 6⇒G列から取り出す 7⇒H列から取り出す 8⇒I列から取り出す 9⇒J列から取り出す 10以上⇒実行時エラー(引数が範囲外) となります。 検索対象の列がB列、取り出す場所がH列であれば、この式は H = Application.WorksheetFunction.VLookup(a, .Range("B9:H13"), 7) でなければいけません。 検索する範囲は「B9:J13」ではなく「B9:H13」で良い筈です。 取り出すのがH列ですから、取り出し位置は3ではなく7です。 たぶん、該当行のD列には「空白セル」がある筈です。なので、変数Hには「空(Null)」が入る筈です。 エラーも起きないし、何も入らなくて当たり前です。 >On Error GoTo 0 >これはどうなるのでしょうか?? これの意味は「エラーがあったらエラーで止まれ」です。 どこかで「On Error Resume Next」と書いてあると、エラーが出てもエラーで止まらずに次のステートメントを実行してしまうので「エラーがあったらエラーで止まれ」って意味で入れます。 一応、On Error Resume Nextは、プロシージャが終了したら(Subが終了したり、Exit Subしたら)解除されますが、同じプロシージャ内のどこかでOn Error Resume Nextしてる可能性があるので、念のために入れてもらいました。

lostsymbol
質問者

お礼

セルを結合していたので3にしてました、、 7にするとうまくいきました! Vlookupは結合を無視して数えるのですね(・_・;) たびたびありがとうございました_(_^_)_

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • FEX2053
  • ベストアンサー率37% (7995/21384)
回答No.3

>H = Application.WorksheetFunction.VLookup(a, .Range("B9:J13"), 3) >ここの時点でHに何も入っていないことが判明しました、、 そりゃそうです。 WorksheetFunction.の後ろは「ワークシート上で()内の式が成立している 必要がある」んですけど、VLookup(a, .Range("B9:J13"), 3)←これ、ワーク シート上に書いて、動作しますか? .Range とか a とかが、関数式として意味があるか先にチェックが必要かと。 何が狙いかわからないので、↓を参考に。こちらのサイトはいろいろと参考 になりますよ。 http://www.moug.net/tech/exvba/0100035.html

lostsymbol
質問者

補足

a = .Range("W24") - (.Range("D17") + .Range("H17")) End With With wssyo 質問のコードの上の部分です .Rangeもaも使えるはずなのですが、、、

すると、全ての回答が全文表示されます。
  • FEX2053
  • ベストアンサー率37% (7995/21384)
回答No.2

そりゃ、動かないでしょ。↓意味ないですもん。 Evaluate(H) 何をしたいのかわかりませんが、VBAのEvaluateメソッドって、 引数に関数を入れないと意味がないと思いますが? http://www.moug.net/tech/exvba/0100045.html 単にHの値をkyuに入れたいだけなら Kyu=H これだけの話ですよ。

lostsymbol
質問者

お礼

Evaluateは前回の質問で使えばいいと教えられてそのまま転用しただけなので(・_・;) 使い方がよくわからないのです、、

lostsymbol
質問者

補足

詳しく調べてみると H = Application.WorksheetFunction.VLookup(a, .Range("B9:J13"), 3) ここの時点でHに何も入っていないことが判明しました、、 Vlookupのやり方が間違っているのでしょうか??

すると、全ての回答が全文表示されます。
回答No.1

>エラーも起きず 一番最初のif文の直前に On Error GoTo 0 って入れてみましょう。 >なぜか何も入りません(・_・;) 悩んだら、ブレークポイントで止めて、止めたらステップ実行。

lostsymbol
質問者

お礼

On Error GoTo 0 これはどうなるのでしょうか??

lostsymbol
質問者

補足

順番にやっていくとVlookupがうまくいっていないようです、、、

すると、全ての回答が全文表示されます。

関連するQ&A