VBA:如何识别在单元格值的开头或结尾处有空格的单元格

时间:2017-05-18 21:35:06

标签: excel vba excel-vba

我有一个80列乘200,000行的数据集。此数据包含具有开始或尾随空格的单元格值。我需要确定哪些单元格具有这些空格。

如果数据集较小,我可以轻松编写几个for循环来检查每个单元格的空格。但是,考虑到数据的大小,检查每个单元格会减慢速度(如果没有崩溃)。我预计自动过滤器会以同样的方式结束。

有没有办法有效地检查数据集中单元格值开头或结尾的空格,而不是逐个单元格地循环

3 个答案:

答案 0 :(得分:2)

1)选择您要使用的所有单元格

2)点击首页 - >条件格式化按钮 - >新规则

3)向下滚动到"使用公式确定要格式化的单元格"

4)假设您当前的单元格为A1,请输入以下内容

=OR((RIGHT(A1,1)=" "),(LEFT(A1,1)=" "))

5)按格式按钮,点击"填写"选择填充颜色

6)按"确定","确定"。

现在应突出显示单元格

答案 1 :(得分:1)

Private Sub this()
    Dim i As Long, j As Long
    Dim sh As Worksheet
    Dim sheetArr As Variant
    Set sh = ThisWorkbook.Sheets("Sheet1")
    sheetArr = sh.UsedRange
    rowC = sh.UsedRange.Rows.Count
    colC = sh.UsedRange.Columns.Count
    For i = 1 To rowC
        For j = 1 To colC
            If Left(sheetArr(i, j), 1) = " " Then
                sh.Cells(i, j).Interior.ColorIndex = 37
            End If
            If Right(sheetArr(i, j), 1) = " " Then
                sh.Cells(i, j).Interior.ColorIndex = 37
            End If
        Next j
    Next i
End Sub

我在一百万张纸上测试了这个,并在5秒内完成。这应该足够好了。

enter image description here

答案 2 :(得分:0)

如果逐个单元查询工作簿,则循环可能会很慢。 相反,查询变量数组的循环会快得多:

Dim i as long
Dim j as long
Dim a() as Variant
a = yourrange.value
for i = lbound(a,1) to ubound(a,1)
  for j = lbound(a,2) to ubound(a,2)
    if left(a(i,j),1) = " " or right(a(i,j),1) = " " then
     'beginning or ending with " "
    end if
  next j
next i

另一种选择是将数据复制/粘贴到记事本++,然后使用扩展搜索功能“\ t”和“\ t”以及“\ r \ n”和“\ r \ n”为了找到分别在列和行分隔的制表符和分隔符旁边的“”