Board logo

標題: [發問] vba新手發問 [打印本頁]

作者: wayne0303    時間: 2021-9-7 11:43     標題: vba新手發問

請問我寫了一個基本的if迴圈,要怎麼讓判斷的結果跟著資料來源移動

謝謝
作者: dou10801    時間: 2021-9-7 12:15

Dim arr, i, s%
arr = Range([a20], [a65536].End(3))
For i = 1 To UBound(arr)
s = s + 1
         If arr(i, 1) >= 100 Then
            Cells(i + 19, 4) = "通過"
        ElseIf (arr(i, 1) < 100) * (arr(i, 1) >= 0) Then
            Cells(i + 19, 4) = "不通過"
        Else
            Cells(i + 19, 4) = ""
        End If
    Next
    [c20].Resize(UBound(arr)) = arr
End Sub
作者: samwang    時間: 2021-9-7 12:21

本帖最後由 samwang 於 2021-9-7 12:25 編輯

回復 1# wayne0303

要怎麼讓判斷的結果跟著資料來源移動>> 把比對後的結果又裝回arr,謝謝

Sub test()
Dim arr, i, s%
arr = Range([a20], [a65536].End(3))
For i = 1 To UBound(arr)
s = s + 1
         If arr(i, 1) >= 100 Then
            arr(s, 1) = "通過"
        ElseIf (arr(i, 1) < 100) * (arr(i, 1) >= 0) Then
            arr(s, 1) = "不通過"
        Else
            arr(s, 1) = ""
        End If
    Next
    [c20].Resize(UBound(arr)) = arr
End Sub
作者: wayne0303    時間: 2021-9-7 13:11

回復 2# dou10801



謝謝dou10801大大~
作者: wayne0303    時間: 2021-9-7 13:15

回復  wayne0303

要怎麼讓判斷的結果跟著資料來源移動>> 把比對後的結果又裝回arr,謝謝

Sub test( ...
samwang 發表於 2021-9-7 12:21



arr(s, 1) ←原來是改這個,我搞好久...

謝謝samwang大大~
作者: dou10801    時間: 2021-9-7 13:15

回復 4# wayne0303 samwang前輩的方法才正確,我也剛學,沒看清楚.
作者: wayne0303    時間: 2021-9-7 13:21

回復  wayne0303 samwang前輩的方法才正確,我也剛學,沒看清楚.
dou10801 發表於 2021-9-7 13:15




還是謝謝大大願意幫我解答~
作者: samwang    時間: 2021-9-7 14:03

本帖最後由 samwang 於 2021-9-7 14:05 編輯

回復 6# dou10801
samwang前輩的方法才正確,
>>您客氣了,後學也是初學者,您的方法也是有達到需求,但是當資料多的話,會因為每筆資料要貼回excel效率而變慢
論壇有很多前輩大師也多是後學學習的對象,一起加油,謝謝。

作者: ML089    時間: 2021-9-7 14:08

S = S + 1 是多餘的

Sub iif2()
    Dim arr, i
    arr = Range([a20], [a65536].End(3))
    For i = 1 To UBound(arr)
        If arr(i, 1) >= 100 Then
            arr(i, 1) = "通過"
        ElseIf arr(i, 1) >= 0 Then
            arr(i, 1) = "不通過"
        Else
            arr(i, 1) = ""
        End If
    Next
    [c20].Resize(UBound(arr)) = arr
End Sub
作者: wayne0303    時間: 2021-9-7 15:43

回復 9# ML089


S = S + 1 是多餘的
咦~可以吔,謝謝ML089大大指導

Sub iif2()
    Dim arr, i
    arr = Range([a20], [a65536].End(3))
    For i ...
ML089 發表於 2021-9-7 14:08

作者: ML089    時間: 2021-9-7 16:43

Select Case  來替代 If else
Sub iif4()
    Dim arr, i
    arr = Range([a20], [a65536].End(3))
    For i = 1 To UBound(arr)
        Select Case arr(i, 1)
        Case Is >= 100
            arr(i, 1) = "通過"
        Case Is >= 0
            arr(i, 1) = "不通過"
        Case Else
            arr(i, 1) = ""
        End Select
    Next
    [c20].Resize(UBound(arr)) = arr
End Sub
作者: wayne0303    時間: 2021-9-7 17:55

回復 11# ML089

謝謝ML089大大~
    Select Case用途有比較廣嗎?
作者: samwang    時間: 2021-9-9 13:17

回復 12# wayne0303


Select Case用途有比較廣嗎?
>> Select Case 和 if elseif,語法寫法不太一樣,但實際結果是一樣的,看個人喜好使用,感謝。
作者: ML089    時間: 2021-9-9 19:40

回復  ML089

謝謝ML089大大~
    Select Case用途有比較廣嗎?
wayne0303 發表於 2021-9-7 17:55


若是一個變數只有2~3種判斷,用 IF 比較簡單,3個以上判斷可以考慮用 Select Case
像下列範例之多項判斷用IF就很累吧!

Select Case number
    Case 1 To 5
        Debug.WriteLine("Between 1 and 5, inclusive")
        ' The following is the only Case clause that evaluates to True.
    Case 6, 7, 8
        Debug.WriteLine("Between 6 and 8, inclusive")
    Case 9 To 10
        Debug.WriteLine("Equal to 9 or 10")
    Case Else
        Debug.WriteLine("Not between 1 and 10, inclusive")
End Select
作者: 准提部林    時間: 2021-9-11 11:39

Sub iif3()
    Dim arr, i&,V,T$
    arr = Range([a20], [a65536].End(3))
    For i = 1 To UBound(arr)
         v= arr(i,1)
         t=switch(v>=100,"通過",v>=0,"不通過",v=v,"")
         arr(i, 1) = t
    Next
    [c20].Resize(UBound(arr)) = arr
End Sub
作者: wayne0303    時間: 2021-9-13 14:15

回復 13# samwang


感謝samwang大大 解答~
作者: wayne0303    時間: 2021-9-13 14:16

回復 14# ML089


了解~
謝謝ML089大大~
作者: wayne0303    時間: 2021-9-13 14:17

回復 15# 准提部林


哇~准大這個switch更簡潔~謝謝




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