首页 > 解决方案 > 使用VBA从csv文件替换列中的所有值

问题描述

我有一个 csv 文件,其中包含不同列中的字​​符串和数字。我想替换所有“?” 字符形成 C 列。

我正在尝试以下操作:

Set wb_dst = Workbooks.Open("C:\myFile.csv")
Set ws_dst = wb_dst.Sheets(1)
values = ws_dst.Range("C1:c500").Value
values = Replace(values, "?", "")

但不确定如何在column C不替换其他列中的值的情况下将此值转储回。或者,是否有任何其他方法可以执行上述任务或仅从本地驱动器上的 csv 文件中替换特定列中的某些字符?

编辑:我希望为 myFile.csv 更新 C 列中的值,所以我想我必须将数据转储到 C 列,我不确定?

标签: excelvba

解决方案


这很简单。您只需将修改后从范围中获取的数组分配回同一范围的值。但是,这个想法values = Replace(values, "?", "")不会飞。您将需要单独修改数组的每个元素。

Sub Macro1()

    Const LookFor       As String = "?"
    Const Replacement   As String = "X"
    
    Dim Wb              As Workbook
    Dim Ws              As Worksheet
    Dim Rng             As Range
    Dim Arr             As Variant
    Dim R               As Long                 ' loop counter: rows
    
    Set Wb = Workbooks.Open("C:\myFile.csv")
    Set Ws = Wb.Worksheets(1)
    Set Rng = Ws.Range("C1:C500")
    
    Arr = Rng.Value
    For R = 1 To UBound(Arr)
        Arr(R, 1) = Replace(Arr(R, 1), LookFor, Replacement)
    Next R
    Rng.Value = Arr
End Sub

推荐阅读