Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.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,我有一个数据集,80列乘以200000行。此数据包含具有开头或结尾空格的单元格值。我需要确定哪些单元格有这些空格 如果数据集较小,我可以很容易地编写几个for循环来检查每个单元格中的空格。但是,考虑到数据的大小,检查每个单元格会降低excel的速度(如果不是使其崩溃的话)。我预计自动过滤器也会以同样的方式结束 是否有任何方法可以有效地检查数据集中单元格值开头或结尾的空格,而不必通过循环逐个单元格 Private Sub this() Dim i As Long, j As Long

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

如果数据集较小,我可以很容易地编写几个for循环来检查每个单元格中的空格。但是,考虑到数据的大小,检查每个单元格会降低excel的速度(如果不是使其崩溃的话)。我预计自动过滤器也会以同样的方式结束

是否有任何方法可以有效地检查数据集中单元格值开头或结尾的空格,而不必通过循环逐个单元格

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
我在一张100万行的纸上测试了这个,并且在5秒内完成。这应该足够好了


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

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”,以便在分别分隔列和行的选项卡和分隔符旁边找到“”

  • 选择要使用的所有单元格

  • 单击主页->条件格式按钮->新规则

  • 向下滚动至“使用公式确定要格式化的单元格”

  • 假设当前单元格为A1,请键入以下内容

    =或((右(A1,1)=“”),(左(A1,1)=“”)

  • 按“格式”按钮,单击“填充”,然后选择填充颜色

  • 按“确定”、“确定”


  • 单元格现在应该高亮显示

    您需要删除空格还是直接将其调出?您可以尝试“主页>编辑>查找并选择”(Ctrl+F),并在“查找内容”框中输入“*”作为前导空格,输入“*”作为尾随空格“查找全部”,然后按住Ctrl+A键并在结果中显示焦点以将其全部选中。然后,为每个区域的单元设置一个外环和一个内环。有可能吗?@Doug Coats:我只需要叫他们出来你们需要生成一个行列表吗?或者只是能够在工作表上识别他们?如果是后者,您可以只使用条件格式。如果不清楚,很抱歉,但我只想标识单元格。我不需要也不想移除它们。谢谢你的意见though@Adit2789这就是你想要的:)用额外的空格突出显示单元格。我看到了代码前面的文本。你说过要删除空格,所以我忽略了代码。我的错。但是,这与逐个单元格有什么不同?哪个版本的Excel有200万行的工作表?@RonRosenfeld 200万或200000?。当为数组指定一个范围时,值是不必要的,并且您没有提供一种方法来实际识别它们,如果在if中,a(I,j)。Font.Bold work?还是用颜色填充单元格?@Doug。当然,您的范围需要定义。And.value不是多余的,因为您也可以使用.Text或.Value2。@Adit:不,这不起作用,因为变量数组只能保存变量(例如数字或文本),而不能保存范围。所以a(i,j)给了你一个变量,让你知道。我以前从未需要使用变体,所以我不完全清楚它们的用法。不管是哪种方式,您将如何识别单元格?这似乎是使用标准识别单元格的最简单方法。好的。