- ベストアンサー
初心者のためのエクセルVBAデバックの対応方法
- 初心者である方がエクセルVBAのデバックに悩んでいる場合、以下の対応方法があります。
- まず、エラーメッセージを確認し、エラーコードを調べることが重要です。
- 次に、デバック箇所のコードを詳しく分析し、誤っている部分を見つけましょう。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
エラーの原因は、X<>0(等しくない)とき、 変数Bの値ががシートの最終行を超えるからです。 例えば、 セルA1:50 セルC1:スペース(未入力) この時、変数Bだけが+1され続け、 シートの最終行(xl2000~2003では、65536)を超えてしまう。 ★Cells(B, 1).Value ー> Cells(65537, 1).Value デバッグ状態でエラー行のBにマウスポインターを持っていけば その時点のBの値が確認できます。 それから、他にもおかしいところがあります。 実際のデータと照らし合わせながら1行ずつ追ってみるとわかります。 で、慣れたらもっと簡単な方法がありますが、初心者ということなので C列の値があるセルを1行目から最終行までひとつずつ A列1行目からA列最終行の値と比較していくといいでしょう。 最終行とは値の入力されてる最終の行のことです。 A列最終行は、Cells(Rows.Count,3).End(xlup).Row C列最終行は、Cells(Rows.Count,1).End(xlup).Row '------------------------------------- Sub test() Dim A As Long Dim C As Long For C = 1 To Cells(Rows.Count, 3).Row If Cells(C, 3).Value <> "" Then For A = 1 To Cells(Rows.Count, 1).Row If Cells(C, 3).Value = Cells(A, 1).Value Then Cells(C, 4).Value = Cells(A, 2).Value Exit For End If Next A End If Next C End Sub '-------------------------------------- 以上です。
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
Cells(B - 1, 2はCells(0,2)となり時期があって(始めのとき)、これではセルを示せない。 ー 再現してみると Sub test01() Cells(0, "B") = 1 End Sub を事項すると、「実行時エラー1004 アプリケーション、オブジョクトの定義のエラー」となります。 ーー ロジックというか比較対象を良くアンが得ること。 最初の行の扱いは注意が必要。 第1行目のまえは存在しない。はから比較はしないように特別措置が必要。
お礼
早速のご回答ありがとうございました。 なるほど、確かに対照できない命令文になってしまう可能性があります。 今後はまず、図などに起こして考えてから作るようにしていきたいと思います。 ありがとうございました。
- ziziwa1130
- ベストアンサー率21% (329/1546)
VBAを使わなくても、例えばA1~A1000に数値、B1~B1000に文字列、C1~C300に数値が入っていて、D1~D300にC列に対応する文字列を出したい場合には、D1に"=VLOOKUP(C1,$A$1:$B$1000,2,FALSE)"と入力してコピー、D2~D300にペーストすれば簡単にできますよ。
お礼
早速の回答、ありがとうございます。 このような関数があったのですね・・・試した見たところ、非常に簡単に作業できました。 大変助かりました。ありがとうございました! ・・・ただ、質問した手前、と申しますか、VBAの対応も知っておきたいと考えておりますので、質問は締め切らずにいたいと思います(といってもすでに解決しておりますので明日には締め切りますが)。 大変お手数ですが、引き続き回答をいただけたらと思います。 よろしくお願いいたします。
お礼
丁寧なご対応ありがとうございました。 なるほど、確かにデバック中にマウスポインタをもっていったら最終行になっておりました。 書いてくださった文章も一つ一つどんな命令か理解しつつ、使わせていただきました。 今後は一度、図に起こすなど考えを煮詰めてから文章に起こしたいと思います。 ありがとうございました!