• ベストアンサー

エクセルVBA 他のファイルからデータをコピー

エクセルVBAについて質問があります。お詳しい方、ご教授頂ければ幸いです。 A,B2つのエクセルのファイルがあります。例えばファイルAのセル「A10」から下を、(ファイルBを開かずに)ファイルBのセル「A10」から下のデータに置き換えたいのですが、どのようにすれば良いでしょうか。 また、ファイルAから「ファイルを開く」ダイアローグを表示させてファイルBを指定したいのですが、この場合の方法もよろしければ教えて頂けませんでしょうか。 よろしくお願いいたします。

noname#91219
noname#91219

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

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.3

#2です。少し修正します。 Sub test02() Dim fn As String Dim wb As Workbook fn = Application.GetOpenFilename("エクセル ファイル (*.xls), *.xls") With ThisWorkbook.Sheets("Sheet1") .Range(Range("A10"), Range("A10").End(xlDown)).ClearContents End With If fn = "False" Then MsgBox "キャンセルしました。" Exit Sub End If Application.ScreenUpdating = False Set wb = Workbooks.Open(Filename:=fn) With wb.Sheets("Sheet1") .Range(Range("A10"), Range("A10").End(xlDown)).Copy ThisWorkbook.Sheets("Sheet1").Range("A10").PasteSpecial Application.CutCopyMode = False End With wb.Close (False) Set wb = Nothing Application.ScreenUpdating = True End Sub

その他の回答 (3)

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.4

#3です。 昨日は眠かったのか、今見直すと不備な点が散見されました。 書き直します。 Sub test03() Dim fn As String Dim wb As Workbook fn = Application.GetOpenFilename("エクセル ファイル (*.xls), *.xls") With ThisWorkbook.Sheets("Sheet1") 'このBOOKのSheet1において .Range(.Range("A10"), .Range("A10").End(xlDown)).ClearContents 'A10以下の連続したデータを消去 End With If fn = "False" Then MsgBox "キャンセルしました。" Exit Sub End If Application.ScreenUpdating = False '画面更新を止める Application.EnableEvents = False '自動マクロを止める Set wb = Workbooks.Open(Filename:=fn, UpdateLinks:=1) '警告を出さずリンクを更新して開きwbとする '(UpdateLinks:=0 にすると、リンクを更新せずに開きます。) With wb.Sheets("Sheet1") 'wbのSheet1において .Range(.Range("A10"), .Range("A10").End(xlDown)).Copy 'A10以下の連続したデータをCopy ThisWorkbook.Sheets("Sheet1").Range("A10").PasteSpecial 'このBOOKのA10以下に貼り付け Application.CutCopyMode = False 'コピーモード終了 End With wb.Close (False) '警告を出さず保存しないでwbを終了 Application.EnableEvents = True '自動マクロを有効へ Set wb = Nothing Application.ScreenUpdating = True '画面更新 End Sub

noname#91219
質問者

お礼

大変お礼が遅くなり申し訳ありません。 皆様のおかげで、大変勉強になりました。本当にありがとうございます。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

ファイルAから「ファイルを開く」ダイアローグを表示させてファイルBを指定し、ファイルAのセル「A10」から下をファイルBのセル「A10」から下のデータに置き換えるサンプルです。 ファイルBを開かずとのリクエストですが、開いているところを見せないようにはしています。 Sheet名に言及がなかったのでABともにSheet1としています。 Sub test01() Dim fn As String Dim wb As Workbook fn = Application.GetOpenFilename("エクセル ファイル (*.xls), *.xls") With ThisWorkbook.Sheets("Sheet1") .Range(Range("A10"), Range("A10").End(xlDown)).ClearContents End With If fn = "False" Then MsgBox "キャンセルしました。" Exit Sub End If Application.ScreenUpdating = False Set wb = Workbooks.Open(Filename:=fn) With wb.Sheets("Sheet1") .Range(Range("A10"), Range("A10").End(xlDown)).Copy ThisWorkbook.Sheets("Sheet1").Range("A10").PasteSpecial End With wb.Close Set wb = Nothing Application.CutCopyMode = False Application.ScreenUpdating = True End Sub

  • toshi_2000
  • ベストアンサー率30% (306/1002)
