拆分不工作的Excel VBA

Row 2 H Row 2input

 column H 90 million + 550 million + 150 million + 2.1 billion + 110 million + . . . 

Row 2 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)应该是文本数十亿或百万,这取决于文中的每一个循环,以便我可以进一步处理

因此,如果列H行2值是9000万Cet(0)= 90和Cet(1)= million

似乎有一个问题可能是整数和文本string之间没有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 

Split()工作正常,你只是没有为你的Replace()方法提供正确的参数。

我相信这些命令中的任何一个都会用+符号代替空格

 str = Replace(str, "", "+") str = Replace(str, "", "+") 

""只是一个空string – 你想replace有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, "+") 

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 

只要放弃不需要的信息字段,就不需要循环遍历单元格,而是使用批量的Range.TextToColumns方法 。

您提供的样本在数字和“百万”之间有一个非破坏空间(例如, Char(160) )。 从网页复制信息时,这是一个常见的exception情况。 这应该照顾那个stream氓空间特征以及正常的(例如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