- ベストアンサー
excelで他のブックからセル範囲を取得する方法
- Excelで他のブックから特定のセル範囲を取得する方法について教えてください。
- 複数のブックから同じフォーマットのセル範囲を取得し、別のブックにセットする方法について教えてください。
- コードを使用して、Excelの特定のセル範囲を別のブックに集計する方法について教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>B1~B3を開かずにできたらと思っていたのですが、可能でしょうか。 bkPath にBブックの場所を指定してください。 Sub BookCopy2() Dim f As Integer Application.ScreenUpdating = False For f = 1 To 3 Call BookCopuSub2(f) Next Range("A1").Select Application.ScreenUpdating = True End Sub Sub BookCopuSub2(f As Integer) Const bkPath = "N:\*******\" '// Bブックの場所を指定 Dim bkName As String bkName = "B" & f & "book.xlsx" Workbooks.Open bkPath & bkName Sheets("Sheet1").Select Range("A1:C7").Select Selection.Copy Windows("ABook2.xlsm").Activate With Range("A1") .Offset((f - 1) * 3, 0) = "B" & f & "book.xlsx" .Offset((f - 1) * 3, 1).Select Selection.PasteSpecial Paste:=xlPasteAll, _ Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True End With Application.DisplayAlerts = False Workbooks(bkName).Close Application.DisplayAlerts = True End Sub
その他の回答 (3)
- Mathmi
- ベストアンサー率46% (54/115)
>他ブックからセルを範囲で取得する方法 セルの表記をブックから正確に記述すると Workbooks(ブック名).Worksheets(シート名).Range(セル範囲) になります。 なので、既に開いている[B1book.xlsx]ブックの[Sheet1]シートの[A1:C7]セル範囲は Workbooks("B1book.xlsx").Worksheets("Sheet1").Range("A1:C7") で取得できます。 (開いていないブックのデータを取得するのは、どのフォルダに存在するファイルか、から指定しないといけないので、難易度が結構上がります) これが分かっていれば、後は力業でも何とかできます。 ・作業するブックは全て開いている。 ・コピーするセル、貼り付けるセルは全てSheet1である。 ・セル自体をコピーする(値だけでなく、文字色等の書式も含める)。 という前提で組んでみました。 値だけをコピーしたい場合は、コピー部分のコメントアウトを切り替えて下さい。 Sub CopyOtherBooks() Dim i As Long Dim myBK As Workbook 'ループ用 Dim aryBooks As Variant 'データを取得するブック名。 Dim rangeCopy As Range 'コピーするセル範囲 Dim cellPaste As Range '貼り付ける基準セル。 'コピーするブック名一式を設定 aryBooks = Array("B1Book.xlsx", "B2Book.xlsx", "B3Book.xlsx") '貼り付ける範囲の左上のセルを設定。 Set cellPaste = Workbooks("ABook.xlsm").Worksheets("Sheet1").Range("A1") For Each myBK In Workbooks For i = LBound(aryBooks) To UBound(aryBooks) If myBK.Name = aryBooks(i) Then 'そのブックのコピーする範囲を設定。 Set rangeCopy = myBK.Worksheets("Sheet1").Range("A1:C7") '貼り付け。 rangeCopy.Copy cellPaste ' '値だけを貼り付け ' cellPaste.Resize(rangeCopy.Rows.Count, rangeCopy.Columns.Count).Value = rangeCopy.Value '貼り付ける範囲を下にずらす。 Set cellPaste = cellPaste.Offset(rangeCopy.Rows.Count, 0) End If Next i Next myBK End Sub
お礼
丁寧に記述頂きありがとうございます。 コメントも入れて頂き非常に分かりやすく助かります。 この方法でも試してみようかと思います。 本当にありがとうございました。
- nishi6
- ベストアンサー率67% (869/1280)
B1book~B3bookの3ブックは開いているものとして書いています。また、いずれもSheet1にあるとしています。 閉じている前提ならば補足してください。修正します。 ブック名やセル範囲は質問にあるとおりにしています。 Abook.xlsxはマクロを含むので、Abook.xlsmになります。 当方、Win10、Excel2010です。 Sub BookCopy() Dim f As Integer For f = 1 To 3 Call BookCopuSub(f) Next Range("A1").Select End Sub Sub BookCopuSub(f As Integer) Windows("B" & f & "book.xlsx").Activate Sheets("Sheet1").Select Range("A1:C7").Select Selection.Copy Windows("ABook.xlsm").Activate With Range("A1") .Offset((f - 1) * 3, 0) = "B" & f & "book.xlsx" .Offset((f - 1) * 3, 1).Select Selection.PasteSpecial Paste:=xlPasteAll, _ Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True End With End Sub
補足
丁寧に回答頂き本当にありがとうございます。大変助かります。 B1~B3を開かずにできたらと思っていたのですが、可能でしょうか。 もしお時間があればご教授頂けませんでしょうか。 よろしくお願いします。
- imogasi
- ベストアンサー率27% (4737/17069)
質問の説明が、ぴんと来なくて、課題がよくわからない。 シート画像でも張り付けては、どうだろう。 個別のセルの値を記述しても、イメージがわきにくいし、値そのものは、処理に 関係ないだろう。書き方が質問者の我流でわかりにくい。 ーー まず思ったのは、必要なスキルは ・コピー貼り付けをすればよい。 ・CurrentRegionが使えないか。(コピー元で) ・見出し行を貼り付け対象から除きたいなら、Resizeを使う。 ・他ブックへの処理は、 http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_070_11.html シートやブックを越えたRangeオブジェクト取得 などを参考に。 Googleで「Excel VBA 他ブック参照」などで照会。 ・Aブックに累積したいなら、張り付けるとき、そのつど、最終行の次行 lr=(Aブック・シート名).Range("A100000").End(xlUp).Row +1 のようなのが使えないか。 ・Bブックの数だけ繰り返す。 など浮かんだが。
お礼
ありがとうございます。 質問分かりにくかったでしょうか。すみませんでした。 教えて頂いた内容も検討してみたいと思います。
お礼
早々にご回答頂き、ありがとうございます。 早速やってみようと思います。 本当にありがとうございました。