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