こんにちは。閲覧いただきありがとうございます。
csv形式のファイルをExcelで開く際に、テキストウィザードで全て文字列にして表示した後に、xlsx形式で保存する作業があるのですが、ファイルが100個くらいあるため、これを自動でやってくれるVBAはないでしょうか。
全て文字列とする理由は、「001」などが「1」として表示されないようにするためです。
※使用しているExcelのバージョンは2010と2016で、OSはWindows7とWindows10です。
ボタンをクリックしたら、ダイアログボックスが表示されてCSVのあるフォルダをユーザーが選択し、選択されたフォルダの中に入っているCSVが全てテキストウィザードで、文字列として読み込まれてxlsx形式で同じフォルダに保存されるのが理想ですが、なかなか希望通りのVBAが見つかりません。
もし、上記のような処理をしてくれるVBAをご存知でしたらご教授いただけますと幸いです。
ネットで下記のようなマクロを見つけたので試してみたのですが、このマクロで作られたxlsxファイルは「001」を「1」として表記されてしまいました。
**********************************************************
Option Explicit
Sub csv_excel()
Dim DirName As String, OpenFileName As String
Dim OpenBook As Workbook
Application.ScreenUpdating = False '画面更新非表示
Cells(2, 4).ClearContents
'ダイアログでフォルダ選択
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "保存フォルダを選択して下さい"
If .Show = False Then Exit Sub
DirName = .SelectedItems(1)
End With
'保存フォルダの作成
If Dir(DirName & "\Excel", vbDirectory) = "" Then
MkDir DirName & "\Excel"
End If
'csvアイル取得
OpenFileName = Dir(DirName & "\*.csv")
'ファイルをエクセルに変換
Do While OpenFileName <> ""
Set OpenBook = Workbooks.Open(Filename:=DirName & "\" & OpenFileName, ReadOnly:=True)
OpenBook.SaveAs Filename:=DirName & "\Excel" & "\" & Left(OpenFileName, Len(OpenFileName) - 3) & "xlsx", _
FileFormat:=xlWorkbookDefault
OpenBook.Close
OpenFileName = Dir()
Loop
ThisWorkbook.Activate
ThisWorkbook.Sheets(1).Cells(2, 4) = DirName
Application.ScreenUpdating = True '画面更新表示
MsgBox "完了しました"
End Sub
ちなみにCSVファイルの中身は、
このような感じにコンマとダブルクォーテーションで区切られています。
"aaa","001","bbb","002","お菓子","1-1-1",
No.3ベストアンサー
- 回答日時:
こんばんは。
作っている途中で、別に枝番などは不要だということと、"" に囲まれた文字列があるこに気が付きましたので、付け足しになってしまいましたが、とりあえず、このようなものはいかがでしようか。
'//標準モジュール
Sub CSV2XLSX()
Dim FName, MyPath
Dim Fn As String
Dim i As Long, j As Long, k As Long
Dim n As Variant, kt As Long, cnt As Long
Dim BaseName As String
Dim wb As Workbook
Dim ext As String: ext = ".csv"
Dim ext2 As String: ext2 = ".xlsx"
ReDim myArray(2000)
'CSV全てを、Excel形式にする
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "保存フォルダを選択して下さい"
If .Show = False Then Exit Sub
MyPath = .SelectedItems(1) & "\"
End With
FName = Dir(MyPath & "*" & ext, vbNormal)
Do While FName <> ""
If FName <> "." And FName <> ".." Then
If (GetAttr(MyPath & FName) And vbNormal) = vbNormal And LCase(Right(FName, 4)) = ext Then
myArray(i) = FName
i = i + 1
If i > 2000 Then
MsgBox "2000件を越えています。", vbExclamation
Exit Do
End If
End If
End If
FName = Dir
Loop
If i <= 0 Then MsgBox "CSVファィルはそこにはありません。", vbCritical: Exit Sub
kt = Int(Log(i - 1) / Log(10)) + 1 '枝番の桁の用意 '別の意図で作られました。
ReDim Preserve myArray(i - 1)
j = 1
Application.ScreenUpdating = False
For Each n In myArray
Set wb = Workbooks.Open(MyPath & n)
DoEvents
With wb.ActiveSheet
.Cells.Replace """", "", xlPart
End With
k = InStrRev(n, ".")
If k > 0 Then
BaseName = Mid(n, 1, k - 1)
Else
BaseName = n
End If
FName = Dir(MyPath & BaseName & ext2, vbNormal)
Do Until FName = ""
j = j + 1
BaseName = BaseName & Format(j, String(kt, "0"))
FName = Dir(MyPath & BaseName & ext2, vbNormal)
Loop
cnt = cnt + 1
Application.StatusBar = cnt & " " & n & " を処理中"
wb.SaveAs MyPath & BaseName & ext2, xlWorkbookDefault
wb.Close False
Application.StatusBar = False
Set wb = Nothing
Next
Application.ScreenUpdating = True
MsgBox cnt & "件処理しました。", vbInformation
End Sub
WindFaller 様
お忙しい中マクロを組んで下さりありがとうございます。
問題なく動作し、今までの作業がとても効率よくなり大変助かりました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) VBA 参照先で選んだファイルをコピーし、出力先に別名で保存したい 8 2022/05/13 20:37
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/06/04 09:39
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/06 13:01
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
- Visual Basic(VBA) VBAでファイルを開くプログラムがエラーです 2 2023/02/21 16:56
- PowerPoint(パワーポイント) エクセルのマクロについて教えてください。 1 2022/03/25 17:03
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ファイル名と同名のフォルダを...
-
Excel VBA で フォルダ名の一部...
-
【マクロ】ファイル名の日付に...
-
集めたシートのシート名を変更...
-
Windows10でコマンドプロンプト...
-
VBSでファイル名と同じフォルダ...
-
デスクトップの画像をhtmlに表...
-
ファイル名から該当フォルダへ移動
-
VBA フォルダ名に特定の文字を...
-
VBA フォルダ名と画像ファイル...
-
VBA 最新のフォルダ取得
-
AIX findコマンド
-
バッチファイル フォルダ存在...
-
保存先のフォルダ名を指定した...
-
vbsで選択ダイアログを表示した...
-
GetPrivateProfileString関数
-
Dreamweaver作成時の画面表示
-
エクセル VBAについて教えてく...
-
META-INFフォルダの置き場所に...
-
VB.NRT FolderBrowserDialogを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Windows10でコマンドプロンプト...
-
ファイル名と同名のフォルダを...
-
VBA 最新のフォルダ取得
-
【マクロ】ファイル名の日付に...
-
windowsでテキストファイルの各...
-
デスクトップの画像をhtmlに表...
-
Access VBA で フォルダ権限...
-
フォルダ内のPDFファイル名を変...
-
パス名に2バイト文字(マルチバ...
-
多量のファイルをフォルダに自...
-
Excelで指定したフォルダに保存...
-
会社のネットワーク上のファイ...
-
ディレクトリ名変更してコピー...
-
VBA フォルダ名に特定の文字を...
-
エクセルマクロで指定フォルダ...
-
保存先のフォルダ名を指定した...
-
あるフォルダの中にあるファイ...
-
Excel VBA で フォルダ名の一部...
-
エクセルのマクロについて教え...
-
ExcelのVBAでフォルダ指定がで...
おすすめ情報