プロが教える店舗&オフィスのセキュリティ対策術

Excel2003を使用しています。

2つのシート間の特定の範囲内で、条件に合うデータを転記したいのですが…

Sheet1(A1:C41) ← 一定範囲
Sheet2(選択範囲) ← 都度、選択範囲取得

Sheet2の選択範囲内で、A列とB列の値が、Sheet1のA列とB列のそれぞれの値と一致した場合、Sheet1のC列の値をSheet2のE列に転記したいのですが、こういう場合、コードはどのように書いたらいいでしょうか?

条件に合ったものを順に転記していくコードは書いたことがあるのですが、特定の範囲内ということや、転記する場所が指定されたりしていて、つまづいています。

よろしくお願いします。

A 回答 (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
    • good
    • 2
この回答へのお礼

回答ありがとうございます。

教えていただいたマクロで試してみたところ、無事処理することができました。
質問文では、Sheet1の範囲を一定にしていましたが、これをSheet2のように、都度、選択範囲を取得するようにもできるでしょうか?

>Set rng = Sheets("Sheet1").Range("A1:A41").~
                  ↓
>Set rng = Sheets("Sheet1").Range(Cells(1, 1), Cells(i, 1)).~

のように書き換えてみたのですが、『Rangeメゾットは失敗しました』
というエラーメッセージが出ました。この部分以外にも変更しなければいけないのでしょうか…。

よろしければ、教えていただけると助かります。

お礼日時:2008/04/17 14:49

#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)).~
にしなくてはならないと思いますよ。
    • good
    • 0
この回答へのお礼

再度の回答ありがとうございます。

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

当初、考えていたものより使いやすいものができて、満足しています。
ありがとうございました!

お礼日時:2008/04/18 09:34

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!