- ベストアンサー
マクロについて質問です。
画像のように別のブックがあって同じレイアウトでデータが並んでいるとします。ブック1が主のデータです。ブック2のA列にある数字をめやすに、ブック1のA列に同じ数字があったらそこから下7行横4列を置き換えるということはできるのでしょうか。画像でいうと、数字の5と8の行列が入れ替えられる感じです。もし、こういうことができるマクロがありましたら、教えていただきたいです。よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
No.1です。 >ブック1の標準モジュールとしてブック1以外の開いているブックからとすることはできるでしょうか。 ↓のコードをBook1の標準モジュールにしてみてください。 Sub Sample2() Dim i As Long, c As Range, wB As Workbook, wS As Worksheet Set wB = Workbooks(2) Set wS = wB.Worksheets("Sheet1") With ThisWorkbook.Sheets("Sheet1") For i = 1 To wS.Cells(Rows.Count, "A").End(xlUp).Row If wS.Cells(i, "A") <> "" Then Set c = .Range("A:A").Find(what:=wS.Cells(i, "A"), LookIn:=xlValues, lookat:=xlWhole) If Not c Is Nothing Then c.Offset(, 1).Resize(7, 3).Copy wS.Cells(i, "B") End If End If Next i End With End Sub 尚、前提条件として、 (1)一旦BOOK1を開いておく (2)メニューバーのファイル(Excel2007の場合はOfficeボタン)→ 開く → 保存場所から「Book2」を開く (3)メニューの表示から「整列」で二つのブックを並べて表示しておく。 となっているとします。 ※(3)に関しては無理に並べて表示しておく必要はありません。 別窓でBook1を開いている場合はエラーとなります。m(_ _)m
その他の回答 (1)
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! 一例です。 Book2の標準モジュールです。 Sub Sample1() Dim i As Long, c As Range, wB As Workbook, wS As Worksheet Set wB = Workbooks("Book1.xlsx") Set wS = wB.Worksheets("Sheet1") With ThisWorkbook.Worksheets("Sheet1") For i = 1 To .Cells(Rows.Count, "A").End(xlUp).Row If .Cells(i, "A") <> "" Then Set c = wS.Range("A:A").Find(what:=.Cells(i, "A"), LookIn:=xlValues, lookat:=xlWhole) If Not c Is Nothing Then c.Offset(, 1).Resize(7, 3).Copy .Cells(i, "B") End If End If Next i End With End Sub ※ Book2のSheet1のA列に検索したいデータは7行おきにあるとします。 ※ Book1が開いていない場合はエラーとなります。 (Book1を開く場合は保存場所のフルパスを記載します) とりあえずはこの程度で・・・m(_ _)m
補足
回答ありがとうございます。説明が下手で申し訳ないのですが、ブック1の標準モジュールとしてブック1以外の開いているブックからとすることはできるでしょうか。
お礼
助かりました。ありがとうございます。