• ベストアンサー

複数CSVをエクセル複数シートに自動コピペ

同じ形式のCSVファイル(計12)を一つのエクセルファイルの各12シートに コピペする作業を毎月行っています。 エクセルファイル・12個のCSVファイルは同じフォルダに保管していますが、 マクロ等を使って自動でコピペできる方法を教えて下さい。 ※現在、マクロを勉強中ですが、中々思うようなマクロが組めません…。

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1617/2456)
回答No.5

> (3)貼り付けたデータを集計している表の数値が全て左寄せとなり 最後にどこか何もないセルをコピーして、その後必要箇所(もしくはすべて)を選択して「形式を選択して貼り付け」で出たダイアログの演算で加算を選んで実行してください。数値となります、桁区切りは消えますので設定してください。 ""がつくのと5,000が分かれるのは、コードを以下のように変更してください。 '参考サイト https://www.moug.net/tech/exvba/0060086.html '参考サイト https://tonari-it.com/vba-csv-camma/ Sub Test() Dim i As Long, j As Long Dim FName As String, SName As String Dim FNo As Variant Dim buf As String, tmp As Variant FNo = Array("140", "540", "740", "940", "780", "980", "260", "360", "760", "960", "020", "010") For i = 0 To UBound(FNo) FName = "補助科目別予実績対比表" & FNo(i) SName = "貼付(" & FNo(i) & ")" Open "C:\test\" & FName & ".csv" For Input As #1 j = 1 Do Until EOF(1) Line Input #1, buf tmp = Split(Replace(replaceColon(buf), """", ""), ":") Sheets(SName).Cells(j, "A").Resize(1, UBound(tmp) + 1).Value = tmp j = j + 1 Loop Close #1 Next End Sub Function replaceColon(ByVal str As String) As String Dim strTemp As String Dim quotCount As Long Dim l As Long For l = 1 To Len(str) strTemp = Mid(str, l, 1) If strTemp = """" Then quotCount = quotCount + 1 ElseIf strTemp = "," Then If quotCount Mod 2 = 0 Then str = Left(str, l - 1) & ":" & Right(str, Len(str) - l) End If End If Next l replaceColon = str End Function

ibc-zaimu
質問者

お礼

色々とご相談に乗っていただき、大変ありがとうございました。 無事、思い通りの表が作成できました。 今まで手作業で苦労していたのがウソのように効率化できました。 また、分からない事がありましたら、ぜひ、宜しくお願い致します。

その他の回答 (4)

  • kkkkkm
  • ベストアンサー率65% (1617/2456)
回答No.4

> 表の数値が文字化けしたり どのような文字化けなんでしょうか。また単純にエクセルでそのCSVを開いた(読み込んだ)ときには文字化けしないでしょうか。読み込んだ時の文字コードの設定も教えてください。

ibc-zaimu
質問者

お礼

