我有一个主要用文本填充的CSV文件,当我用Excel打开它时,某些单元格被解释为公式,并且在其中具有值#NAME?
。
这是因为这些单元格以“-”开头,后跟一个字母。这些单元格实际上包含多行枚举。
要重现此问题,只需在单元格中键入以下内容即可;将其保存为CSV文件;关闭它;并重新打开它。
'-a
这里的撇号很重要,因为它告诉Excel将单元格的内容视为字符串而不是公式。但是,当重新打开CSV时,该撇号将消失并由等号代替,因此会出现#NAME?
错误。
因此,我想到了实现一个宏,该宏将在打开后立即遍历CSV文件中的单元格,以通过删除Excel添加的等号来解决该问题:
Sub PostCsvOpenConvertToString()
'PURPOSE: Convert all #NAME (caused by formula automatic conversion back) to a string.
'INSTRUCTION: Run right after opening the CSV file.
Dim CsvFile As Workbook
Set CsvFile = ActiveWorkbook
Dim ws As Worksheet
Set ws = CsvFile.Sheets(1)
Dim CellsValue() As Variant
CellsValue = ws.UsedRange.Value2
Dim i As Long, j As Long
For i = 1 To UBound(CellsValue, 1)
For j = 1 To UBound(CellsValue, 2)
If CVErr(CellsValue(i, j)) = CVErr(xlErrName) Then
Dim CellFormula As String
CellFormula = ws.UsedRange.Cells(i, j).Formula
If Left$(CellFormula, 1) = "=" Then
ws.UsedRange.Cells(i, j).Formula = Right$(CellFormula, Len(CellFormula) - 1)
End If
End If
Next j
Next i
End Sub
这种方法行得通,但是我想知道的是,是否有更简单的方法。有没有一种保存文件的方法,以便Excel在重新打开时不会将其转换为公式?
也许,是否有一种方法可以打开CSV,以便Excel不会将单元格转换为公式?
我知道我可以转到数据>获取和转换数据>来自文本/ CSV 。唯一的事情是它创建了一个表(我不想要),并且我不习惯在VBA中编写这些查询。因此,如果可以避免的话,我会更喜欢,但是如果这是唯一的解决方案,我会考虑的。
注意:很高兴知道,除了C和R之外,其他所有字母的行为都相同,这可能与R1C1样式引用有关。
答案 0 :(得分:1)
再次感谢Ron Rosenfeld在评论中提供此答案。我将在这里重现一些细节,以便将这个问题标记为已回答。
为避免从Data > Get Data
部分导入CSV时插入表格,可以使用可以添加到可用选项的Text Import Wizard。
然后,请确保在第3步中指示该数据为文本: