• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:【Excel VBA】条件に合うデータの転記)

【Excel VBA】条件に合うデータの転記方法

このQ&Aのポイント
  • Excel2003を使用している場合、特定の範囲内で条件に合うデータを転記したい場合、どのようにコードを書けば良いでしょうか?
  • Sheet2の選択範囲内で、A列とB列の値がSheet1のA列とB列の値と一致した場合、Sheet1のC列の値をSheet2のE列に転記したいという場合のコードの書き方を教えてください。
  • 特定の範囲内で条件に合ったデータを転記する方法について、Excel VBAを使用している場合のコードの書き方を教えてください。

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

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

例えばこんなマクロでもできます 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

rx-z5815
質問者

お礼

回答ありがとうございます。 教えていただいたマクロで試してみたところ、無事処理することができました。 質問文では、Sheet1の範囲を一定にしていましたが、これをSheet2のように、都度、選択範囲を取得するようにもできるでしょうか? >Set rng = Sheets("Sheet1").Range("A1:A41").~                   ↓ >Set rng = Sheets("Sheet1").Range(Cells(1, 1), Cells(i, 1)).~ のように書き換えてみたのですが、『Rangeメゾットは失敗しました』 というエラーメッセージが出ました。この部分以外にも変更しなければいけないのでしょうか…。 よろしければ、教えていただけると助かります。

その他の回答 (1)

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.2

#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)).~ にしなくてはならないと思いますよ。

rx-z5815
質問者

お礼

再度の回答ありがとうございます。 説明不足にも関わらず、適格なアドバイスをいただいたおかげで、うまくいきました。 おっしゃるとおり、Sheet2がアクティブになっていたので、Rangeの後の括弧内で、Sheet1を指定してあげればよかったのですね。 説明されれば、『あ、そっか…』という感じですが、こんなことにも気づかないなんて、お恥ずかしい限りです(^^ゞ 当初、考えていたものより使いやすいものができて、満足しています。 ありがとうございました!

関連するQ&A

専門家に質問してみよう