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

我有一个数据集是80列20万行。 此数据包含具有开始或结尾空格的单元格值。 我需要确定哪些单元格有这些空格。

如果数据集较小,我可以轻松地写几个for循环来检查每个单元格的空间。 但是,考虑到数据的大小,检查每个单元格会慢下来(如果没有崩溃)。 我预计汽车滤清器将以同样的方式结束。

有没有什么办法可以有效地检查数据集的单元格的开始或结束处的空格,而不必通过循环逐个单元格

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 

我在一百万行的工作表上testing了这个,并在5秒内完成了。 这应该是够好的。

在这里输入图像说明

1)select你想要使用的所有单元格

2)点击首页 – >条件格式button – >新规则

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

4)假设你当前的单元格是A1,input下面的内容

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

5)按格式button,点击“填充”select一种颜色进行填充

6)按“确定”,“确定”。

细胞现在应该突出显示

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

 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”的扩展searchfunctionfind“”标签旁边的分隔符和分隔列和行分别