Re: [算表] vba內字串選取的迴圈問題

看板Visual_Basic作者 (可)時間13年前 (2011/05/06 00:07), 編輯推噓3(306)
留言9則, 2人參與, 最新討論串2/3 (看更多)
※ 引述《ryanben ()》之銘言: : ※ [本文轉錄自 Office 看板 #1DmfC4RE ] : 作者: ryanben () 看板: Office : 標題: [算表] vba內字串選取的迴圈問題 : 時間: Thu May 5 20:07:29 2011 : 軟體:excel : 版本:2003 2010 : 不好意思有來洗版了@@ : 請問一下各位版友 : 小弟現在有一個難題 : 我大概知道要怎樣寫,但是迴圈寫不出來 : 想請教一下版上的高手版友 : 假設 我有一列的內容是 : A : 465654 : 125/6565/5643/4235 : 646/56/768568567/7567/575 : 35235 : 86765/756865/868657/576586 : 像以上這樣 : 每個字串的長度不一定,"/"的數量也不一定 : 而我想要以"/"為依據 將每個數值拆開並依序往下寫 : 465654 : 125 : 6565 : 5643 : 4235 : 646 : 56 : 768568567 : 以此類推.... : 我有想到可以用do until,if : 再搭配instr mid len等VBA指令可以寫出來 : 但是迴圈的觀念太差 : 真的寫不出來 : 請問有版友會寫的可以教教我嗎? : 謝謝!!!! VBA還有很多東西不懂 僅用我會的東西寫 所以不是很漂亮 還請見諒 試了幾個 結果應該是對的 但也可能有一些特例會造成錯誤 參考看看吧~ Sub macro1() Dim x As String x = Cells(1, 1) y = Len(x) k = 2 'k代表所在列數 '清除A欄的儲存格內容 Range("A2:A1048576").ClearContents '第一個 For m = 1 To y If Mid(x, m, 1) = "/" Then Cells(k, 1) = Left(x, m - 1) k = k + 1 Exit For Else End If Next '如果字串中沒有"/"存在 接下來也就不用做了 If Cells(2, 1) = "" Then Cells(2, 1) = x x = "" End If '中間的 l = 1 For m = 1 To y If Mid(x, m, 1) = "/" Then i = m For n = m + 1 To y If Mid(x, n, 1) = "/" Then j = n Cells(k, 1) = Mid(x, m + 1, n - m - 1) k = k + 1 l = m + 1 Exit For End If Next End If Next '最後一個 If x <> "" Then For m = 1 To y n = y - m If Mid(x, n, 1) = "/" Then Cells(k, 1) = Right(x, m) Exit For End If Next End If Range("A1").Activate End Sub -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.165.176.224

05/06 01:15, , 1F
原po問的問題不少,但不知道他有沒有真的去了解過= =
05/06 01:15, 1F

05/06 01:16, , 2F
所以我回好心的olycats , 使用split會比較方便
05/06 01:16, 2F

05/06 01:18, , 3F
str=Split("Taiwan","T") >>str(0)="T",str(1)="aiwan"
05/06 01:18, 3F

05/06 01:37, , 4F
aa = "1,2,3,4"
05/06 01:37, 4F

05/06 01:37, , 5F
s = Split(aa, ",")
05/06 01:37, 5F

05/06 01:39, , 6F
s(0)=1 s(1)=2.......
05/06 01:39, 6F

05/06 01:40, , 7F
05/06 01:40, 7F

05/06 01:41, , 8F
應該對你有幫助
05/06 01:41, 8F

05/06 06:08, , 9F
你可以用 InStr 函數找你要的字串,會比一個個比對快多了
05/06 06:08, 9F
文章代碼(AID): #1DmiigwT (Visual_Basic)
文章代碼(AID): #1DmiigwT (Visual_Basic)