- ベストアンサー
【Excel VBA】条件に合うデータの転記方法
- Excel2003を使用している場合、特定の範囲内で条件に合うデータを転記したい場合、どのようにコードを書けば良いでしょうか?
- Sheet2の選択範囲内で、A列とB列の値がSheet1のA列とB列の値と一致した場合、Sheet1のC列の値をSheet2のE列に転記したいという場合のコードの書き方を教えてください。
- 特定の範囲内で条件に合ったデータを転記する方法について、Excel VBAを使用している場合のコードの書き方を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
例えばこんなマクロでもできます Sub Macro1() Dim idx As Integer Dim fAdr As String Dim rng As Range If TypeName(Selection) = "Range" Then With Selection For idx = .Row To .Row + .Rows.Count fAdr = "" Set rng = Sheets("Sheet1").Range("A1:A41").Find( _ What:=Cells(idx, 1).Value, LookIn:=xlValues, LookAt:=xlWhole) If Not rng Is Nothing Then fAdr = rng.Address Do If rng.Offset(0, 1).Value = Cells(idx, 2).Value Then Cells(idx, 5).Value = rng.Offset(0, 2).Value Exit Do End If Set rng = Sheets("Sheet1").Range("A1:A41").FindNext(rng) Loop Until fAdr = rng.Address End If Next idx End With End If End Sub
その他の回答 (1)
- zap35
- ベストアンサー率44% (1383/3079)
#01です >Set rng = Sheets("Sheet1").Range(Cells(1, 1), Cells(i, 1)).~ 変数iが何を示すか補足からは分かりませんが、これはダメでしょう おそらくSheet2がアクティブになっていると思いますので Cells(1, 1) は Sheets("Sheet2").Cells(1, 1) を意味します。 Range(Sheets("Sheet1").Cells(1, 1), Sheets("Sheet1").Cells(i, 1)).~ にしなくてはならないと思いますよ。
お礼
再度の回答ありがとうございます。 説明不足にも関わらず、適格なアドバイスをいただいたおかげで、うまくいきました。 おっしゃるとおり、Sheet2がアクティブになっていたので、Rangeの後の括弧内で、Sheet1を指定してあげればよかったのですね。 説明されれば、『あ、そっか…』という感じですが、こんなことにも気づかないなんて、お恥ずかしい限りです(^^ゞ 当初、考えていたものより使いやすいものができて、満足しています。 ありがとうございました!
お礼
回答ありがとうございます。 教えていただいたマクロで試してみたところ、無事処理することができました。 質問文では、Sheet1の範囲を一定にしていましたが、これをSheet2のように、都度、選択範囲を取得するようにもできるでしょうか? >Set rng = Sheets("Sheet1").Range("A1:A41").~ ↓ >Set rng = Sheets("Sheet1").Range(Cells(1, 1), Cells(i, 1)).~ のように書き換えてみたのですが、『Rangeメゾットは失敗しました』 というエラーメッセージが出ました。この部分以外にも変更しなければいけないのでしょうか…。 よろしければ、教えていただけると助かります。