• ベストアンサー

エクセルVBA

1ブック A列 B列 みかん 105 りんご 150 バナナ 198 2ブック A列 D列 みかん 105 りんご 150 バナナ 198 2ブックのA列が1ブックのA列と同じ値なら1ブックのB列の値を2ブックのD列に反映させたいのですが、どうしたら良いでしょうか。 A列の値を基準にB列だけでなく、他列も抽出したいのですが…。 宜しくお願いします。

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

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

続けてお邪魔します。 質問文に >A列の値を基準にB列だけでなく、他列も抽出したいのですが…。 とありましたので、余計なお世話を焼いてしまったようですね。 前回のコードはB列~最終列まですべてをコピー&ペーストするようにしていました。 No.2のお礼欄の >B行から右の列すべてが貼り付けられてしまいます。 >その方法で済むように元を変更したのですが、二つシートがあって一つは目的の列から横すべてがコピーされるのですが、もう1シートは一列しかコピーされません(;;) おそらく、前回のコードで1行目(項目行)に入っているデータで最終列を取得していましたので その辺の違いだと思います。 今回はB列データのみをSheet2のD列に表示するようにしてみました。 標準モジュールに入っている前回のコードはすべて消去し↓のコードに変更してマクロを実行してみてください。 尚、SheetのレイアウトはNo.1の画像通りとします。 Sub Sample2() Dim i As Long, c As Range, wS As Worksheet Set wS = Worksheets("Sheet2") With Worksheets("Sheet1") Application.ScreenUpdating = False For i = 2 To wS.Cells(Rows.Count, "A").End(xlUp).Row Set c = .Range("A:A").Find(what:=wS.Cells(i, "A"), LookIn:=xlValues, lookat:=xlWhole) If Not c Is Nothing Then wS.Cells(i, "D") = c.Offset(, 1) End If Next i Application.ScreenUpdating = True End With End Sub ※ これではどうでしょうか?m(_ _)m

komachi_chan
質問者

お礼

有難うございます。 まさにやりたかったことが出来ました!! 他にも色々あるのですが、まだ自分でどうまとめて良いのか分からず悩んでおります。質問できる状態になった時には宜しくお願い致しますm(__)m

その他の回答 (2)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

No.1です。 >合計式以外は計算式を消さないといけないので単に数値を貼り付けられる方法を探してます というコトですので、VBAでやってみました。 尚、今回もSheet1に元データがありSheet2に表示させるとします。 表のレイアウトは前回通りとします。 標準モジュールに↓のコードをコピー&ペーストしてマクロを実行してみてください。 Sub Sample1() Dim i As Long, lastCol As Long, c As Range, wS As Worksheet Set wS = Worksheets("Sheet2") With Worksheets("Sheet1") lastCol = .Cells(1, Columns.Count).End(xlToLeft).Column Application.ScreenUpdating = False For i = 2 To wS.Cells(Rows.Count, "A").End(xlUp).Row Set c = .Range("A:A").Find(what:=wS.Cells(i, "A"), LookIn:=xlValues, lookat:=xlWhole) If Not c Is Nothing Then .Range(.Cells(c.Row, "B"), .Cells(c.Row, lastCol)).Copy wS.Cells(i, "D").PasteSpecial Paste:=xlPasteValues End If Next i Application.ScreenUpdating = True End With End Sub ※ 質問では別Bookとなっていますが、 その場合別Bookは開いているのかどうかによってコードが変わります。 今回は簡単に同一Book内での操作としました。m(_ _)m

komachi_chan
質問者

お礼

有難うございます。やっと今日、試すことが出来ました。 再び質問なのですが、B行だけで良い場合はどうすれば良いでしょうか。B行から右の列すべてが貼り付けられてしまいます。 その方法で済むように元を変更したのですが、二つシートがあって一つは目的の列から横すべてがコピーされるのですが、もう1シートは一列しかコピーされません(;;) どちらにしても両方うまくいかないので、何か対策があれば教えて頂けないでしょうか。 宜しくお願い致しますm(__)M

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

こんばんは! >B列の値を2ブックのD列に反映させたいのですが と >A列の値を基準にB列だけでなく、他列も抽出したいのですが…。 の2点を加味しての一例です。 わざわざVBAでやる必要はないと思いますので、関数でやってみました。 >「1ブック」・「2ブック」 とありますが、同一Book内のSheet1のデータをSheet2に表示するようにしています。 (やり方は別Bookでも全く一緒です) ↓の画像で左側がSheet1・右側がSheet2とします。 Sheet2のD2セルに =IF(COUNTIF(Sheet1!$A:$A,$A2),INDEX(Sheet1!B:B,MATCH($A2,Sheet1!$A:$A,0)),"") という数式を入れ、列・行方向にフィルハンドルでコピー! これで画像のような感じになります。m(_ _)m

komachi_chan
質問者

お礼

回答、有難うございます。 その方法も考えたのですが、データ量が多いのと、合計式以外は計算式を消さないといけないので単に数値を貼り付けられる方法を探してます。何かいい方法はないでしょうか。よろしくお願い致します。

関連するQ&A

専門家に質問してみよう