我一直在尝试创建一个宏来格式化来自特定外部源的复制表,问题是,一些单元格似乎是从右到左填充,剩下的空间到左边是空格:
" 1.12" - This is an example of said cell."
我正在寻找的是将细胞价值转换为"1.12"
的解决方案。
我曾尝试在excel中使用Substitute和Trim函数,但这些并没有解决我的问题,任何VBA建议或类似的将非常感激!
谢谢!
如果您的数据位于单元格A1中,请在B1中尝试此公式
= TRIM(清除(替换(A1,CHAR(160),“”)))
您可以使用宏格式查找和替换,也可以手动操作,具体取决于您必须执行此操作的频率。
使用替换时,突出显示其中一个空格并复制它,然后使用内置的Excel替换功能(确保展开选项并取消选择匹配整个单元格内容),然后将“空白区域”粘贴到查找框中,将替换盒留空。
* CTRL + F将打开查找菜单,然后单击替换菜单的选项卡。
使用Trim
函数。
我知道你在你的问题中说,它不起作用,但它绝对应该
删除字符串的任何前导或尾随空格。您当然可以将Range.Value / Range.Value2
的引用传递给它而不是a speicifc "string2"
请记住,
Trim
有一个ByVal
参考的论点。换句话说,它不会改变Range.Value
本身。所以如果你愿意改变它,那么:
Range("A1").Value = Trim(Range("A1").Value) ' "1.12" - Etc..
会导致整个字符串在左侧或右侧没有空格。如果你只想返回"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
为了找出字符串中的真实内容,您可以使用类似的东西
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
这应该会让你知道我们正在谈论的“白色空间”。 Here你可以看到ASC的结果意味着什么。