excelで他のブックからセル範囲を取得する方法

このQ&Aのポイント
  • Excelで他のブックから特定のセル範囲を取得する方法について教えてください。
  • 複数のブックから同じフォーマットのセル範囲を取得し、別のブックにセットする方法について教えてください。
  • コードを使用して、Excelの特定のセル範囲を別のブックに集計する方法について教えてください。
回答を見る
  • ベストアンサー

excel 他ブックからセルを範囲で取得する方法

Abook.xlsx、B1book.xlsx、B2book.xlsx、B3book.xlsxというファイルがあります。 B1book~B3bookは同じフォーマットになりますが、Bbookのセル範囲(A1:C7)を Abookの「集計シート」にセットしたいのですが、コードでの記述をご教授 頂けませんでしょうか。 Abookのイメージ    A      B ・・・・・・H  1 B1book.xlsx  A1・・・・・・A7  2         B1・・・・・・B7  3         C1・・・・・・C7  4 B2book.xlsx  A1・・・・・・A7  5         B1・・・・・・B7  6         C1・・・・・・C7  7 B3book.xlsx  A1・・・・・・A7  8         B1・・・・・・B7  9         C1・・・・・・C8 このようなイメージになります。 よろしくお願いします。

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

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.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

satoshi5050
質問者

お礼

早々にご回答頂き、ありがとうございます。 早速やってみようと思います。 本当にありがとうございました。

その他の回答 (3)

  • Mathmi
  • ベストアンサー率46% (54/115)
回答No.3

>他ブックからセルを範囲で取得する方法 セルの表記をブックから正確に記述すると  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

satoshi5050
質問者

お礼

丁寧に記述頂きありがとうございます。 コメントも入れて頂き非常に分かりやすく助かります。 この方法でも試してみようかと思います。 本当にありがとうございました。

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.2

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

satoshi5050
質問者

補足

丁寧に回答頂き本当にありがとうございます。大変助かります。 B1~B3を開かずにできたらと思っていたのですが、可能でしょうか。 もしお時間があればご教授頂けませんでしょうか。 よろしくお願いします。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

質問の説明が、ぴんと来なくて、課題がよくわからない。 シート画像でも張り付けては、どうだろう。 個別のセルの値を記述しても、イメージがわきにくいし、値そのものは、処理に 関係ないだろう。書き方が質問者の我流でわかりにくい。 ーー まず思ったのは、必要なスキルは ・コピー貼り付けをすればよい。 ・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ブックの数だけ繰り返す。 など浮かんだが。

satoshi5050
質問者

お礼

ありがとうございます。 質問分かりにくかったでしょうか。すみませんでした。 教えて頂いた内容も検討してみたいと思います。