ご返答ありがとうございます。 ご質問の回答になっているかどうか分かりませんが、発生している症状を説明します。 (1)元のCSVデータの一部を抜粋したのが下記のものです。(別環境の会計システムから取り出したCSVです) メニュー名 補助科目別予算実績対比表 集計期間 自 2020年 1月 1日 至 2020年 12月 31日 会社名 税処理 税抜 部門 140 単位設定 (単位:円) 予算指定 0 2020年1月 2020年1月 2020年1月 2020年1月 2020年2月 2020年2月 2020年2月 コード 科目名 予算額(発生) 実績金額(発生) 予算残(発生) 達成率(発生) 予算額(発生) 実績金額(発生) 予算残(発生) 711300 役員報酬 100 月額給与 0 0 0 0 0 0 0 110 夏季賞与 0 0 0 0 0 0 0 120 冬季賞与 0 0 0 0 0 0 0 0 その他 0 0 0 0 0 0 0 合 計 0 0 0 0 0 0 0 712300 給与及賃金 100 通勤手当 0 65391 65391 0 0 0 0 150 派遣社員給与 0 0 0 0 0 0 0 200 社員基本給 1705000 1539350 -165650 90.3 1705000 0 -1705000 201 社員基準内手当 175000 170630 -4370 97.5 175000 0 -175000 202 社員基準外手当 286000 265085 -20915 92.7 286000 0 -286000 203 社員残業・休日出勤手当 0 0 0 0 56000 0 -56000 204 社員帰省手当 0 0 0 0 0 0 0 205 社員年休精算 0 0 0 0 52000 0 -52000 300 シニア基本給 0 0 0 0 0 0 0 301 シニア通勤手当 0 0 0 0 0 0 0 302 シニア残業・休日出勤手当 0 0 0 0 0 0 0 (2)エクセルファイルにCSVデータを貼り付けた状態のものです。 文字や文字列の値に全て" "がついています。 "メニュー名" "補助科目別予算実績対比表" "集計期間" "自 2020年 1月 1日 至 2020年 12月 31日" "会社名" "税処理" "税抜" "部門" "140" "単位設定" "(単位:円)" "予算指定" "00" "" "" "" "2020年1月 " "2020年1月 " "2020年1月 " "2020年1月 " "2020年2月 " "2020年2月 " "コード" "科目名" "予算額(発生)" "実績金額(発生)" "予算残(発生)" "達成率(発生)" "予算額(発生)" "実績金額(発生)" "711300" "役員報酬" "0100" "月額給与" 0 0 0 0.0 0 0 "0110" "夏季賞与" 0 0 0 0.0 0 0 "0120" "冬季賞与" 0 0 0 0.0 0 0 "0000" "その他" 0 0 0 0.0 0 0 "" "合 計" 0 0 0 0.0 0 0 "712300" "給与及賃金" "0100" "通勤手当" 0 65391 65391 0.0 0 0 "0150" "派遣社員給与" 0 0 0 0.0 0 0 "0200" "社員基本給" 1705000 1539350 -165650 90.3 1705000 0 "0201" "社員基準内手当" 175000 170630 -4370 97.5 175000 0 "0202" "社員基準外手当" 286000 265085 -20915 92.7 286000 0 "0203" "社員残業・休日出勤手当" 0 0 0 0.0 56000 0 "0204" "社員帰省手当" 0 0 0 0.0 0 0 "0205" "社員年休精算" 0 0 0 0.0 52000 0 "0300" "シニア基本給" 0 0 0 0.0 0 0 "0301" "シニア通勤手当" 0 0 0 0.0 0 0 "0302" "シニア残業・休日出勤手当" 0 0 0 0.0 0 0 あと、なぜか209行目だけが、「B列="飲食費(5"」「C列="000円以下"」に分かれており 以降その行だけ貼り付けた列が1列分ずれています。 "0010" "飲食費(5 000円以下)" 0 0 (3)貼り付けたデータを集計している表の数値が全て左寄せとなり、「セルの書式設定」-「数値,桁区切りあり」 に変更しても、111111のままとなります。 (4)CSVを貼付けしたシートから「=」で別シートに値をとばしており、その12シートを集計した合計表が ありますが、合計されず0で表示されます。 つたない説明で申し訳ありませんが、宜しくお願い致します。

  • kkkkkm
  • ベストアンサー率65% (1617/2456)
回答No.3

Open "C:\*****\*******\Desktop\********表 の最後にも\が必要です。 Open "C:\*****\*******\Desktop\********表\ 上記の記載でフォルダ名に個別な情報が入ってるような気がしますが、もしそうでしたらサポートに連絡して変更してもらった方がいいのではないでしょうか。 https://secure.okbiz.okwave.jp/okwave-faq/helpdesk?category_id=4&faq_id=27&site_domain=help こちらに理由を書いて送ると変更してくれます。

ibc-zaimu
質問者

お礼

大変ありがとうございました。 上記の「最後にも\が必要」を追加すると、無事取込みが出来ました。 ただ、貼付けしたデータから別のシートで集計させている表の数値が文字化けしたり していました。 この場に及んで何ですが、宜しければCSVデータの貼付けを全セル指定ではなく 「C11~BB327」の範囲に指定するにはどうすれば良いでしょうか? 度々のお願いで申し訳ありませんが、宜しくお願い致します。

  • kkkkkm
  • ベストアンサー率65% (1617/2456)
