Board logo

標題: 字串分割與換行? [打印本頁]

作者: joey0415    時間: 2010-10-13 21:07     標題: 字串分割與換行?

小弟有一串字串如下:
111,222,333,444 aaa,bbb,ccc,ddd
其中444後面有一個空格,小弟想將字串分割如圖

如果直排,該怎麼寫
橫排,又該怎麼寫呢

謝謝
[attach]3162[/attach]
作者: joey0415    時間: 2010-10-13 21:38

小弟會寫直排了,不過寫得不好,大家幫我看看
  1. Sub 字串處理()
  2.     Dim aa As String
  3.     aa = Sheets(1).Cells(1, 1)
  4.     bb = Split(aa, " ")
  5.    
  6.     i = 1
  7.         For Each cc In bb
  8.         Sheets(1).Cells(i, 2) = cc
  9.         dd = Split(cc, ",")
  10.             j = 1
  11.             For Each ee In dd
  12.             Sheets(1).Cells(j, i + 2) = ee
  13.             j = j + 1
  14.             Next
  15.         i = i + 1
  16.         Next
  17. End Sub
複製代碼

作者: GBKEE    時間: 2010-10-13 21:41

本帖最後由 GBKEE 於 2010-10-14 18:54 編輯

回復 2# joey0415
請參考參考
Sub Ex()
    Dim Rng As Range, A, B, W, E
    W = "111,222,333,444 AAAA,BBB,CCC,DDDD"
    A = Split(W, " ")  '以空白分解
    Set Rng = [A1]
    Rng.CurrentRegion = ""
    For Each E In A
        B = Split(E, ",")  '以 , 分解
       '''''''''''橫排
        Rng.Resize(1, UBound(B)+1) = B     '陣列是橫排的
        Set Rng = Rng.Offset(1)
        '''''''''''直排
        'Rng.Resize(UBound(B)+1, 1) = Application.Transpose(B)  'Transpose轉置為直排
        'Set Rng = Rng.Offset(, 1)
    Next
End Sub
作者: oobird    時間: 2010-10-13 21:42

Sub Macro1()
t = [a1]
sp = Split(t, " ")
p1 = Split(sp(0), ",")
p2 = Split(sp(1), ",")
For i = 1 To 4
Cells(1, 2 + i) = p1(i - 1)
Cells(2, 2 + i) = p2(i - 1)
Cells(i, 8) = p1(i - 1)
Cells(i, 9) = p2(i - 1)
Next
End Sub
作者: joey0415    時間: 2010-10-13 22:47

感謝兩位版主幫忙,小弟應該會用了,謝謝
作者: lasum    時間: 2012-6-26 02:59

最近在學習VBA…上述的程式都有測試…
oobird 大的程式會出現    陣列索引超出範圍 錯誤 9
不知道是不是版本的問題…我來找到了這篇
http://forum.twbts.com/redirect. ... amp;goto=nextoldset
修改後的程式如下…
Sub Macro1()
On Error Resume Next '增加程式
t = [a1]
sp = Split(t, " ")
p1 = Split(sp(0), ",")
p2 = Split(sp(1), ",") '修改前會出現 陣列索引超出範圍 錯誤 9
For i = 1 To 4
Cells(1, 2 + i) = p1(i - 1)
Cells(2, 2 + i) = p2(i - 1)
Cells(i, 8) = p1(i - 1)
Cells(i, 9) = p2(i - 1)
Next
End Sub
爾後程式就正常了…感謝以上前輩提供的學習資料!
作者: GBKEE    時間: 2012-6-26 09:38

本帖最後由 GBKEE 於 2012-6-26 10:08 編輯

回復 6# lasum
Sub Macro1()
On Error Resume Next '增加程式   '<- 這不是解決之道 :   如程式中還有錯誤是會找不出來的
t = [a1]                                                < ..問題是這字串中  如沒有 空格的字串
sp = Split(t, " ")                                 <-這裡的陣列上限元素的索引值 只有 0
p1 = Split(sp(0), ",")
p2 = Split(sp(1), ",")                         <-  這必然會出現 陣列索引超出範圍 錯誤 9
  1. Sub Ex()
  2. Dim A, AR, xi As Integer
  3. A = "A111,222,333,444" '這裡的A字串 套到 oobird 超版的程式 會出錯
  4. 'A = "A111,222,333,444 Baa,bbb,ccc,ddd C11,222,333,444 Daa,bbb,ccc,ddd"
  5. '上面的 A字串 套到 oobird 超版的程式 OK的
  6. AR = Split(A, " ")
  7. For xi = 0 To UBound(AR) 'UBound 傳回 陣列的上限元素的索引值
  8. A = Split(AR(xi), ",")
  9. [a1].Offset(xi).Resize(, UBound(A) + 1) = A
  10. [G1].Offset(, xi).Resize(UBound(A) + 1) = Application.Transpose(A)
  11. 'Transpose 工作表函數 :轉置
  12. Next
  13. End Sub
複製代碼

作者: lasum    時間: 2012-6-30 00:07

回復 7# GBKEE

感謝 GBKEE 大的回覆及提醒…

相關的程式測試,也正如 GBKEE大 所說的一樣…

至於應用方面…小弟還要再研究、學習…




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