如何用Excel VBA宏打开UTF-8无BOM编码CSV文件解决日文乱码问题
日文CSV乱码问题VBA解决方案
认知确认
你提到的Notepad++录制的宏无法在VBA中使用的认知是正确的,二者属于完全独立的宏体系,语法、运行环境均不互通,无法直接复用。
可用VBA宏代码
下面提供两种常用实现,可根据需求选择:
方案1:直接以UTF-8无BOM编码打开单个CSV文件(最简实现)
Sub OpenUTF8CSV() Dim filePath As Variant ' 选择要打开的CSV文件 filePath = Application.GetOpenFilename("CSV文件 (*.csv), *.csv", Title:="选择要打开的CSV文件") If filePath = False Then Exit Sub ' Origin:=65001 对应UTF-8编码,Comma:=True代表按逗号分割,可根据实际分隔符调整参数 Workbooks.OpenText Filename:=filePath, Origin:=65001, DataType:=xlDelimited, Comma:=True End Sub
方案2:批量转换指定文件夹下所有CSV编码,转换后可直接正常打开
如果需要处理数百个文件,建议用该批量方案:
Sub BatchProcessCSV() Dim folderPath As String Dim fileName As String ' 选择待处理CSV所在文件夹 With Application.FileDialog(msoFileDialogFolderPicker) .Title = "选择存放CSV文件的文件夹" If .Show <> -1 Then Exit Sub folderPath = .SelectedItems(1) & "\" End With fileName = Dir(folderPath & "*.csv") Do While fileName <> "" ' 以UTF-8编码打开CSV后另存为标准Excel可识别格式,也可按需修改为保存为新CSV Workbooks.OpenText Filename:=folderPath & fileName, Origin:=65001, DataType:=xlDelimited, Comma:=True ActiveWorkbook.SaveAs Filename:=folderPath & "已处理_" & Replace(fileName, ".csv", ".xlsx"), FileFormat:=xlOpenXMLWorkbook ActiveWorkbook.Close SaveChanges:=False fileName = Dir Loop MsgBox "批量处理完成,已处理文件前缀为【已处理_】,打开无乱码" End Sub
使用步骤
- 打开Excel,按
Alt+F11调出VBA编辑器 - 右键左侧工程栏,选择「插入」-「模块」
- 将上述代码粘贴到模块窗口中
- 按
F5运行对应宏即可
注意:如果CSV的分隔符不是逗号,可将代码中
Comma:=True替换为对应分隔符参数,比如制表符对应Tab:=True、分号对应Semicolon:=True。
内容的提问来源于stack exchange,提问作者user12280866
相关产品推荐
相关产品推荐

