Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.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 Excel:从单元格中删除空白_Vba_Excel - Fatal编程技术网

Vba Excel:从单元格中删除空白

Vba Excel:从单元格中删除空白,vba,excel,Vba,Excel,我一直在尝试创建一个宏,以格式化从特定外部源复制的表,问题是,某些单元格似乎从右向左填充,剩余的空间向左填充空格: "              1.12" - This is an example of said cell." 我正在寻找的是将单元格值转换为“1.12”的解决方案 我曾尝试在excel中使用替换和修剪功能,但这些并不能解决我的问题,任何VBA建议或类似建议都将不胜感激 谢谢大家! 使用该函数 我知道你在你的问题中说,它不起作用,但它绝对应该起作用 删除字符串的任何前导或尾随空

我一直在尝试创建一个宏,以格式化从特定外部源复制的表,问题是,某些单元格似乎从右向左填充,剩余的空间向左填充空格:

"              1.12" - This is an example of said cell."
我正在寻找的是将单元格值转换为
“1.12”
的解决方案

我曾尝试在excel中使用替换和修剪功能,但这些并不能解决我的问题,任何VBA建议或类似建议都将不胜感激

谢谢大家!

使用该函数

我知道你在你的问题中说,它不起作用,但它绝对应该起作用

删除字符串的任何前导或尾随空格。 当然,您可以将
Range.Value/Range.Value2的引用传递给它,而不是一个特殊的
“string2”


请记住,
Trim
对参数有一个
ByVal
引用。换句话说 换句话说,它不会自行更改
范围.Value
。所以如果你是 如果愿意改变这一点,那么:

将导致整个字符串的左侧或右侧没有空格。如果您只想返回
“1.12”
(我发现您的问题有点不清楚,那么我们还需要使用
InStr()
Left()

此过程将遍历选定列中的所有单元格,并将其更改为所需结果:

Private Sub toCategory(ByVal columnIndex as Long)

  Dim ws as Worksheet: Set ws = Sheets("Your Sheet Name") ' change me <-
  Dim lr as Long
  Dim cell as Range
  Dim searchrange as Range

  lr = ws.Cells(ws.Rows.Count, columnIndex).End(xlUp).Row
  Set searchrange = ws.Range(Cells(1, columnIndex), Cells(lr, columnIndex))

  For Each cell in searchrange
    cell.Value = Trim(cell.Value) ' could be done in one step, but for sake of readability
    cell.Value = Left(cell.Value, InStr(, cell.Value, " ") -1) ' returns "1.12"
  Next cell
End Sub
私有子目录(ByVal列索引长度)

将ws设置为工作表:设置ws=Sheets(“您的工作表名称”)“更改me如果您的数据位于单元格A1中,请在B1中尝试此公式

=修剪(清洁(替换为A1,字符(160),“”)


您可以在宏格式中使用“查找”和“替换”,也可以根据您执行此操作的频率手动使用

当使用替换时,突出一个空白空间并复制它,然后使用内置Excel替换特征(确保您扩展了选项并不选中匹配整个单元格内容),然后将“空白区”粘贴到“查找框”中,并将替换框保留为空。


*CTRL+F将打开“查找”菜单,然后单击“替换”菜单的选项卡。

为了找出字符串中的真正内容,您可以使用类似的内容

Sub StringToAsc()

Dim s As String
Dim i As Long

    s = "Hello"
    s = "              1.12"

    For i = 1 To Len(s)
        Debug.Print Mid(s, i, 1), Asc(Mid(s, i, 1))
    Next i

End Sub
这应该给你一个线索,什么是“空白”我们正在谈论。
您可以看到ASC的结果意味着什么。

如何
Trim
不能解决这里的问题?它绝对应该确保开头(和/或结尾)的字符一组字符串是空白字符?如果它们是特殊字符和空白字符的混合体,您可以使用
RegEx
来识别所需的位,但不确定
Substitute
是否是一个好的选择。它可能会从实际字符串中删除任何空格。使用
Trim
的问题是,我们将请确保字符串开头和结尾的所有字符都是空格。如果第一个字符不是空格(即特殊字符),修剪将没有affect@ZacOP在他的问题中指出,任何尾随字符或前导字符都是空白。此外,除非另有规定,否则这是不可能回答的。我们不能在这里列出所有可能的通配符。我的怀疑是,如果OP已经使用了
Trim
,但它不起作用,那么可能会出现非空白字符ch即使OP认为这些字符纯粹是因为它们不可见。如果是这样,这可以通过使用
chr
range或
regular expression
@Zac很容易解决,但实际上,我还是想在这里认为提问者是错的,而不是答案。确实缺乏答案与MCVE、接收到的结果或任何东西相似。没有这些详细信息,我们只能推测为什么某个操作没有按预期(或者更好地说,按OP预期)工作。此外,我的过程修剪前导和尾随空格,并在第一次出现
时返回子字符串
因此,我认为它可以很好地代表OP想要实现的目标,不管是空白还是空白,但如前所述,没有OP的进一步说明,我们只能推测什么是最佳方法。很可能是regexp,但也可能是完全不必要的复制和粘贴数据到新工作表中查找和替换(可能有一个新行CR+LF作为前导空格。您也可以尝试一下。)->null space->null->null
Sub StringToAsc()

Dim s As String
Dim i As Long

    s = "Hello"
    s = "              1.12"

    For i = 1 To Len(s)
        Debug.Print Mid(s, i, 1), Asc(Mid(s, i, 1))
    Next i

End Sub