拆分不工作excel VBA

时间:2015-11-12 20:04:18

标签: arrays string excel vba excel-vba

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)=百万

4 个答案:

答案 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