回答No.1

後者の回答です。 FileFoOpen = Application.GetOpenFilename("エクセル ファイル (*.xls), *.xls")

関連するQ&A

  • 複数のCSVファイルからのデータ取得(VBA)

    エクセルVBAで、エクセルの指定シートに複数のCSVファイルからデータを取得する方法を ご教授お願います。 エクセルの指定シートの指定されたセルに、複数のCSVファイルから指定箇所のデータを 取得し転送する方法を考えていますが、どうもうまくいきません。 たとえば、 CSVファイル(1) A5(A)           A10(B) CSVファイル(2) A5(C)           A10(D)      CSVファイル(3) A5(E)           A10(F)         ・      ・      ・ と、指定されたセルからデータを取得し、 エクセルの指定シートの表に                    CSVファイル                                 (1)  (2)  (3) ・ ・ ・ ------------------------------------------- A5から取得したデータ    A   C   E ・ ・ ・ A10から取得したデータ    B   D   F ・ ・ ・ ------------------------------------------- と、いうように転送して貼り付けていきたいです。 いろいろ調べてみたのですが、このような方法が見つけられませんでした。 ぜひ、皆様のお知恵をお貸しください。 宜しくお願い致します。

  • ExcelのVBAで、他のExcelファイルのセルのデータを取得

    ExcelのVBAで、他のExcelファイルのセルのデータをファイルを実際に開かずに取得する方法はありますか? Workboks.openを使わずに、具体的にどうすればいいのでしょう? (例)  AAA.xls のセル"C5"に BBB.xls のセル"B3"のデータを入力したい場合。 (AAA.xlsにマクロを起動するボタンがある) ただし、BBB.xlsの最初の3行は空白です。

  • VBA 異なるファイルを指定して文字を抜き出す

    エクセルVBAについてご質問させて頂きます。 お詳しい方、ご教授頂ければ幸いです。 ファイルAを展開中に、別ファイルであるファイルB(ユーザ指定)の特定シートのセル「D2」及び「E2」から下のデータを順番に参照し、条件に合致する列のセル「B2」及び「C2」の文字列を繋げて改行し、 ファイルAの特定シートのセル「E2」から下に順番に貼り付けて行くには、 どのようにすれば良いでしょうか。 例   条件: D2=さ E2=た        ・ファイルB(指定) 特定シート        A    B    C    D    E    1    2   0    あ    か    さ    た    3   0    あ    き    さ    た    4   0    い    か    さ    ち    5   0    い    き    さ    た    6   0    う    か    し    た    7   0    え    か    し    ち    8   0    え    か    し    た    ・ファイルA特定シート       A    B    C    D    E    1                            2                      あ                           か    3                      あ                           き    4                      い                           き  実力不足で丸投げの形となってしまい申し訳ありませんが、 よろしくお願い致します。    

  • エクセルVBAを利用してのデータまとめに関して

    よろしくお願いします。 エクセルVBAを利用してデータまとめ の方法が学べる手段(HP、本)の紹介をお願いします。 エクセルを用いて測定データの集計を行っています。 エクセル関数はある程度理解出来ており、 関数で出来ること、出来ないことの判別もつくようになってきました。 関数で出来ないことをVBAで行いたいと考えています。 VBAは全くの初心者です。 自分なりに調べてみましたが、これだ!というものが見つかりません。 やってみたいことは、自動で他のエクセルファイルの指定のセルをコピーして、本体のエクセルファイルの指定のセルに貼り付ける 等です。   よろしくお願いします。

  • エクセルVBAでコピーペーストを他ファイルへ

    同一フォルダにAとBのファイルがあり、 ファイルAに、CommandButtonを置き、押下することで、ファイルAのシートAのA1~Z1までをコピーし、 ファイルBを開かず、ファイルBのシートBのA1~Z1までにペーストするVBAを作成しようとしています。 ペースト先のファイルBを開かずに、ペーストしてくれるようなマクロを知りたいです。 エクセルは2002を使用しています。 ご教授お願いいたします。

  • 他のExcelファイルのデータを、抽出して表示

    あるフォルダにあるExcelファイルのデータの中から、特定のデータだけ持ってくるマクロを考えています。 持ってくる側のExcelファイルのデータは    A    B    C  -------------------------- 1| AAA  123  あいう  … 2| AAA  456  えお   … 3| BBB  789  あいう  … 4| CCC  012  あいう  … という風になっており、A列の単語で指定して、B列のデータを持ってくる…というマクロです。 ("AAA"という単語で指定した場合、"123"と"456"のデータが抽出される) Excelデータの場所と、単語は入力して指定できるようにしたいです。 ご教示頂けると幸いです。

  • エクセル(VBA)のブック間でのコピーペーストについて

    こんにちは。VBA入門レベルのものですが、質問させてください。 ブックAとブックBを開いた状態にし、 ・ブックA⇒VBAを組む&データ貼付け先 ・ブックB⇒データコピー元 ブックBの特定セル(例:D10)からブックAの特定セル(例:E12)にコピー⇒貼付 する方法を探しています。 なお、ブックBは、ブック名とシート名が都度変わるので、「ブックAではない方の開いているエクセルファイルからデータをコピーし、ブックAに貼付ける」の構文にしたいです。 また、コピペの他に数式(イコール)で飛ぶ方式でもかまいません。 この内容でのVBAの記述方法が分かる方、どなたか教えて頂けますでしょうか。 すみませんがよろしくお願いいたします。 ※エクセル2003です。

  • Excelでファイルのコンペアを行いたい(vba)

    Excel、VBAを使用してファイルのコンペアを行いたいと思い、試行錯誤してみましたが、詰まってしまいました 技術者の方、よろしければお教えください A列とB列の値を比較します AB列に同じデータがあった場合 = 何もしない A列のみにデータがあった場合 = 削除を表示 B列のみにデータがあった場合 = 追加を表示 AB列に違うデータがあった場合 = 更新を表示 上の4つの項目を判断させるところは出来ました 問題は以下です A列にデータが無かった場合、次のセルを読み込んで正しいかどうか判断し、あった場合は何もしない 無かった場合は追加を表示する B列にデータが無かった場合、次のセルを読み込んで正しいかどうか判断し、あった場合は何もしない 無かった場合は削除を表示する という部分が、どう試してみても上手くいく結果が出ずに困っています どなたかご解答よろしくお願い致します

  • エクセルVBAで

    いつもお世話になっています。 エクセルVBAでセルのデータを読み込んでテキストファイルを出力するプログラムを書いています。 その際に、セル内のデータで「00」や「01」などのデータを読み込んで、そのままテキスト出力させたい場合関数の指定をStringにした場合「0」や「1」と出てしまいます。 「00」や「01」でテキスト出力させる方法を教えてください。 よろしくお願いいたします。

  • Excel VBAで初心者です。

    Excel VBAで初心者です。 他のExcelファイルのワークシートのデータを選択して取得したいのですが Aファイルのシート1のセルA3に入力されている月が4~11と入力されていた場合 ファイル名「B」を、月が6~1が入力されていた場合、ファイル名「C」のデータを 見にいき、更に Aファイルのシート1のセルA1に入力されている西暦と、セルA3に入力されている月が B又はCファイルのシート名[西暦(月)]もしくは平成○年○月度と表示されている(2001/8/1)月 からマイナス1したものとマッチさせて、あったらその中のセルデータを Aファイルに表示させたいと思っています。 今はファイル名と場所を強制的に開くように指示してある状態ですが、 上記の希望のように選択してデータを表示するようにしたいのです。 VBAでは無理なのでしょうか? もしやり方がありましたら、ご指導いただきたくお願い申し上げます。

専門家に質問してみよう