我有一个80列乘200,000行的数据集。此数据包含具有开始或尾随空格的单元格值。我需要确定哪些单元格具有这些空格。
如果数据集较小,我可以轻松编写几个for循环来检查每个单元格的空格。但是,考虑到数据的大小,检查每个单元格会减慢速度(如果没有崩溃)。我预计自动过滤器会以同样的方式结束。
有没有办法有效地检查数据集中单元格值开头或结尾的空格,而不是逐个单元格地循环
答案 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秒内完成。这应该足够好了。
答案 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”为了找到分别在列和行分隔的制表符和分隔符旁边的“”