我有一个简单的宏,需要使用分号定界符打开.csv文件,但是,当我运行代码时,所有数据都位于第一列中,字符串中带有;
,但没有定界。
我为workbooks.open方法尝试了其他可选设置。下面,我介绍了我的最新尝试。
我的区域设置是英语(英国),其中,
是数字分组分隔符,而.
是十进制分隔符。
到目前为止,我的代码:
Sub OpenCSV()
Dim FilePath as String
Dim LikeFile as String
FilePath = " C:\" ' Name of file path to fetch data from
LikeFile = Dir(FilePath & "*.csv") ' Finding file
If LikeFile <> "" Then
Workbooks.Open Filename:=FilePath & LikeFile, Format:=4, Delimiter:=";", ReadOnly:=True, Local:=True
End if
End sub
我的实际结果是它打开文件时没有定界。
.csv文件的片段:
根据以下内容导航:基金编号;基金名称;股份类型;货币; ISIN代码;价格 (NAV);总资产净值;优异; Tis; Tid; Share ccy;分享价格; TNA份额 汇率 20190321; XX9999; NamedFund; EUI; USD; XX123123; 204.563000000; 165061156.750000000; 806896.369000000 ;;; EUR; 180.070000000; 145293919.06; 1.136050000 20190321; XX9999; NamedFund; EUR; USD; XX; 123123124; 193.437000000; 352547.160000000; 1822.538000000 ;;; EUR; 170.270000000; 310327.15; 1.136050000 20190321; XX9999; NamedFund; USI; USD; XX; XX123125; 104.942000000; 37779152.540000000; 360000.000000000 ;;; 20190321; XX9999; NamedFund; USR; USD; XX123126; 0.000000000; 0.000000000; 0.000000000 ;;;;;;
答案 0 :(得分:2)
听起来像您需要利用.TextToColumns;它可以指定以分号分隔,例如:
Columns(1).TextToColumns DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=True, Comma:=False, Space:=False, Other:=False
编辑1:
请注意,您将必须修复数据,因为数据将显示为文本字符串,例如,对数字进行循环并以1的倍数...我昨天发布了一些类似的内容,涉及数据显示数字时显示#Value的数据透视表源数据中存在:
With sws 'source worksheet
lr = .Cells(.Rows.Count, 1).End(xlUp).Row
For i = 2 To lr
.Cells(i, 6).Value = Val(.Cells(i, 6).Value) * 1 'Uses column 6 (F)
Next i
End With
答案 1 :(得分:1)
如果在导入之前以编程方式将.CSV重命名为.TXT,则定界导入效果更好:
Private Sub CSVimportV2()
Dim wb As Workbook
Dim tmpFilename As String
Dim myPath As String
myPath = Application.DefaultFilePath & "\example.csv"
' delete .txt without questioning
tmpFilename = Left(myPath, InStrRev(myPath, ".")) & "txt"
If Dir(tmpFilename) <> "" Then Kill tmpFilename
' copy .csv as additional .txt
FileCopy myPath, tmpFilename
' open .txt as new workbook
Set wb = Workbooks.Open( _
Filename:=tmpFilename, _
UpdateLinks:=0, _
ReadOnly:=True, _
format:=4, _
Password:="", _
WriteResPassword:="", _
IgnoreReadOnlyRecommended:=False, _
Origin:=xlWindows, _
Delimiter:=";", _
Editable:=True, _
Notify:=True, _
Converter:=2, _
AddToMru:=False, _
Local:=True, _
CorruptLoad:=xlNormalLoad)
' delete .txt
If Dir(tmpFilename) <> "" Then Kill tmpFilename
' save it als xlsx
wb.Sheets(1).UsedRange.EntireColumn.AutoFit
wb.SaveAs Left(myPath, InStrRev(myPath, ".")) & "xlsx", xlOpenXMLWorkbook
End Sub
如果无法正确识别小数点分隔符,请改写Local
(可以是True
或False
)