回答No.2

CSVデータをコピペではなくセルに直接代入しています。 データを取り込みたいブックに以下のコードをコピペして下さい。 Cドライブのtestフォルダとしていますのでそこは変更してください。 '参考サイト https://www.moug.net/tech/exvba/0060086.html Sub Test() Dim i As Long, j As Long Dim FName As String, SName As String Dim FNo As Variant Dim buf As String, tmp As Variant FNo = Array("140", "540", "740", "940", "780", "980", "260", "360", "760", "960", "020", "010") For i = 0 To UBound(FNo) FName = "補助科目別予実績対比表" & FNo(i) SName = "貼付(" & FNo(i) & ")" 'ここにあるC:\test\を変更してください。 Open "C:\test\" & FName & ".csv" For Input As #1 j = 1 Do Until EOF(1) Line Input #1, buf tmp = Split(buf, ",") Sheets(SName).Cells(j, "A").Resize(1, UBound(tmp) + 1).Value = tmp j = j + 1 Loop Close #1 Next End Sub

ibc-zaimu
質問者

お礼

早々のご回答ありがとうございました。 現在、コードをコピペして動作確認をしていますが、「ファイルが見つかりません」と表示されます。 自分の説明が悪かったのかもしれません…。 <作成したコード> Sub CSV取込み() Dim i As Long, j As Long Dim FName As String, SName As String Dim FNo As Variant Dim buf As String, tmp As Variant FNo = Array("140", "540", "740", "940", "780", "980", "260", "360", "760", "960", "020", "010") For i = 0 To UBound(FNo) FName = "補助科目別予実績対比表" & FNo(i) SName = "貼付(" & FNo(i) & ")" Open "C:\Users\G1000120\Desktop\2020年度補助科目別予実績対比表" & FName & ".csv" For Input As #1 j = 1 Do Until EOF(1) Line Input #1, buf tmp = Split(buf, ",") Sheets(SName).Cells(j, "A").Resize(1, UBound(tmp) + 1).Value = tmp j = j + 1 Loop Close #1 Next End Sub ◇完成させたいエクセルファイル名→補助科目別予実績対比表.xls  ※「貼付(×××)」というシートが12シートあります。   このシートに、同じフォルダ内にある「補助科目別予実績対比表×××.csv」全12ファイルを   それぞれの同じ3桁番号のエクセルシートに「値の貼付け」を自動で行いたい。 大変申し訳ありませんが、宜しくお願い致します。   <前回補足説明した内容です>  ・貼り付けしたいエクセルファイル名「補助科目別予実績対比表」というファイル名 ・そのエクセルファイルには下記の12シートあります。  ※「貼付(140)」「貼付(540)」「貼付(740)」「貼付(940)」「貼付(780)」「貼付(980)」   「貼付(260)」「貼付(360)」「貼付(760)」「貼付(960)」「貼付(020)」「貼付(010)」です。 ・コピペしたい元のCSVファイルは12ファイルあります。  ※「補助科目別予実績対比表140」以下 下3桁はエクセルファイルのシート名の( )内の3桁数値が入る   ファイル名となっています。 ・それぞれ同じ3桁のCSVファイルをそれぞれのエクセルシートに「値の貼り付け」を行う。

  • kkkkkm
  • ベストアンサー率65% (1617/2456)
回答No.1

よく似た質問がこちらにあります。参考にしてみてはいかがでしょう。 【VBA】複数のブックを1つのシートにまとめる https://okwave.jp/qa/q9704455.html

ibc-zaimu
質問者

お礼

