从CSV文件中删除不必要的引号



我需要你的帮助,从CSV文件中删除一些不必要的引号。该文件包含数千行,数据存储在列A中,如下所示:

185552,"NAME",0900000000,mail@mail.com,"2021-10-30 10:20:56",525.00,EUR,56183498348,"2021-10-30 10:20:56",2021-10-31,confr,53654189,13031062,1,0.5,"9658222K","Bank",,4433351,642,"XID 4211236",ENCC

为了检测这种不必要的引号,我记录了一个宏来复制列A,然后在列B中执行text to columns,逗号作为分隔符,none作为TextQualifier:

Columns("A:A").Select
Selection.Copy
Range("B1").Select
ActiveSheet.Paste
Columns("B:B").Select
Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
TextQualifier:=xlNone, ConsecutiveDelimiter:=False, Tab:=True, Semicolon _
:=False, Comma:=True, Space:=False, Other:=False, FieldInfo:=Array( _
Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), _
Array(8, 1), Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1), Array(14, _
1), Array(15, 1), Array(16, 1), Array(17, 1), Array(18, 1), Array(19, 1), Array(20, 1), _
Array(21, 1), Array(22, 1)), TrailingMinusNumbers:=True

运行此宏后,列R中的某些行包含双引号之间的数据。在我上面的例子中,这个值9658222K被包裹在双引号"9658222K"之间。由于这个烦人的问题,我不得不手动定位列R中的那些双引号,并将它们从列A的相应行中删除。如果你有一些vba代码可以自动完成这项工作,我将不胜感激。非常感谢。


对不起,伙计们,如果我对我的问题不够详细的话。我会再次尝试更好地解释我需要什么。我将尝试复制以下步骤,以删除CSV文件中不必要的引号:

  1. 在B列中重复A列
  2. 使用以下参数对B列中的列执行文本:逗号作为分隔符,none作为TextQualifier(none作为TextQualifier有助于我公开不必要的引号,如果我使用DoubleQuote作为TextQualfier,所有引号都会消失,我不希望这样(
  3. 将所有包含引号的单元格放在Q列(我前面提到的R列有误(
  4. 删除A列中的那些引号,而不是Q列中的引号。但有一个问题,A列中有不应该删除的好引号。我需要根据Q栏的发现,删除A栏中那些有害的引号。我的建议是将Q列复制到R,然后删除Q列中的所有引号。数据如下:

A Q R

.....,"......,"9658222K",.... 9658222K "9658222K"

我所需要的只是一些vba脚本来复制R中的值,并使用find将其在A中替换为Q中的值并替换为参数MatchCase:=True,然后循环查找R列中的另一个引号。

Range("A1").Select
Cells.Replace What:="""9658222K""", Replacement:="9658222K", LookAt:= _
xlPart, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _
ReplaceFormat:=False

请记住,引号之间的valule是可变的。

预期结果:

A                                   Q           R
.....,"......,9658222K,....   9658222K   "9658222K"

谢谢。

我不确定是什么原因导致了这种情况。当我把你的示例数据放在csv文件中并在Excel中打开时,你描述的引号就不存在了。但是,如果您有兴趣从给定列中的单元格中删除前导和尾随引号。这个代码就可以了。

Sub run_remove_quotes()
remove_quotes ("R") ' Removes the leading and trailing quotes from all cells in column R
End Sub
Sub remove_quotes(column As String)
Dim s As Worksheet
Set s = ActiveSheet ' use this line to process the active sheet
'Set s = Worksheets("Sheet1") ' use this line to process a specific sheet

Dim cell As Range

For Each cell In Intersect(s.Cells(1, column).EntireColumn, s.UsedRange)
If Left(cell.Value, 1) = Chr(34) And Right(cell.Value, 1) = Chr(34) Then
cell.Value = Mid(cell.Value, 2, Len(cell.Value) - 2)
End If
Next
End Sub

只需执行名为";run_remove_quotes"提供要处理的列字母

最新更新