Board logo

標題: [發問] 求助 split問題 感恩 [打印本頁]

作者: 魷魚絲    時間: 2015-12-5 11:48     標題: 求助 split問題 感恩

[attach]22715[/attach]
希望將A欄 分割成B欄數字  C欄文字  感恩

Sub 分割()
    Dim i As Integer
    With Sheet2
        .Cells(1, 2) = "編號"
        .Cells(1, 3) = "名稱"
         For i = 2 To .Cells(65536, 6).End(xlUp).Row
             Sheet2.Cells(i, 2) = Split(.Cells(i, 1), "  ")(0)
             Sheet2.Cells(i, 3) = Split(.Cells(i, 1), "  ")(1)
    Next i
End With
End Sub
作者: 魷魚絲    時間: 2015-12-5 11:53

小弟的程式碼 都無法執行  請幫忙指點修改  感恩
作者: hcm19522    時間: 2015-12-5 12:21

http://blog.xuite.net/hcm19522/twblog/359339379
類似題
作者: yen956    時間: 2015-12-5 17:51

因原字串沒有空白, 故不能用空白去 Split
試試看
  1. Sub splitTXT()
  2.    Dim Str1 As String
  3.    Dim I As Integer, J As Integer, ST As Integer
  4.    For I = 2 To [A65536].End(xlUp).Row
  5.        J = 1
  6.        Num = ""
  7.        Str1 = Cells(I, 1)
  8.        For J = 1 To Len(Str1)
  9.            ST = InStr(1, "0123456789", Mid(Str1, J, 1), 1)
  10.            If ST = 0 Then
  11.                Cells(I, 2) = Left(Str1, J - 1)
  12.                Cells(I, 3) = Right(Str1, Len(Str1) - J + 1)
  13.                Exit For
  14.            End If
  15.        Next
  16.    Next
複製代碼

作者: 魷魚絲    時間: 2015-12-5 19:57

感謝樓上兩位大大的幫忙

另外 請教yen956

1.  num=""  代表的是?

2.另外假設  A1儲存格是 0911王小明   要如何分隔成B1=0911  C1=王小明

因為0911的零會被省略掉  變成911

感恩
作者: 准提部林    時間: 2015-12-5 21:05

回復 5# 魷魚絲

最好提供更多的例子,
編號最多幾位數?有無含英文或符號?
名稱後面有無包含數字?
作者: Joforn    時間: 2015-12-5 22:57

  1. Sub SplitText()
  2.   Dim I       As Long, J As Long
  3.   Dim RegExp  As Object
  4.   Dim Match   As Object
  5.   Dim strNum  As String
  6.   Dim strValue  As String
  7.   
  8.   Set RegExp = CreateObject("VBScript.RegExp")
  9.   With Sheet2
  10.     With RegExp
  11.       .Global = True
  12.       .Pattern = "\d+"
  13.     End With
  14.     For I = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
  15.       strValue = .Cells(I, 1).Value
  16.       Set Match = RegExp.Execute(strValue)
  17.       If Match.Count Then
  18.         strNum = Match.Item(0)
  19.         .Cells(I, 2).Value = strNum
  20.         J = InStr(strValue, strNum) + Len(strNum)
  21.         If J Then .Cells(I, 3).Value = Mid$(strValue, J)
  22.         Set Match = Nothing
  23.       Else
  24.         .Cells(I, 3).Value = strValue
  25.       End If
  26.     Next I
  27.   End With
  28. End Sub
複製代碼

作者: yen956    時間: 2015-12-6 04:40

回復 5# 魷魚絲
針對 0911 修正, 試試看
  1. '
  2. Sub splitTXT()
  3.    Dim Str1 As String
  4.    Dim I As Integer, J As Integer, ST As Integer
  5.    For I = 2 To [A65536].End(xlUp).Row
  6.        J = 1
  7. '       Num = ""    這是測試時加上去的, 忘了去掉, Sorry!!
  8.        Str1 = Cells(I, 1)
  9.        For J = 1 To Len(Str1)
  10.            ST = InStr(1, "0123456789", Mid(Str1, J, 1), 1)
  11.            If ST = 0 Then
  12.                Cells(I, 2) = "'" & Left(Str1, J - 1)     '針對 0911 修正
  13.                Cells(I, 3) = Right(Str1, Len(Str1) - J + 1)
  14.                Exit For
  15.            End If
  16.        Next
  17.    Next
  18. End Sub
複製代碼

作者: 准提部林    時間: 2015-12-6 10:39

Sub 分割()
Dim xR As Range, U
For Each xR In Range([A2], [A65536].End(xlUp))
  U = Val(1 & xR)
  xR(1, 2) = Mid(U, 2)
  xR(1, 3) = Mid(xR, Len(U))
Next
End Sub

1.編號限〔純數字〕,最多14碼
2.B欄預先設為〔文字格式〕,以免〔前導0〕無法顯示
作者: 准提部林    時間: 2015-12-6 10:48

公式:B/C欄設通用格式
B2:=MID(LOOKUP(,-LEFT(1&A2,ROW($1:$15))),3,15)
C2:=MID(A2,LEN(B2)+1,99)
作者: ML089    時間: 2015-12-6 11:19

9 樓的
xR(1, 2) = Mid(U, 2)
改為
xR(1, 2) = "'" & Mid(U, 2)
強迫寫入為文字
作者: c_c_lai    時間: 2015-12-6 12:59

本帖最後由 c_c_lai 於 2015-12-6 13:01 編輯

回復 10# 准提部林
A5 = "003金大中"
執行 分割() 結果為:    3
B5 := =MID(LOOKUP(,-LEFT(1&A5,ROW($1:$15))),3,15)
則 B5  =  "003"

Cells(I, 2) = "'" & Left(Str1, J - 1) 的方式
則 B5  =  "'003"
作者: yen956    時間: 2015-12-6 13:37

回復 9# 准提部林
果然是好方法:
也學到了 Mid及Offset函數 的 簡又新 方法, 謝謝!!
作者: 魷魚絲    時間: 2015-12-14 20:09

感恩 各位大大的無私分享\




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)