ご回答ありがとうございました。 まだマクロ初心者で中々解読するに苦慮しています…。 ここまで具体的な質問をしても良いものなのか、すごく悩みましたが…。 図々しいのは承知で、「複数のCSVデータを一つのエクセルファイルの個々のシートにコピペしたい」 の具体的なマクロのプログラミングコードについて、ご教示いただけたら幸いです…。 使用するCSVファイル名と貼付したいエクセルファイル名は次の通りです。 ・貼り付けしたいエクセルファイル名「補助科目別予実績対比表」というファイル名 ・そのエクセルファイルには下記の12シートあります。  ※「貼付(140)」「貼付(540)」「貼付(740)」「貼付(940)」「貼付(780)」「貼付(980)」   「貼付(260)」「貼付(360)」「貼付(760)」「貼付(960)」「貼付(020)」「貼付(010)」です。 ・コピペしたい元のCSVファイルは12ファイルあります。  ※「補助科目別予実績対比表140」以下 下3桁はエクセルファイルのシート名の( )内の3桁数値が入る   ファイル名となっています。 ・それぞれ同じ3桁のCSVファイルをそれぞれのエクセルシートに「値の貼り付け(全セル指定)」をします。 もし具体的なコードが分かる方がいらっしゃいましたら、是非、宜しくお願い致します。

