みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ExcelVBA データのコピー範囲について

あけましておめでとうございます。今年もよろしくお願いします。

Sub Test()
Dim myTarget As Range, r As Range, f
Set myTarget = Sheets("Sheet1"). _
   Range("B2", Sheets("Sheet1").Range("B65536").End(xlUp))
For Each r In myTarget
 Set f = Sheets("Sheet2").Columns(1). _
   Find(r.Value, Sheets("Sheet2").Range("A1"), Lookat:=xlWhole)
 If Not f Is Nothing Then
   If r.Offset(0, 3).Value <> f.Offset(0, 3).Value Then
     f.Resize(1, 4).Copy Destination:= _
     Sheets("Sheet3").Range("A65536").End(xlUp).Offset(1, 0)
   End If
 End If
Next r
End Sub

前回の質問で教えていただいたコードなのですが、現時点では、B列のデータを元にして二つのSheetのデータを比較して別Sheetへコピーしているのですが、そのときに、B列以降の(たとえば、B列からX列まで)データはコピーできますが、A列もコピーしたい時はどうすればよいのかで、悩んでいます。どの様に変更すればよいのでしょうか?

投稿日時 - 2005-01-03 19:02:03

QNo.1151167

暇なときに回答ください

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

例示されたコードでは、結果が出なかったので
一部変更しています。

Sub Test()
Dim myTarget As Range, r As Range, f
Set myTarget = Sheets("Sheet1"). _
   Range("B2", Sheets("Sheet1").Range("B65536").End(xlUp))
For Each r In myTarget
 Set f = Sheets("Sheet2").Columns(2). _
   Find(r.Value, Sheets("Sheet2").Range("B2"), Lookat:=xlWhole)
'変更前 Set f = Sheets("Sheet2").Columns(1). _
'変更前 Find(r.Value, Sheets("Sheet2").Range("A1"), Lookat:=xlWhole)

 If Not f Is Nothing Then
   If r.Offset(0, 2).Value <> f.Offset(0, 2).Value Then
'変更前 If r.Offset(0, 3).Value <> f.Offset(0, 3).Value Then

     f.Offset(0, -1).Resize(1, 4).Copy Destination:= _
     Sheets("Sheet3").Range("A65536").End(xlUp).Offset(1, 0)
'回答個所  f.Resize(1, 4).Copy

   End If
 End If
Next r
End Sub

投稿日時 - 2005-01-03 23:12:10

お礼

細かい質問に答えていただき感謝いたします。
データもウマク動き大変感動しています。
ありがとうございました。

投稿日時 - 2005-01-09 20:55:12

ANo.5

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.4

元の質問は
http://okweb.jp/kotaeru.php3?q=1130032
ですよね。
例データは私が一部補充。
元のソースのままで実行してみました。
(Sheet1)A1:D4
コード商品店名納入日
0360メロンD店1月4日
0001みかんA店1月3日
0112きんかんC店1月4日
(Sheet2)A1:D4
コード商品店名納入日
0001みかんA店1月3日
0360メロンD店1月2日
0112きんかんD店2月11日
(結果)Sheet3
0360メロンD店1月2日
0112きんかんD店2月11日
となり、A列(=コード)ももって来てますが。
私の勘違いなら済みません。

投稿日時 - 2005-01-03 21:08:56

お礼

なんだか、私の質問の仕方が悪いようなので、もう一度書きます。
(Sheet1)A1:D4
入力日 区画 コード 商品 店名 納入日
1/1   1   0360 メロン D店 1月4日
3/2   1   0001 みかん A店 1月3日
3/3   3   0112 きんかん C店 1月4日
(Sheet2)A1:D4
入力日 区画 コード 商品 店名 納入日
3/2   1   0001 みかん A店 1月3日
1/1   1   0360 メロン D店 1月2日
3/3   3   0112 きんかん D店 2月11日
(結果)Sheet3
1/1   1   0360 メロン D店 1月2日
3/3   3   0112 きんかん D店 2月11日

という状況に変わったので、C列のコードが一致する行の納入日を比較して結果を出したいのですが、現在の
   If r.Offset(0, 3).Value <> f.Offset(0, 3).Value Then
     f.Resize(1, 4).Copy Destination:= _
     Sheets("Sheet3").Range("A65536").End(xlUp).Offset(1, 0)
   End If
のままだとC列より左側のデータがコピーされないので困っています。どのように書き直すのが良いのでしょうか?

投稿日時 - 2005-01-03 22:25:52

ANo.3

まちがっちゃった。
Set myTarget = Sheets("Sheet1"). _
   Range("E2", Sheets("Sheet1").Range("B65536").End(xlUp))

だね。

投稿日時 - 2005-01-03 19:47:50

ANo.2

Set myTarget = Sheets("Sheet1"). _
   Range("B2", Sheets("Sheet1").Range("B65536").End(xlUp))


Set myTarget = Sheets("Sheet1"). _
   Range("A2", Sheets("Sheet1").Range("B65536").End(xlUp))

になるんでないの?

アドバイスだけど、
こういう質問のときは、前回の質問の番号を出した方がいいよ。

投稿日時 - 2005-01-03 19:45:14

ANo.1

f.Resize(1, 4).Copy Destination:= _

f.Resize(0, 4).Copy Destination:= _
でどうですか?

誰に教えてもらったコードなの?
綺麗なコードだね。

投稿日時 - 2005-01-03 19:30:08

補足

ありがとうございます。
すみません、もしE列を比べて、A-D列もコピーの場合はどうなるんでしょう??

投稿日時 - 2005-01-03 19:38:44

あなたにオススメの質問