以前同じ質問をさせて頂いたのですが、説明不足であったため再投稿いたします。
【エクセル VBA】
VBAを使って複数のCSVを結合させたいのですが、コンマ区切りの値がデータ上に存在するため上手くまとまりません。
バッチ等でまとめる方法ではなく、どうしてもVBAでやらなければならないので、その方法をご教授下さい。
また、結合するCSVはエクセルを開いた時に選択できるようにしたいです。
(特定のファイル上を対象等では無く。)
現在使用しているVBAは以下のものになります。
-----------------------------------------------------
Sub CsvIn()
'CSVファイルの読み込み
Dim CsvFileName As Variant
Dim Li As String
Dim Bf() As String
Dim R As Long
Dim ShMain As Worksheet
Dim FlNo As Integer
Dim FFlNo As Integer
With ThisWorkbook 'シート&パスの設定
Set ShMain = .Worksheets("Sheet1")
ChDrive .Path
ChDir .Path
End With
'複数のファイルの選択を可に設定
CsvFileName = Application.GetOpenFilename _
(filefilter:="CSVファイル(*.csv),*.csv", _
Title:="CSVファイル選択", MultiSelect:=True)
If VarType(CsvFileName) = vbBoolean Then Exit Sub 'キャンセル時の処置
R = 1 '行の初期値
For FlNo = 1 To UBound(CsvFileName) 'ファイル数分ループ
FFlNo = FreeFile '---使用可能なファイル番号取得
Open CsvFileName(FlNo) For Input As #FFlNo
Do Until EOF(FFlNo) '最終行までループ
Line Input #FFlNo, Li '一行読み込み
Bf = Split(Li, ",") 'カンマで分割し配列に代入
If UBound(Bf) >= 0 Then '空白行の処理を飛ばす
With ShMain '1行分のデータをセルに出力
.Range(.Cells(R, 1), Cells(R, UBound(Bf) + 1)).Value = Bf
End With
End If
R = R + 1
Loop
Close #FFlNo
Next FlNo
End Sub
-----------------------------------------------
参考になりそうなサイト
http://excel-ubara.com/excelvba5/EXCELVBA257.html
よろしくお願いします。
No.5
- 回答日時:
以下のどれでしょうか?
①「"」で囲まれた中にある物は文字列として扱い、その中にある「,」は区切り記号としてはつかわないが、それ以外の「,」は区切り記号として扱う。
例 1-1:「123,45,"678,90"」→「123」「45」「"67890"」
例 1-2:「123,45,"678,90"」→「123」「45」「67890」
②全ての「,」を区切り記号として扱わない。つまり列を分けない。
例 2-1:「123,45,"678,90"」→「123,45,"678,90"」
例 2-2:「123,45,"678,90"」→「123,45,67890」
No.4
- 回答日時:
ファイルをただ結合するだけならば、取り込まず追加してしまえばよいと思っていたので聞かなかったのですが、エクセルに取り込みたいのですね!
それでしたら、カンマ区切りして良い列とダメな列の違いを教えてください。
もしかしたら1行を全て1列で読み込めばよいのでしょうか?
No.1
- 回答日時:
うまくいかないコードを提示されても、どんな風にダメなのかを具体的に提示していただかないと判りません。
コマンド(DOSコマンドだと思います?)で成功している物も提示していただければチャントした回答が得られるかと思います。
コマンドなので多分ただ結合されているだけのような気もしますけど…
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- Visual Basic(VBA) エクセルVBAについて 8 2022/07/13 22:41
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) フォルダの場所を可変にしたいです(マクロ) 4 2023/05/11 10:00
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- Visual Basic(VBA) 【VBA】写真の縦横比を変えずに貼り付ける 5 2023/06/13 11:42
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Visual Basic(VBA) マクロVBA 1シートをまとめる 閉じ方 初心者 SOS! 1 2022/06/17 14:54
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
複数のCSVファイルを横に並べて...
-
エクセルの指数を無効にしたい
-
excelインポート時の「実行時エ...
-
複数のcsvファイルを1つのEXCEL...
-
Excel VBAを使った複数のCSVフ...
-
EXCELにcsv形式の外部データを...
-
複数個のascファイルを1つ...
-
エクセルの日付への自動変換を...
-
ExcelでCSVファイル読み込み時...
-
Outlook2003からOutlook2007へ...
-
PNGファイルの透過色指定の見分...
-
VBAでCSVの1行目だけを書き換え...
-
【エクセル VBA】CSVファイルの...
-
多数のExcel Fileのデータを単...
-
CSVデータから重複したデータを...
-
複数のデータ系列の線の太さを...
-
エクセル終了時の保存確認メッ...
-
フォルダ内の全ブックのシート...
-
VBAを一度起動するとずっと出て...
-
VBA マクロ実行時エラー’1004Ra...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルの指数を無効にしたい
-
複数のCSVファイルを横に並べて...
-
excelインポート時の「実行時エ...
-
「ほかのアプリケーションを無...
-
大量のCSVデータを1つのエ...
-
VBAでCSVの1行目だけを書き換え...
-
CSVファイルの結合(重複データ...
-
複数のcsvファイルを1つのEXCEL...
-
二つのCSVファイルを照らし合わ...
-
datファイル→csvファイル→datフ...
-
EXCELにcsv形式の外部データを...
-
VBAでユーザーフォーム上に参照...
-
【VBA初心者】同じフォルダ内の...
-
【エクセル VBA】CSVファイルの...
-
EXCELLの動きが遅い
-
複数個のascファイルを1つ...
-
複数の同じ様式のエクセルデー...
-
Excel VBAを使った複数のCSVフ...
-
破損したExcelファイルの内容を...
-
エクセル マクロ で助け下さい...
おすすめ情報
問題点:
文字列にコンマが入っている場合がある(ここではあるセル上のバージョン情報が12,3,0,0のように表示されている)ため、CSVをエクセルに取り込んだ際に12、3、0、0と区切られてしまいます。
これをVBAで文字列内のコンマを削除するという処理を追加できればと思っています。
例を挙げると以下のサイトに似たことが書いてあります。
http://pasonal.com/vba-partition/
Copyコマンドを使用し、ただ単にCSVファイルを結合しておりました。
CSVを結合した後に、決まった作業があるのですが、なるべく一つのファイル(Excel)で全ての作業を完結させたいと考えておりますので、どうしてもVBAでCSVの結合も行いたいと考えております。
私の説明不足&知識不足で困惑させてしまい申し訳ありません。
イメージしている順序は
1、VBAを含むエクセルを起動(現在作成しようとしているもの)
2、結合したいCSVファイルを選択
3、エクセルにCSVデータが取り込まれる
4、普段行っている決まった作業を行う(ここもVBAでするつもりですが、ここに関しては何とかなりそうです)
5、VBAで行えない作業を手動で行う
6、保存
になります。
そのため、ファイル名は保存する際に自由に決められるようにします。
よろしくお願いします。
列によって場合分けをする感じではなく、
基本的にデータ内(セル内)にコンマがある場合はすべて無視したいです。
(エクセル側がコンマをセルの区切り目と捉えてしまうため)
例えは、捕捉で張らせていただいたリンク先にあります。
説明が下手で申し訳ありません。
①で間違いありません。
---------------------
①「"」で囲まれた中にある物は文字列として扱い、その中にある「,」は区切り記号としてはつかわないが、それ以外の「,」は区切り記号として扱う。
例 1-1:「123,45,"678,90"」→「123」「45」「"67890"」
例 1-2:「123,45,"678,90"」→「123」「45」「67890」
----------------------
わかりやすい質問ありがとうございます
GooUserラックさん、Windfallerさん
ご回答有り難うございました。大変感謝しております。
特にラックさんは分かりやすい質問を何度も投げ掛けてくださり、助かりました。
明日試し、結果を報告させていただきます。
コンマ区切りの値も問題なく取り込むことができました。
しかし、ファイルを結合した際に、一部のデータが消えてしまっているみたいです。
大変申し訳なくは思うのですが、原因が私にはわからない状態です。
ファイルを見せることができれば早いのですが、一部機密情報がふくまれているため、元データを変換して一部を張り付けさせて頂きます。 何か分かられれば幸いです。
"マシン名","2017/08/02","~情報","K22","4/3/2014"
"マシン名1","2017/08/02","~情報","SN Tr","Stop","C:\wi\Syst\snp.exe","ユーザ名"
"マシン名2","2017/08/02","~情報","ehmsas.exe","C:\Wi\win\-win5.exe","Ms Cor","6,1,30,1","Ms Sys","2009/07/14"
複数のファイルを読み込んだ際に、一部データが消えてしまっている(または取り込めていない)状態です。
データの一部は、何かデータが取り込めていない理由に関連しているかと思い張り付けさせて頂きました。
ご迷惑をおかけします..
もし難しそうでしたら、元ファイルのカンマを置換する→取り込む
手順も考えております。
返答が遅くなり申し訳ありませんでした。
複数選択の方法は分かりますが、複数ファイルを取り込んだ際に、一部のデータが消えてしまっている(または取り込めていない)状態です。
同じ列に似た値があると上書かれてしまうということはありませんでしょうか?
また消えている部位の元データを見てみたのですが、特段ルールが異なるようなことはございませんでした。
補足ですが、データ量は結構多くまとめた際に2万行程になります。