VBA从一个范围内的单元格内容中删除“

时间:2015-03-07 21:38:53

标签: excel excel-vba vba

我是vba编码(一般编码)的新手,但我已经开始做一个小宏,它将csv文件的值传输到excel文件中。

我的下一步是删除每个单元格中的引号。我已经尝试过这些代码行:

Dim Table As Range
Dim Cell As Variant

Set Table = Range("A1:currentregion")

For Each Cell In Table        
    cell.value2 = Replace(cell.value2,""","")   *I get a syntax error here*        
Next Cell

我知道这是非常基本的,但我无法在网上找到解决方案或使用宏录制器。如果有人能告诉我我做错了什么,以及我可以用什么代码将包含一串数字的单元格中的值更改为数值?

谢谢!

3 个答案:

答案 0 :(得分:3)

您无需遍历每个单元格。 Range("A1").CurrentRegion可以作为一个整体进行操作。

With Range("A1").CurrentRegion
    .Replace What:="""", Replacement:=vbNullString, LookAt:=xlPart
End With

请注意,要查找单引号(例如“)”,您需要连续使用4个引号。另一种选择是Chr(34),因为引号符号是第34个ASCII字符。

<强>附录:

关于问题的第二部分,最好使用快速文本到列►固定宽度命令将看起来像数字的文本更改为实际数字。每列必须单独运行,但这可以在.CurrentRegion内完成。

Dim c As Long
With Range("A1").CurrentRegion
    .Replace What:="""", Replacement:=vbNullString, LookAt:=xlPart
    For c = 1 To .Columns.Count
        .Columns(c).NumberFormat = "General"
        .Columns(c).TextToColumns Destination:=.Columns(c), _
            DataType:=xlFixedWidth, FieldInfo:=Array(0, 1)
    Next c
End With

有一个问题是列开始时的数字格式。如果它们是 Text (例如'.NumberFormat =“@”`那么删除引号不会将它们转换为真数。我已经添加了对 General 数字格式以适应这种情况。如果您希望保留现有的数字格式,可以使用更精确的方法来恢复某些单元格的数字格式。

答案 1 :(得分:1)

Cell.Value2 = Replace(Cell.Value2,Chr(34),“”)
总有一种解决方法,这个是通过字符代码引用的。

答案 2 :(得分:-1)

你应该将Cell作为范围调暗。使用VBA语法元素命名变量也不是一个好主意。请改用MyTable和MyCell。

要更好地设置范围

设置MyTable = [A1]

MyTable.CurrentRegion中的每个MyCell

...