Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 删除单列中的空白_Vba_Excel - Fatal编程技术网

Vba 删除单列中的空白

Vba 删除单列中的空白,vba,excel,Vba,Excel,我有一张表,我需要删除其中的空格,以便比较。我正在使用我在这里找到的一个函数和一个将所有值放入数组的子函数(为了速度),但我不知道为什么。我得到一份工作 ByRef参数类型不匹配错误 现在试着这样做,我意识到我实际上是(I,9) 但是我在RegExp行上得到一个用户定义的类型错误 Public Function RemoveWhiteSpace(target As String) As String With New RegExp .Pattern = "\s"

我有一张表,我需要删除其中的空格,以便比较。我正在使用我在这里找到的一个函数和一个将所有值放入数组的子函数(为了速度),但我不知道为什么。我得到一份工作

ByRef参数类型不匹配错误

现在试着这样做,我意识到我实际上是(I,9) 但是我在RegExp行上得到一个用户定义的类型错误

Public Function RemoveWhiteSpace(target As String) As String

    With New RegExp
        .Pattern = "\s"
        .MultiLine = True
        .Global = True
        RemoveWhiteSpace = .Replace(target, vbNullString)
    End With
End Function

Sub stringRangeToClean()

Dim r As Variant
Dim i As Long
Dim txt As String


r = ActiveWorkbook.Sheets("Trent BASE DATA").UsedRange

For i = 2 To UBound(r)

       txt = r(i, 9)
       txt = RemoveWhiteSpace(txt)

Next i

End Sub
试着这样做:

Public Function RemoveWhiteSpace(target As String) As String

    Dim RegExp    As Object
    Set RegExp = CreateObject("VBScript.RegExp")

    With RegExp
        .Pattern = "\s"
        .MultiLine = True
        .Global = True
        RemoveWhiteSpace = .Replace(target, vbNullString)
    End With
End Function
这样,您就为
regExp
变量使用了后期绑定,因此您和您的用户都不必添加任何额外的库

如果要使用早期绑定,则应将
Microsoft VBScript正则表达式5.5“
库添加到VBA使用的库中。早期绑定会给您一些时间奖励,并提供
智能感知


此处,所选答案逐步解释了如何添加库:


关于您的代码-这是一个非常简单的循环,请尝试这样做:

Sub StringRangeToClean()

    Dim r           As Variant
    Dim myCell      As Range

    r = ActiveWorkbook.Sheets("Trent BASE DATA").UsedRange        
    For Each myCell In r
        myCell = RemoveWhiteSpace(txt)
    Next myCell

End Sub

这样,每个单元格都将被检查,空格将被删除。

现在,删除空格不需要正则表达式。您的主要挑战是定义基本VBA的范围:

Sub tgr()

    With ActiveWorkbook.Sheets("Trent BASE DATA")
        .Range("J2", .Cells(.Rows.Count, "J").End(xlUp)).Replace " ", vbNullString
    End With

End Sub

注释到哪里去了?您只是在删除空格?这可以通过一行代码来完成:
ActiveWorkbook.Sheets(“Trent基本数据”).Cells.Replace“”,vbNullString
no我只想删除列(I,10)中的空格或列I,但仅当其中有值时,因此我使用.usedRange并使用循环沿工作表向下查看范围的偏移量(0,10),而不是
。单元格
将该部分更改为
.Range(“J:J”)
。如果单元格中没有值,它也不会改变,因此不需要尝试排除这些值,它不会添加任何时间。我知道.value2是错误的,但它不适用于.value2 removed。我认为这样,如果我有一个半高的空白单元格,它就会停止。你真的尝试了吗?你应该尝试一下。是的,它现在可以工作了。我选择了right列谢谢我喜欢这段代码只是出于兴趣。一旦我完成了使原始数据可读性的操作,有没有办法扭转这种情况?您需要将原始数据存储在一个数组中,或者在删除空白之前将其复制到另一列。这已修复了我的正则表达式错误,但没有删除空格。我只想删除colu中的空格mn Jthen
R
应该是这样的=
Intersect(工作表(“Trent基础数据”)。UsedRange,工作表(“Trent基础数据”)。columns(“J”))
。但是,如果列
J
为空,您应该检查它是否为空。下面是另一个相关问题,我是否可以将每个单元格与另一个单元格进行比较,但忽略空格,以便只比较字符,而不比较空格的数量或位置
Sub tgr()

    With ActiveWorkbook.Sheets("Trent BASE DATA")
        .Range("J2", .Cells(.Rows.Count, "J").End(xlUp)).Replace " ", vbNullString
    End With

End Sub