関連するQ&A

  • EXCELで他のブックを参照する方法について

    BookA.xlsx(明細)と、BookB.xlsx(集計先:関数集計+グラフ)ふたつのブックがありますが、Aを開かずにBを開くと集計されません。COUNTIFS関数等を使っているからのようですが、コードの記述で集計できませんでしょうか。 (AとBを同じブックにすれば簡単なのですが、今回は諸事情によりできません) パス・ファイル名・シート名をBookBに埋め込んで、それを呼び出すなどできませんでしょうか。コード初心者なので、具体的なサンプルをご教授頂けると助かります。大変お手数ですがよろしくお願いいたします。

  • エクセル、ブック間でのデータ読込

    教えてください。 Excel2010を使っています。  動作:閉じているブックからデータを読み出し、開いているブックに貼付けることです。  詳細:閉じているブック’2014_9月.xlsx’、シート’AAA’、セル’C200~D215・I200~I215のデータを      開いているブック’2014集計.xlsx、シート’集計’、セル’B20~C35・D20~D35に貼付けをた      いのですが。      応用1.        閉じているブック’2014_9月.xlsx’、シート’AAA’、セル’C200~D215・I200~I215         ↓        開いているブック’2014集計.xlsx、シート’集計’、セル’B20~C35・D20~D35        閉じているブック’2014_10月.xlsx’、シート’AAA’、セル’C200~D215・I200~I215         ↓        開いているブック’2014集計.xlsx、シート’集計’、セル’B40~C55・D40~D55        閉じているブック’2014_11月.xlsx’、シート’AAA’、セル’C200~D215・I200~I215         ↓        開いているブック’2014集計.xlsx、シート’集計’、セル’B60~C75・D60~D75        ・        ・        ・        閉じているブック’2015_9月.xlsx’、シート’AAA’、セル’C200~D215・I200~I215         ↓        開いているブック’2015集計.xlsx、、シート’集計’、セル’B20~C35・D20~D35        それぞれのブックは事前に作成します。’2014_9月.xlsx’、’2014_10月.xlsx’、’2014_11        月.xlsx’、’2015_9月.xlsx’、’2014集計.xlsx、’2015集計.xlsx      応用2.        現状        閉じているブック’2014_9月.xlsx’、シート’AAA’、セル’C200~D215・I200~I215         ↓        開いているブック’2014集計.xlsx、シート’集計’、セル’B20~C35・D20~D35        開いているブック’2014集計.xlsx、シート’集計’セルB19’年’、セルC19’月’を変更する        ことにより        変更        閉じているブック’2014_10月.xlsx’、シート’AAA’、セル’C200~D215・I200~I215         ↓        開いているブック’2014集計.xlsx、シート’集計’、セル’B20~C35・D20~D35        と言うことは可能でしょうか。 エクセルのマクロは初心者で苦労をしています、ご教授頂ければ幸いです。 よろしくお願いいたします。        

  • マクロで他ブックを開きデータを取得する方法について

    BOOK1は集計表でシートは1枚です。BOOK2はデータ入力シートで50位のシートが含まれています。 BOOK1からマクロでBOOK2を開き、各シートにあるデータをBOOK1(集計表)の所定のセルへ表示させようと考えています。例えば「BOOK2のSheet2のセルC6のデータをBOOK1のセルF8へ、Sheet3のセルC6のデータをBOOK1のセルF12へというように順次50枚のシートに入力した各データをBOOK1の集計表に表示させる予定です。どのようなマクロ構文にしたら良いのでしょうか? ご教授よろしくお願いします。

  • 他のブックファイルのセルの参照が上手く行きません

    こんにちはよろしくお願いいたします。 エクセルのブックファイル(Book1.xlsx)に,他のブックファイル(Book2.xls)のセルの値を参照しようと思い”=”を入力し参照するブックファイルのセルをクリックし,「 =[Book2]Sheet1!$A$1 」のような参照を行いました。こうしてきちんと表示されました。 しかし,この参照の式を「 =[Book3]Sheet1!$A$1 」のように,他のブックファイル(Book3.xls)のセルに変更したところ,参照できなくなりました。ブックファイル(Book1.xlsx)には,「 =[Book3]Sheet1!$A$1 」という式そのものが表示された状態となっています。式は,キーボードを使って変更しました。もちろん,(Book3.xls)は,(Book2.xls)と同様のシート形式をもち,データも入力されています。 このような状態になると,先に挙げたように,”=”を入力して参照するブックファイル(Book3.xls)のセルをクリックしても,ブックファイル(Book1.xlsx)には,「 =[Book3]Sheet1!$A$1 」という式そのものが表示された状態となったままで,(Book3.xls)のデータは表示されません。 (Book2.xls)と(Book3.xls)のセルのデータは,文字列です。 気になるのは,(Book1.xlsx)はoffice2010で作成されたファイルであること,(Book2.xls)と(Book3.xls)は,互換モードと表示されるファイルであること,また表示されているファイルを見ると,フルパスで参照している点です。「 ='C:\aaa\bbb\・・・・・[Book3]Sheet1'!$A$1 」という参照式になっています。3つのファイルはすべて同一ファイルに入っています。 何が,参照を阻んでいるのでしょうか?教えてください。よろしくお願いします。

  • 複数のBookから決まったセルの値を別のBookに

    お世話になります。 EXCELで複数のBOOKから決められたセルにある値を抽出してひとつのBOOKに纏めたいのです。 BOOK1~50、 BOOKには31枚のSheetがあります。 その中のSeet31にSeet1~30のデーターを纏めてあります。 Seet31の A1~3 B1~2 C1~3 のデーターを抽出して 新しく作ったBook【集計】のSeet1にBook1~50から抽出した データーを縦に並べたいのです。 【 例 】   A1 A2 A3 B1 B2 C1 C2 C3 1  5  2  4  3  6  7  1  3 2  2  3  4  6  9  7  5  2 3  7  8  5  6  2  3  1  8 と、いった感じです。 なお、Book名は『漢字+数字』です。 宜しくお願いします。

  • Excel セル参照で参照ブック指定

    指定したセルに拡張子を抜いたブック名を入力し、そのセルを参照してブック参照することは可能でしょか? 「INDIRECT」では参照ブックを開かないと表示されないため目的が達成されません。 (例) Book1.xlsx A1=test Book2.xlsx A1=Book1 A2=["&(A1)&".xlsx]Sheet1'!A1 何か良い解決策をご存知の方、ご教授願います。

  • EXCEL VBA 他ブックのシートのコピー方法

    今開いているブックに、開いていない他のブックのシートをコピーする記述方法を教えて頂けませんでしょうか。(Office365を利用)  開いているブック :A.xlsx  シート:a  開いていないブック:B.xlsx  シート:b bをaの後ろにコピーする方法を教えてください。aにボタンを置いて、それをクリックしたらという方法でも構いません。 よろしくお願いします。

  • Excelで他のブックのセルを参照したいのですが

    コンボボックスにセットする値を、 VBAで他のブックを参照してセットしたいと思っています。 ブックAのシート1にコンボボックスを作り、 ブックBのシート1から取得しようと考えています。 ブックBのシート1には、あらかじめ「範囲A」の名前を定義して この範囲の値を参照するつもりです。 ただ同じフォルダ内にブックBを置いていれば参照できるのですが、 他のフォルダにブックBを置くと参照されません。 <同じフォルダにブックBを置いた場合>○参照できた ComboBox1.ListFillRange = "[ブックB.xls]シート1!範囲A" <他のフォルダにブックBを置いた場合>×参照されない ComboBox1.ListFillRange = "C:\[ブックB.xls]シート1!範囲A" 記述の仕方がおかしいのでしょうか? 宜しければご教授お願い致します。

  • EXCELで複数のブックの特定のセルの合計を求める方法は?

    EXCELの関数,数式で質問です。 <例題>異なる様式の表(数値)で構成された3つのシート(a,b,c)をもつブックが,同じ型式で50個(50ブック)ある。各ブックの特定のシートの特定の数値セル(1~50ブックのbシートのA5セル)の合計を求める数式を示しなさい。 ※この回答の1つは「=1ブックのbのA5+2ブックのbのA5+3ブックのbのA5+4ブックのbのA5+…+50ブックのbのA5」だと思うのです。しかし,いちいち各ブックの対象シート(b)の対象セル(A5)をクリックして数式を完成させるのは大変です。さらに,求めたい特定の数値セルが「bのA5」だけでなく「aのB3」や「cのR6」など,3つ,4つと増えるとすると,同様の数式を入力するのに大変な労力を要します。何か簡単な集計方法(関数,数式)はあるでしょうか。ややこしい質問ですみません。どうぞ御教示ください。

  • エクセル)VBAで他のブックのセル参照

    はじめまして。 エクセルのVBAについて教えてください。 VBAで、 book1のsheet1のセルA1にあるデータを開いていない(アクティブでない)別のbook2のsheet2のセルB1にコピーしたいのですがこんなことってできるのでしょうか? ・・やはり開いていないとダメなんでしょうか? あと、これって"ブック参照"っていうことなんでしょうか?自分がやりたいことが何なのか判らないので上手く調べる事が出来ず難儀しています。 よろしくお願いします。

専門家に質問してみよう