関連するQ&A

  • Excelのシートをcsv形式に変換するには。

    Excelのシートをcsv形式に変換するには。 こんにちは。 複数のシートがあるエクセルファイルを、一度にcsv形式に変換したいのですが、 なにかいい方法または、フリーソフトはありますでしょうか? よろしくお願いいたします。

  • エクセル 全部のシートを自動的に読み込みたい

    どなたが助けてください。 エクセルのファイルが一つのフォルダの中に 沢山あります。(CSVの場合もあります) 各ファイルには複数のシートが入っていて シート名はバラバラです。 各シートのに入っているデータは 縦は500行目まで、横は端から端まで(A列→IV列)です。 この沢山のエクセルファイルの全シートを 一つのシートに自動的に読み込んで 縦てに並べたいのです。 1ファイルの中にある全シート(1枚しかシートがない ものもあれば5枚あるものもあり もれなく全部) の500行目までを 別の新しいエクセルファイルのシートに縦に並べて 次のファイルをまた開いて全シートを 先ほど並べたデータの下にまた並べて・・・・と 繰り返して一つのフォルダの中にあるエクセルファイルの全シート重複せずに並べるような マクロをどなたか教えて頂けないでしょうか? ファイル数が大変多く、本当に困っています。 よろしくお願いいたします。

  • エクセルVBAでCSVを読み込んで別ファイルにまとめたいです。

    エクセルVBA初心者の者です。 マクロの記録でできたコードをいじって、 なんとか動くものができるレベルです。 Aというフォルダに20~40行程度の内容のCSVファイルが 数百個あります。開けてみないと何行あるのかわかりません。 そのAフォルダのCSVの内容をエクセルで開いて、別のエクセルファイルの一枚のシートにまとめたいのです。 最初にCSVファイル名を一枚のシートのA列に書き出すところ まではやれたのですが、それを順番に読み込んでコピペの 流れができません。 CSVファイル名読み込み 読み込んだファイル1つめCSV開く CSVの20~40行をコピー 別のエクセルファイルのシートに貼り付け 1つめCSV閉じる ↓ 読み込んだファイル2つめCSV開く 繰り返し こういうやり方じゃない方がいいのかもわかりません。 もしかして考え方も違うのでしょうか? サンプルコード教えていただけるとありがたいです。 よろしくお願いします。

  • csv形式のテキストファイルをexcelでCSV化するマクロについて

    今、ひとつのフォルダに大量にCSV形式で保存されているテキストファイルを excelのマクロを使って、ひとつのexcelにCSV形式(.xls)で保存するものを作成している のですが、今までマクロを使ったことがないため、まったく歯が立ちません。 もう少し詳しく書くと、テキストファイルの中身は、 01,54521,18:01:02,110230 というようになってます。 これを、excelのマクロを使い、カンマ区切りで取り込むような感じです。 すみませんが、回答お願いいたします。

  • 複数のCSVファイルを自動でエクセルに変換したい

    フォルダの中に、300近いCSVフォルダがあります。 ネットで探したマクロVBAでやってみたところ、一つのCSVファイルを選び、それをエクセルファイルに変換できました。 このマクロを使って、フォルダ内にあるすべてのCSVファイルを一気にエクセルに変換するには、どうしたらいいのでしょうか。 ご教授のほど、よろしくお願いいたします。 Sub CSVからXLSX() Dim varFileName As Variant varFileName = Application.GetOpenFilename(FileFilter:="CSVファイル(*.csv),*.csv", _ Title:="CSVファイルの選択") If varFileName = False Then Exit Sub End If Workbooks.Open Filename:=varFileName ActiveSheet.Cells.Copy ThisWorkbook.ActiveSheet.Cells ActiveWorkbook.Close SaveChanges:=False End Sub

  • EXCELでCSVファイルの読込み

    VBA超初心者でとても困っています。 仕事でEXCELのVBAを使って 現在開いているシートの中に 1つのCSVファイルからデータを読み込むのですが CSVデータの2行目をEXCELのC2へ。 4~10行目までを、EXCELのB5~B14へ マクロを使い、ボタン一つで自動入力させたいのです・・・。 Line Input も、やり方が悪いのかうまくいきません。 ヒントとなるやり方があればぜひ教えてください。

  • エクセルの複数シートをCSVファイルに変換したい

    現在、エクセルのVer2002を使用しており、CSV(カンマ区分け)ファイル変換を実行することが多くあります。 現状、CSVに変換すべきブック中のシート数が多い(EX.90~140)場合の作業で大変苦労をしています。 ワークシートをグループ化しても”複数のシートを含むブックをサポートしていません。” の表示が出てアクティブ・シートのみの変換になって個々のシート毎に行っておりますが、他に良い解決方法、手段をご存じの方はご伝授ください。 よろしくお願い致します。

  • エクセルでファイルをcsv形式で保存するマクロについて

    同様の質問が以前にあったのですが、 どうやら私のは少し違うようなので新規質問として投稿させていただきます。 エクセルファイルを保存する際、保存形式を「テキスト(タブ区切り)(*.txt)」にして、 ファイル名の拡張子の部分だけ(.csv)にして保存するマクロを作成したいです。 しかし、エクセルに付いているオートマクロ機能で記録しようとすると、 ・ファイル名がオートマクロを作成した際に付けたファイル名になってしまう。 ・保存場所がオートマクロを作成した際に保存したフォルダになってしまう。 という問題が発生します。 なので、 ・保存する際のファイル名は現在作業しているファイルの名前をそのまま使用する。 ・保存する際のファイル名の拡張子部分は(.csv)に変更する ・保存場所は現在作業しているファイルがあるフォルダにする(もしくはプログラムで予めパスを指定できる)。 ・保存形式は「テキスト(タブ区切り)(.txt)」 の4つの条件を満たすマクロの作成方法をお教えいただけますでしょうか? すみませんが、よろしくおねがいします

  • Excel Bookの自動読み込み

    Excel初心者ですが宜しくお願いします。 毎月自動で作成されるフォルダが在り、毎朝 その日の日付け名でCSVデータが作成されます。 【保存場所はCドライブ、フォルダ名は年月(例:0910)、CSVファイル名と、sheeet名は日付け+名称(例:091001リンゴ・091002リンゴ・・・・・)】 集計表を作成し、開いたらsheet1=(091001リンゴ)・sheet2=(091002リンゴ)・・・となるように、自動で取り込み(読み込み?)させる事は可能でしょうか。 集計表は、月末にまとめて、月初で更新させたいです。 現状は、毎朝 フォルダ開→CSVデータ開→sheetをコピー→集計表に貼り付けと作業しています。 マクロ等は、まったくの初心者ですがどうか宜しくお願いします。

  • Excelマクロ 統合セルの連続コピペ

    Excelマクロの初心者です 現在以下のことをマクロで行おうと思ってます。 ファイルAのシートAのC11に入ってる文章を同じファイル内にあるシート2のA46:F51の統合してあるセルにコピペします。 そして次にファイルAのシートD11に入ってる文章をシート3のA46:F51の統合してあるセルにコピペします。 このような作業をファイルAのAC11まで続けたいです。 どなたか教えて頂けないでしょうか? よろしくお願いします。