
VBAは初心者で、やりたい操作が理解を超えているのでどうか知恵をお貸しください。
業務でcsvファイル(複数の種類があり列数行数も異なります)をダウンロードし、それをExcelファイルで操作することが多いのですが、書式を文字列で開かなければ桁数を保持できないデータが含まれており、その作業に時間を取られています。
そこでVBAを使って以下の操作ができればと考えております。
①csvファイルを格納しているフォルダを指定する。
②全ての列を文字列形式としてcsvファイルを開く。
③当該ファイルをxlsxに変換して同フォルダに保存する。
④ファイルを閉じる。
⑤フォルダ内のcsvファイル全てに①~④の操作を行う。
この操作が可能であればかなりの時間短縮になるのですが、これをしたいがためにVBAを調べ始めたような素人ですので全く力及ばず途方に暮れている状況です。
何もかも頼り切りな質問で恐縮ですが、ご教示いただきますと幸いです。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
以下のマクロを標準モジュールに登録してください
-----------------------------------
Option Explicit
Public Sub CSV変換()
Dim fname As String
Dim wb As Workbook
Dim fd As fileDialog
Dim folder As String
Dim ctr As Long
Set fd = Application.fileDialog(msoFileDialogFolderPicker)
If fd.Show = False Then Exit Sub
folder = fd.SelectedItems(1)
fname = Dir(folder & "\*.csv")
ctr = 0
'フォルダ内の全CSVファイルを取得
Do While fname <> ""
Call make_book(folder, fname) 'CSVからbookを作成
ctr = ctr + 1
fname = Dir()
Loop
MsgBox (ctr & "件のファイル処理完了")
End Sub
Private Sub make_book(ByVal folder As String, ByVal fname As String)
Dim fpath As String
Dim bpath As String
Dim text As String
Dim data As Variant
Dim wdata As String
Dim i As Long
Dim wb As Workbook
Dim ws As Worksheet
Dim wrow As Long
Dim newsv As Long
newsv = Application.SheetsInNewWorkbook
Application.SheetsInNewWorkbook = 1
Set wb = Workbooks.Add(xlWBATWorksheet)
Application.SheetsInNewWorkbook = newsv
Set ws = Worksheets(1)
ws.Cells.NumberFormatLocal = "@"
fpath = folder & "\" & fname
bpath = folder & "\" & Left(fname, Len(fname) - 4) & ".xlsx"
Open fpath For Input As #1
'ファイル終端まで読み込む
wrow = 1
Do Until EOF(1)
Line Input #1, text
'カンマで分割
data = Split(text, ",")
For i = 0 To UBound(data)
'両端に""があれば、それをとって格納する
wdata = data(i)
If Left(wdata, 1) = """" And Right(wdata, 1) = """" And Len(wdata) > 1 Then
wdata = Mid(wdata, 2, Len(wdata) - 2)
End If
ws.Cells(wrow, i + 1).Value = wdata
Next
wrow = wrow + 1
Loop
Close #1
Application.DisplayAlerts = False
wb.SaveAs (bpath)
Application.DisplayAlerts = True
wb.Close
End Sub
>tatsumaru77 様
早速ご回答いただきありがとうございます。
正に求めていた操作そのものです。雑なお願いにもかかわらず一から作成いただき、いくら感謝しても足りません。
これからvbaを学ぶ中でまたご質問することがあるかもしれませんが、その際にはまたどうぞよろしくお願いいたします。
No.2
- 回答日時:
区切り文字はカンマでしょうか。
それともスペースでしょうか。各項目は""で、囲まれていますか。それとも、囲まれていませんか。
下記のどちらでしょうか。
123,456,789 ・・・・・①
"123","456","789" ・・・・・②
①でしょうか。それとも②でしょうか。
No.1
- 回答日時:
こんにちは
ご質問の内容は手動でも可能です。
「データの取得」からcsvファイルをテキストで読み込めば、そのままの内容を取得できます。
ただし、この場合はリンク状態になりますので、必要範囲をコピペしてから、読み込んだ方は削除してしまうのが簡単です。
VBA化したければ、こちらの方法であれば、「マクロの記録」をとればほぼそのまま利用できると思います。
>やりたい操作が理解を超えているので~
一気に全部を作成しようとすると、どこから手を付けたらよいのかわからないし、混乱してしまうかもしれません。
処理単位を分解して、部分を作成するような方法で学習しながら組み合わせてゆけば、最終的に目的のものを完成できるのではないかと思います。
以下は、基本的な部分になると思われる、「1ファイル分をテキストとして読み込んでシートに展開する」例です。
※ 例なので、Activesheetに展開しています。(最初にクリアしますのでご注意)
※ クォーテーションの処理は行っていません。(カンマがあればかまわず分割します)
※ ご質問の内容にしたければ、「フォルダを選択」して、その中のcsvファイルをループするようにすれば可能ですので、ゆっくりと挑戦してみてください。
Sub Sample_12095317()
Dim buf As String, rw As Long
Dim f, v
f = Application.GetOpenFilename("csv, *.csv")
If f = False Then Exit Sub
Cells.Clear
Cells.NumberFormatLocal = "@"
rw = 1
Open f For Input As #1
Do Until EOF(1)
Line Input #1, buf
v = Split(buf, ",")
Cells(rw, 1).Resize(1, UBound(v) + 1).Value = v
rw = rw + 1
Loop
Close #1
End Sub
>fujillin 様
ご回答ありがとうございます。
基本部分についてお教えいただき大変助かります。記録機能も使用してこれに肉付けする形で勉強をしてみようかと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- Access(アクセス) CSVファイルの「0落ち」にVBA 6 2023/02/02 15:27
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Excel(エクセル) エクセルでcsvファイルを開いてVBAを使いたい 7 2022/04/28 11:12
- Excel(エクセル) CSVファイルでVBAを動かす方法 3 2023/04/04 10:22
- Excel(エクセル) ファイル一覧表を使ったファイルの移動 5 2022/08/10 15:37
- Access(アクセス) access,vbaでフォルダ内のファイルをテーブルにインポート、ファイル名もフィールドに追加したい 1 2022/08/31 11:11
- Visual Basic(VBA) エクセルVBA 4 2022/05/14 00:51
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
カンマ区切りのCSVファイルから...
-
バッチでCSVを処理する時、空の...
-
マクロから出力されるcsvのダブ...
-
csvファイル 項目数取得
-
Excelのマクロで困ってます
-
特定文字を入ってるCSVの特定の...
-
COBOL85でのCSVファ...
-
CSV形式での保存時に”文字列...
-
エクセル形式のファイルの読み込み
-
CSVファイル作成
-
bashかpythonでcsvファイルの空...
-
csvファイルのデータの間引きを...
-
CSV出力して、MS/EXCELで開くと...
-
複数のCSVファイルのAccessテー...
-
csvファイルのデータの一部を取...
-
VBAでcsvファイルを読み込んで...
-
VBAでCSVファイルのデータを集...
-
ADODBでSQL実行前にレコードセ...
-
<csv>複数条件で検索・抽出し、...
-
エクセルマクロについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
カンマ区切りのCSVファイルから...
-
バッチでCSVを処理する時、空の...
-
【C#】パス名で無効な文字
-
csvファイル 項目数取得
-
マクロから出力されるcsvのダブ...
-
CSV形式での保存時に”文字列...
-
エクセルVBA 大容量CSVファイル...
-
csvファイルでの日付設定「yyyy...
-
【ExcelVBA】UTF-8の文字コード...
-
CSVファイルの項目行を削除...
-
【エクセルVBA】お願いします。...
-
csvファイルを列数ごとに分割す...
-
VBAでCSVファイルのインポート...
-
【エクセル マクロ】読み込ん...
-
エクセル形式のファイルの読み込み
-
巨大なCSVの加工(指定列のみの...
-
Windowsのバッチファイルについ...
-
COBOLでCSVをインプットにして...
-
CSV出力して、MS/EXCELで開くと...
-
CSV形式のファイルを読み込んで...
おすすめ情報
>tatsumaru77 様
ご質問の件、いずれのファイルも①カンマ区切り、②""で囲まれております。