- ベストアンサー
VBAで複数のエクセルBOOKからデータを集計する方法
- VBAを使用して、複数のエクセルBOOKから特定の列の特定の行範囲のデータを集計用エクセルBOOKにコピーする方法を教えてください。
- 実行中に「クリップボードに大きな情報があります」というメッセージが出て進めないという問題が発生しています。
- メッセージが出ないようにするために追加修正したプログラムの一部に「ファイル名.Activate」がありますが、この部分で「修飾子が不正です」というエラーメッセージが出てしまいます。どうすれば回避できるでしょうか。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
関連するQ&A
- 検索したBOOKが存在しない場合の対処法
たびたびお世話になっております、VBA初心者です。 同じ形式の複数のエクセルBOOKに入っている特定の列の特定の行範囲にあるデータを、 別の集計用エクセルBOOKの単一のシートの中に順々にコピーをしていきたいのです。 集計用BOOKの特定の行には、データBOOKのBOOK名が横にずらっと記載されて おり、集計用BOOKに組んだVBAでBOOK名を読み取り、そのBOOK名のデータBOOKを 開き、特定セル範囲(A2:A1000)の値をコピーし、集計用BOOKのBOOK名が記載されて いる列に貼り付けしていく。同様に、集計用BOOKの右どなりの列に記載されている BOOK名を読み取り、そのBOOKを開き...と継続し、集計用BOOKにデータ用BOOK 名が記載されていない列まできたら、Do Whileステートメントを終了する、ということ をやりたいのです。 <問題点> 集計用BOOKに記載のあるデータ用BOOK名のBOOK自体が存在しないものがあるのです。存在しない場合は無視して次に進んで行ってほしいのですが、「ファイルが見つかりません」とメッセージが出て先に進まないのです。IFとTHENを使ってやってみたのですが、IFの中の構文の作り方がよくわからず、なにかうまい方法はありましたら教えて頂きたいのですが。 <プログラム> Sub W() Dim ファイル名 As String Dim 列番号 As Long 列番号 = 4 Do While Cells(2, 列番号).Value <> "" ファイル名 = Cells(2, 列番号).Value Workbooks.Open "D:\学校\データ\" & ファイル名 & ".xlsx" Range("A2:A1000").Copy Application.DisplayAlerts = False ActiveWorkbook.Close ThisWorkbook.Activate ActiveSheet.Paste Cells(5, 列番号) 列番号 = 列番号 + 1 Loop End Sub よろしくお願いいたします!
- ベストアンサー
- Visual Basic
- Do While ステートメントエラー
VBA初心者です。 VBAで作成したプログラムがエラーで止まってしまい、先に進まないのです。 わかる方いらっしゃいましたら、ご教示頂けないでしょうか。 <やりたいこと> 同じ形式の複数のエクセルBOOKに入っている特定の列の特定の行範囲にあるデータを、 別の集計用エクセルBOOKの単一のシートの中に順々にコピーをしていきたいのです。 集計用BOOKの特定の行には、データBOOKのBOOK名が横にずらっと記載されて おり、集計用BOOKに組んだVBAでBOOK名を読み取り、そのBOOK名のデータBOOKを 開き、特定セル範囲(A2:A5)の値をコピーし、集計用BOOKのBOOK名が記載されて いる列に貼り付けしていく。同様に、集計用BOOKの右どなりの列に記載されている BOOK名を読み取り、そのBOOKを開き...と継続し、集計用BOOKにデータ用BOOK 名が記載されていない列まできたら、Do Whileステートメントを終了する、ということ をやりたいのです。 <問題点> 実行させると、「実行時エラー'1004' 'Range'メソッドは失敗しました :'Global'オブジェクト」なるメッセージが出て、先に進まないのです。 <プログラム> Sub W() Dim ファイル名 As String Dim 列番号 As String 列番号 = c Do While Range(列番号 & "5").Value <> "" ファイル名 = Range(列番号 & "5").Value Workbooks.Open "D:\学校\データ\" & ファイル名 & ".xlsx" Range("A2:A5").Copy ActiveWorkbook.Close ThisWorkbook.Activate ActiveSheet.Paste Range(列番号 & "6") 列番号 = 列番号 + 1 Loop End Sub <エラー発生部分> Do While Range(列番号 & "5").Value <> "" <補足> ちなみに、VBAの組んであるBOOKは「学校」フォルダの中、データが入っている BOOKは「データ」フォルダの中に格納されています。 以上お手数をおかけしますが、よろしくお願いいたします。
- ベストアンサー
- Visual Basic
- エクセル2007VBAで新規ファイルを作る場合
現在A社というファイルのsheet1に電気代と名前を付けたデータ、sheet2に ガス代という名前を付けたデータがあり電気代のブックからコピーして新規ファイルに貼り付けをしたいと思い下記のとおりマクロがありますが、新規ブックを開いた時常に1ではなく他に新規ブックを開いていたら2とか3になってしまいます。すると再度新規ブックに戻ってガス代を貼り付ける時2とか3tpか4とかでしたらエラーになってしまいます。 こういう場合どのように書いたら良いのでしょうか? それから最後に新規ファイルで名前を付けて保存のところまでダイアログ出すところまで 教えていただきたいのですが。 マクロ勉強始めたばかりでよろしくお願います。 Sub DGCopy() Cells.Select Selection.Copy Workbooks.Add Cells.Select ActiveSheet.Paste Sheets("Sheet1").Select Sheets("Sheet1").Name = "電気代" Windows("A社.xls").Activate Sheets("電気代").Select Cells.Select Application.CutCopyMode = False Selection.Copy Windows("Book1").Activate Sheets("Sheet2").Select Cells.Select ActiveSheet.Paste Sheets("Sheet2").Select Sheets("Sheet2").Name = "ガス代" Application.CutCopyMode = False End Sub
- ベストアンサー
- その他MS Office製品
- VBA作製ができません。どなたか教えてください。
前回同じタイトルで質問させていただいた物を自分なりに本で調べて 作ってみました。しかし壁にぶつかりました。 Cells(Rows.Count, 7).End(xlUp).Offset(rowoffset:=1).Select この式は7列目の一番下の空欄のセルを選択できる式のようですが、 指定した範囲のなかで7列目の一番下のセルを選択したいのですがどうすればいいでしょうか? つまり列だけじゃなく行も選択したいです。 教えてください。 こんな式を作りました。 もし式を簡単に効率よくできる方法があればアドバイス下さい。 If Range("G4").Value = SpecialCells Then Range("H4").Select Else Range("G4").Select Range("G4").Copy Windows("Book1.xlsx").Activate Range("G18:G26") = Selection.Areas.Count Cells(Rows.Count, 7).End(xlUp).Offset(rowoffset:=1).Select ActiveSheet.Paste Application.CutCopyMode = False Windows("Book2.xlsm").Activate Range("D4").Select Range("D4").Copy Windows("Book1.xlsx").Activate Cells(Rows.Count, 4).End(xlUp).Offset(rowoffset:=1).Select ActiveSheet.Paste Application.CutCopyMode = False Windows("Book2.xlsm").Activate Range("E4").Select Range("E4").Copy Windows("Book1.xlsx").Activate Cells(Rows.Count, 5).End(xlUp).Offset(rowoffset:=1).Select ActiveSheet.Paste Application.CutCopyMode = False Windows("Book2.xlsm").Activate Range("H4").Select End If
- 締切済み
- SE・インフラ・Webエンジニア
- EXCEL VBAについて
VBAでCSVファイルをテンプレートのBBOKに読込むコードを 作り、CSVファイルから読込んだBOOK1データを集計する BOOK2を作成しています。 BOOK1・11/21・・・11/21・・・11/22・・・11/23と続きます A B C D 1 ID 店名 売上 日付 2 1104567 渋谷店 190,809 11/21 3 1102031 新宿店 209,808 11/21 4 1103450 横浜店 108,765 11/21 BOOK2・集計 A B C D E 1 ID 店名 11/21 11/22 11/23 2 1104567 渋谷店 190,809 203,487 3 1102031 新宿店 209,808 340,876 4 1103450 横浜店 108,765 547,627 ※BOOK1とBOOK2のIDの並び順は一致していません。 上記のBOOK1のデータをBOOK2に読込ませたいと考えています。 VLOOKUPやINDEX関数を使用しようかと考えたのですが、日付毎に ファイル名が違うのと、集計のファイルには外部参照をさせたくないと 考えています。 VBAで作成したいコードはBOOK1からBOOK2の日付のセルにIDを検索条件として日付毎のファイルを読込ませたいです。 フォームで日付を入力し、コピーするBOOK2のセルを指定後、BOOK1を選択するためにダイアログボックスを出したいです。 BOOK2のIDを検索条件としてBOOK1から一致する売上セルを抽出するコードだけでもわかれば何とか作成できそうなのですが、 ご教授いただけませんでしょうか?
- ベストアンサー
- オフィス系ソフト
- マクロ 別のブックを指定。
エクセルマクロで特定の文字を含んだファイルを指定したいのですが、 ファイル名がその都度、book1,book2,book3,のように変わります。 Range("a1").Select Windows("Book10").Activate Range("a10").Select End Sub このような記述だと、book10にしか指定できず、bookを含むファイルを指定したいのですが どのようにしたらよろしいのでしょうか。 開いているbookを含むファイルは1ファイルのみです。 宜しくお願いいたします。
- ベストアンサー
- Excel(エクセル)
- Excel VBAに詳しい方教えてください。
Excel VBAについて 下記内容をマクロを使ってできるようにしたいのですが、どなたかお力添えいただけませんか? 例えば、下記のような記載のファイルBook1があるとします。 A1セル内 名前 B1セル内 〇〇会社 C2セル内 〇〇部 D2セル内 〇〇係 この内容を別のファイルBook2へ転記したいのです。 ただし、Book2の列は下記のようになっており A列 名前(すでに入力されている) B列 会社名 C列 部 D列 課 E列 係 Book1の内容をBook2の下記の条件で正しいセルへ転記したいです。 -Book1で[部]で終わっているものはBook2のB列[部]に転記 -Book2ですでに入力されている名前の行に、Book1の情報を転記 ご協力のほど何卒よろしくお願いいたします。
- 締切済み
- Excel(エクセル)
- VBA 別BOOKへのデータ転記について
VBA初心者です。 以下のことがしたいのですが、 コードをご教示いただきたくお願いいたします。 BOOKが5つあります。 BOOK1:抽出用(Sheet2に日々の受注データを入れています) BOOK2:転記100用 BOOK3:転記200用 BOOK4:転記300_400_500用 BOOK5:工事番号用 BOOK1:抽出用はA列からQ列まで工事番号ごとに2行目から受注データが入っています。 抽出用のsheet2のA列に「1」と入力することで転記したいデータだというフラグにし、 抽出用O列のコード100,200,300,400,500(工事の種類のようなものです)を見て、 該当のBOOK2から4にその工事番号が転記がされているか? (されていれば登録済みのメッセージ表示) 転記がされていなければ新規に登録、 新規登録の際に、抽出用Sheet2のD列の工事番号、I列の件名、K列の数量を表示して、 このデータを新規登録しますか?のようなメッセージを出し、Yesなら新規登録。 さらに、新規に登録した際にはその工事番号を名前とするBOOK5を新規作成、 BOOK5にも抽出用の受注内容を転記。 BOOK2から4に転記された工事番号をクリックすると その工事番号のBOOK5にジャンプするようにしたいのです。 抽出用A2とA4に「1」と入力された場合(O列は共に200) BOOK1抽出用データの転記したいセル番地 → BOOK3転記200用のセル番地 A2のデータ D2 → A7 K2 → A8 C2 → A9 H2 → A10 I2 → A11 F2 → D7 L2 → D8 M2 → D9 J2 → D10 C2 → I5 Q2 → J5 A4のデータ D4 → A12 K4 → A13 C4 → A14 H4 → A15 I4 → A16 F4 → D12 L4 → D13 M4 → D14 J4 → D15 C4 → I10 Q4 → J10 BOOK2から4は1つの工事番号を5行使用して表わしています。 ですので、1つの工事番号が7から11の行、 2つ目の工事番号が12から16行目となり、それぞれ100件分の工事番号を入れられるように 作成してあります。 またBOOK5については、(A2のデータの場合)以下のように転記し、ファイル名を抽出用D2の工事番号にしたいです。 A2のデータ D2 → A3 K2 → A4 C2 → A5 H2 → A6 I2 → A7 F2 → F3 L2 → E4 M2 → E5 J2 → E6 大変長くなってしまいましたが、以上のようなことをしたいと考えておりますが、 当方、VBA初心者でして参考書とネットを駆使して抽出用のVBA(CSVデータをコピーして加工する)ことにすら大苦戦しております。 なんとかお力を貸していただけないでしょうか? ご教示よろしくお願いいたします。
- ベストアンサー
- オフィス系ソフト
- excel vba
テーブル情報に基づきシートをコピーするVBAマクロを記述したい。 ExcelのBook111のSheet1に次のような データが入っています。 (1、2)セルにn=3という数字が入っているものとします。 その数値に合わせて、この場合は3なので Sub Sample01() Workbooks("Book3.xls").Worksheets("booksheet3").Copy After:=Workbooks("Book111.xls").Sheet(1) End Sub のようなつまり、booksheet3なるシートをBook111(固定なBOOK)にコピーしようとしています。 このようなことをVBAで書くにはどうすればいいのでしょうか。 ただしBook名とシート名はあくまでデータの値にもとづいたデータをもってくることになります。 要するに間接参照したデータに基づき処理するのをどのように記述するかという質問です。 A列 B列 1 回数 n=3 2 3 4 Book1.xls book1sheet ←n=1 5 Book2.xls book2sheet ←n=2 6 Book3.xls book3sheet ←n=3 7 Book4.xls book4sheet 8 Book5.xls book5sheet 9 Book6.xls book6sheet ←n=6 10 Abc,xls Defsheet ←n=7
- ベストアンサー
- オフィス系ソフト
- エクセルVBAでBOOKを開く際の処理
エクセルVBAでBOOKを開く際の処理 エクセル2000です。 VBAで特定のフォルダー内のBOOKを開き、1枚目のシートSheets(1)のデータを読み込んで別BOOK(マクロを記載したBOOK)にコピペしたら保存せず閉じるコードを下記のように書きました。(かなり簡略化しましたが) これで作動するのですが、万一、そのフォルダー内のBOOKが開いていても1枚目のシートのデータを読み込み後、閉じられてしまいます。 BOOKが開いていれば、その開いていたBOOKは閉じず、先に進むようにするにはどのように直せばいいでしょうか? Sub TEST01() Dim mb As Workbook, wb As Workbook Dim myfd As String, fnme As String, ans As Byte, i As Long ans = MsgBox("集計用フォルダーには回収したアンケートファイルとこの集計用ファイルしかないですね?", vbYesNo + vbQuestion, "( ̄∇ ̄) ? ") If ans = vbNo Then MsgBox "それじゃだめです。", vbCritical, "Σ( ̄ロ ̄lll)" Exit Sub End If Set mb = ThisWorkbook myfd = mb.Path fnme = Dir(myfd & "\*.xls") Do Until fnme = Empty If fnme <> mb.Name Then Set wb = Workbooks.Open(myfd & "\" & fnme) i = i + 1 mb.Sheets(1).Cells(i, 1) = wb.Sheets(1).Range("S10") wb.Close (False) '保存せずに閉じる End If fnme = Dir Loop Set mb = Nothing Set wb = Nothing MsgBox i End Sub
- ベストアンサー
- その他MS Office製品