从H
Row 2
列输入
column H
90 million +
550 million +
150 million +
2.1 billion +
110 million +
.
.
.
来自J
Row 2
中的预期输出
90
550
150
2.1
110
.
.
.
VBA代码:
Option Explicit
Sub ConvertRange()
Dim str As String
Dim Cet
Dim i, j, l As Long
Dim FinalRow As Long
Dim wk As Worksheet
Application.ScreenUpdating = False
Set wk = Sheets("Sheet1")
FinalRow = wk.Range("H900000").End(xlUp).Row
For i = 2 To FinalRow
str = Cells(i, "H").Value
str = Replace(str, " ", "+")
str = Replace(str, "", "+")
str = Replace(str, " ", "+")
Cet = Split(str, "+")
Range("J" & i) = Cet(LBound(Cet))
Next i
Application.ScreenUpdating = True
End Sub
但我错了列J
中的输出如下
90 million
550 million
150 million
2.1 billion
110 million
.
.
.
我相信其中任何一个命令都会用+
符号
str = Replace(str, "", "+")
str = Replace(str, " ", "+")
以下行将有一个数组,其中LBound值id Cet应该只是数字
Cet = Split(str, "+")
我哪里错了?
基本上我想要的是Cet(0)应该是长整数,Cet(1)应该是十亿或百万的文本,这取决于每个循环的col H中的文本,以便我可以进一步处理
因此,如果列H行2值为9000万Cet(0)= 90且Cet(1)=百万
答案 0 :(得分:4)
似乎有一个问题可能是整数和文本字符串之间没有space
。相反,有一个NBSP
。既然如此,以下情况应该有效:
Option Explicit
Sub ConvertRange()
Dim Cet
Dim FinalRow As Long
Dim wk As Worksheet
Dim i As Long
Set wk = Sheets("Sheet1")
With wk
FinalRow = .Cells(.Rows.Count, "H").End(xlUp).Row
For i = 2 To FinalRow
Cet = Split(Replace(.Cells(i, "H"), Chr(160), Space(1)))
.Range("J" & i) = Cet(0)
.Range("K" & i) = Cet(1)
Next i
End With
End Sub
答案 1 :(得分:1)
Split()
工作正常,您只是没有为Replace()
方法提供正确的参数。
我相信这些命令中的任何一个都会取代白色 带+号的空格
str = Replace(str, "", "+") str = Replace(str, "", "+")
""
只是一个空字符串 - 您想要替换有vbConstants的新行字符:
vbCr '// Carriage Return
vbLf '// Line Feed
vbCrLf '// Carriage Return Line Feed
vbNewLine '// Carriage Return Line Feed
或者您可以使用Chr()
代码:
Chr(13) '// Carriage Return
Chr(10) '// Line Feed
所以你需要这样的东西:
str = Replace(str, vbCrLf, "+")
答案 2 :(得分:0)
J列中这样的公式是不够的?
=LEFT(H2,FIND(" ",H2)-1)
它会在第一个空格字符之前提取所有字符。
VBA中的相同方法如下:
Sub test1()
Dim mystring As String
Dim newstring As String
mystring = "1.2 million +" 'hard-coded string
newstring = Left(mystring, InStr(1, mystring, " ") - 1) 'alteration of my formula suggestion
MsgBox (newstring) 'see the output
End Sub
答案 3 :(得分:0)
只要您丢弃不想要的信息字段,就可以使用批量Range.TextToColumns method而不是遍历单元格。
您提供的样本在数字和“百万”之间有一个不间断的空格(例如Char(160)
)。从网页复制信息时,这是一种常见的异常现象。这应该照顾那个流氓空间角色以及常规(例如Chr(32)
)空格。
With Worksheets("Sheet9") '<~~ set this worksheet refernce properly
With Columns(1)
.TextToColumns Destination:=.Cells(1), DataType:=xlDelimited, _
ConsecutiveDelimiter:=True, _
Tab:=False, Semicolon:=False, Comma:=False, _
Space:=True, Other:=True, OtherChar:=Chr(160), _
FieldInfo:=Array(Array(1, 1), Array(2, 9), Array(3, 9))
End With
End With