こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

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

投稿日時 - 2020-01-27 13:00:41

QNo.9706153

すぐに回答ほしいです

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

> (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

投稿日時 - 2020-01-28 15:11:19

お礼

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

投稿日時 - 2020-01-28 15:48:12

ANo.5

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.4

> 表の数値が文字化けしたり

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

投稿日時 - 2020-01-28 12:49:11

お礼

ご返答ありがとうございます。

ご質問の回答になっているかどうか分かりませんが、発生している症状を説明します。

(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月額給与0000000
110夏季賞与0000000
120冬季賞与0000000
0その他0000000
合 計0000000
712300給与及賃金
100通勤手当065391653910000
150派遣社員給与0000000
200社員基本給17050001539350-16565090.317050000-1705000
201社員基準内手当175000170630-437097.51750000-175000
202社員基準外手当286000265085-2091592.72860000-286000
203社員残業・休日出勤手当0000560000-56000
204社員帰省手当0000000
205社員年休精算0000520000-52000
300シニア基本給0000000
301シニア通勤手当0000000
302シニア残業・休日出勤手当0000000

(2)エクセルファイルにCSVデータを貼り付けた状態のものです。
文字や文字列の値に全て" "がついています。

"メニュー名""補助科目別予算実績対比表"
"集計期間""自 2020年 1月 1日 至 2020年 12月 31日"
"会社名"
"税処理""税抜"
"部門""140"
"単位設定""(単位:円)"
"予算指定""00"""
"""""2020年1月 ""2020年1月 ""2020年1月 ""2020年1月 ""2020年2月 ""2020年2月 "
"コード""科目名""予算額(発生)""実績金額(発生)""予算残(発生)""達成率(発生)""予算額(発生)""実績金額(発生)"
"711300""役員報酬"
"0100""月額給与"0000.000
"0110""夏季賞与"0000.000
"0120""冬季賞与"0000.000
"0000""その他"0000.000
"""合 計"0000.000
"712300""給与及賃金"
"0100""通勤手当"065391653910.000
"0150""派遣社員給与"0000.000
"0200""社員基本給"17050001539350-16565090.317050000
"0201""社員基準内手当"175000170630-437097.51750000
"0202""社員基準外手当"286000265085-2091592.72860000
"0203""社員残業・休日出勤手当"0000.0560000
"0204""社員帰省手当"0000.000
"0205""社員年休精算"0000.0520000
"0300""シニア基本給"0000.000
"0301""シニア通勤手当"0000.000
"0302""シニア残業・休日出勤手当"0000.000

あと、なぜか209行目だけが、「B列="飲食費(5"」「C列="000円以下"」に分かれており
以降その行だけ貼り付けた列が1列分ずれています。
"0010""飲食費(5000円以下)"00

(3)貼り付けたデータを集計している表の数値が全て左寄せとなり、「セルの書式設定」-「数値,桁区切りあり」
に変更しても、111111のままとなります。

(4)CSVを貼付けしたシートから「=」で別シートに値をとばしており、その12シートを集計した合計表が
ありますが、合計されず0で表示されます。

つたない説明で申し訳ありませんが、宜しくお願い致します。

投稿日時 - 2020-01-28 13:52:54

ANo.3

Open "C:\*****\*******\Desktop\********表
の最後にも\が必要です。
Open "C:\*****\*******\Desktop\********表\

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

投稿日時 - 2020-01-28 09:29:10

お礼

大変ありがとうございました。

上記の「最後にも\が必要」を追加すると、無事取込みが出来ました。
ただ、貼付けしたデータから別のシートで集計させている表の数値が文字化けしたり
していました。

この場に及んで何ですが、宜しければCSVデータの貼付けを全セル指定ではなく
「C11~BB327」の範囲に指定するにはどうすれば良いでしょうか?

度々のお願いで申し訳ありませんが、宜しくお願い致します。

投稿日時 - 2020-01-28 11:09:01

ANo.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

投稿日時 - 2020-01-28 00:41:11

お礼

早々のご回答ありがとうございました。
現在、コードをコピペして動作確認をしていますが、「ファイルが見つかりません」と表示されます。
自分の説明が悪かったのかもしれません…。

<作成したコード>
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ファイルをそれぞれのエクセルシートに「値の貼り付け」を行う。

投稿日時 - 2020-01-28 08:46:51

ANo.1

よく似た質問がこちらにあります。参考にしてみてはいかがでしょう。

【VBA】複数のブックを1つのシートにまとめる
https://okwave.jp/qa/q9704455.html

投稿日時 - 2020-01-27 20:38:02

お礼

ご回答ありがとうございました。
まだマクロ初心者で中々解読するに苦慮しています…。
ここまで具体的な質問をしても良いものなのか、すごく悩みましたが…。
図々しいのは承知で、「複数のCSVデータを一つのエクセルファイルの個々のシートにコピペしたい」
の具体的なマクロのプログラミングコードについて、ご教示いただけたら幸いです…。
使用するCSVファイル名と貼付したいエクセルファイル名は次の通りです。

・貼り付けしたいエクセルファイル名「補助科目別予実績対比表」というファイル名
・そのエクセルファイルには下記の12シートあります。
 ※「貼付(140)」「貼付(540)」「貼付(740)」「貼付(940)」「貼付(780)」「貼付(980)」
  「貼付(260)」「貼付(360)」「貼付(760)」「貼付(960)」「貼付(020)」「貼付(010)」です。
・コピペしたい元のCSVファイルは12ファイルあります。
 ※「補助科目別予実績対比表140」以下 下3桁はエクセルファイルのシート名の( )内の3桁数値が入る
  ファイル名となっています。
・それぞれ同じ3桁のCSVファイルをそれぞれのエクセルシートに「値の貼り付け(全セル指定)」をします。

もし具体的なコードが分かる方がいらっしゃいましたら、是非、宜しくお願い致します。

投稿日時 - 2020-01-27 22:32:26

あなたにオススメの質問