■試したコード
For i = 2 To xlDown
search= Worksheets("sheet1").Cells(i, 2).Value
If Worksheets("sheet2").Range("A1:A6").Find(What:="search") Then
Worksheets("sheet1").Cells(i,3) = "アメリカ"
Else
Worksheets("sheet1").Cells(i, 3) = "日本"
問題点が分からないので解決方法を教えて頂きたいです。
えっと、、、
Findメソッドは、
「セル範囲」に対して検索する機能です。
そして、検索をして見つかったら、見つけた「セル範囲」を返します。
例えば、
「A列のセル」を見て「ニューヨーク」という文字が入っているセルを探す。
と命令して、
「A2セル」が見つかったとします。
そうすると、kagobitoさんが書かれている文章は
「もし、(A2セル)がその時は、3列目に(アメリカ)と入力する」
と書かれていますよね?
なんのことかわかります????
「もし、(A2セル)の値がニューヨークならば、その時は3列目に(アメリカ)と入力する」
というように書かないといけないですよね?
オブジェクト変数またはwithブロック変数が設定されていません とエラーが出ます
ここでまずは、「オブジェクト」とは何ぞや?ということを理解しておく
必要があります。(詳しくはネットで検索して確認をしてください。)
ここでは、「オブジェクト≒操作対象」という形で説明します。
つまりFnidメソッドで返ってきた操作対象のセルに対して、
どんな操作をするのかが書かれていないので、
何をしていいかわからないよというエラーです。
※エラーメッセージはズバリのヒントをくれないことが多々ありますので、
注意してください。
今回のFindメソッド件の場合、
検索して見つかった場合は、セル範囲を返しますし、
見つからなかった場合は、「Nothing」を返しますので、
一旦変数に返り値を受けて、
もし、その中身がNothingなら、何もしない。
そうでなければ、帰ってきたセル範囲に対して、
なんらかの操作の指示をしてやる必要があります。
Nothingの場合、操作対象でないので、操作の命令をするとエラーに
なりますので、Nothingかどうかで条件分岐をします。
そして、セルが見つかった場合は、その返り値を再利用したいので、
「変数」にそれを保持しておきます。
ExcelVBA
1Sub test()
2 Dim i As Long, j As Long
3 Dim rngTarget As Range
4
5 i = 2
6 j = Worksheets("Sheet1").Range("A1").End(xlDown).Row
7
8 For i = i To j
9 Set rngTarget = Worksheets("Sheet2").Range("A1:A6").Find( _
10 what:=Worksheets("Sheet1").Cells(i, 2).Value)
11 If rngTarget Is Nothing Then
12 Else
13 Worksheets("Sheet1").Cells(i, 3).Value = rngTarget.Offset(, 1).Value
14 End If
15 Next
16End Sub
※普段なら、こんな書き方はしないのですが、
kagobitoさんが書きかけたコードを出来るだけいじらない方が、
kagobitoさんが理解しやすいかなと思ってサンプル書いてます。
他の方の質問と回答などのコードをたくさん見て、
変数(特にオブジェクト変数)の使い方を勉強されてみるといいと思います。