[excel vba]卡在陣列上搞不懂

又卡在陣列上搞不懂...
目前有一會變動字數的字串:"sdshjdshj;kddjskdjskdjksjk;sdsdsdsdsds;dsddfdsghhhgj;"
想要抓";"在字串裡的位置,當它出現時將其填入另一陣列,像y(1)=10、y(2)=27
y(1)=10是指第1個";"在10的位置
y(2)=27是指第2個";"在27的位置

------------------------------------
Dim x() As String
Dim y(1 To 4) As Integer
Dim i As Integer

ReDim x(1 To Len(record))

For i = 1 To Len(record)
x(i) = Mid(record, i, 1)

If x(i) = ";" Then
y(j) = i
End If
Next i
------------------------------------
可是在我想把抓出來位置填入y(1)、y(2)....
卡住不知道該怎麼寫?
2016-06-20 11:01 發佈
文章關鍵字 Excel VBA 陣列
預設j=1
每判斷到;時
除了y(j) = i
再j+1
應該可達成

TalktoYou2016 wrote:
If x(i) = ";" Then
y(j) = i
End If


根據以前學其它程式語言的經驗,
提供下列紅字的部份供參考!

If x(i) = ";" Then
y(j) = i
j = j + 1     'j 需先定義為 1
End If
My Interior Knowledge is Extraordinaire
這麼簡單居然沒想到,最後改寫成這樣
抓到第4個";"位置後跳出迴圈

Dim x As String
Dim y(1 To 4) As Integer
Dim i As Integer
ReDim x(1 To Len(record))

j = 1
For i = 1 To Len(record)
x(i) = Mid(record, i, 1)
If j > 4 Then
GoTo cut01
Else
If x(i) = ";" Then
y(j) = i
j = j + 1
End If
End If
Next i

cut01: cutposition=y(4)
如果原始字串中『;』的數量會變動,
可將程式碼中的數量 4 用下列公式替換(理論上應該可行):

LEN(Record)-LEN(SUBSTITUTE(Record,";",""))

ps.程式碼請自設計!
My Interior Knowledge is Extraordinaire
Mystique Hsiao wrote:
可將程式碼中的數量 4 用下列公式替換(理論上應該可行):

LEN(Record)-LEN(SUBSTITUTE(Record,";",""))...(恕刪)


實際上也沒問題的,不過如果要在VBA 使用,需改成這樣
Len(Record) - Len(WorksheetFunction.Substitute(Record, ";", ""))

TalktoYou2016 wrote:
抓到第4個";"位置後跳出迴圈...(恕刪)


您那17行程式碼,改成這樣也可以
請參考,重點在 SPLIT()

temparray = Split(Record, ";")
Dim y() As Integer: ReDim y(UBound(temparray))
For i = 0 To UBound(temparray) - 1
y(i + 1) = y(i) + Len(temparray(i)) + 1
Next


能寫的這麼洗鍊太讚了



補字補字補字補字.....

TalktoYou2016 wrote:
又卡在陣列上搞不懂...(恕刪)




Function cutposition(X As String) As Variant
Dim i As Integer, Y As Variant
Do
i = VBA.InStr(i + 1, X, ";")
If i = 0 Then Exit Do
Y = Y & IIf(Y = "", "", ",") & i
Loop
cutposition = Split(Y, ",")
End Function




結果=cutposition(目標字串)

可以試看看


YS2000 wrote:
結果=cutposition(目標字串)...(恕刪)


使用 instr 這個方法也很棒,程式也很短

這行 cutposition = Split(Y, ",") 要修改一下才行
不然只會顯示第一個位置

改成 cutposition = Y ,不需要split()
'方法一
Private Sub Command1_Click()
Dim s As String, i As Long, a As Integer, y() As Long

s = "sdshjdshj;kddjskdjskdjksjk;sdsdsdsdsds;dsddfdsghhhgj;"
For i = 1 To Len(s)
If Mid(s, i, 1) = ";" Then
ReDim Preserve y(a)
y(a) = i
a = a + 1
End If
Next
End Sub

'方法二
Private Sub Command2_Click()
Dim s As String, st() As String, i As Long

s = "sdshjdshj;kddjskdjskdjksjk;sdsdsdsdsds;dsddfdsghhhgj;"
st = Split(s, ";")
ReDim y(1 To UBound(st)) As Long
For i = 1 To UBound(y)
y(i) = Len(st(i - 1)) + 1
If i > 1 Then y(i) = y(i) + y(i - 1)
Next
End Sub
內文搜尋
X
評分
評分
複製連結
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?