簡體   English   中英

Function IIF in loop 語句

[英]Function IIF in loop statement

我有一個工作代碼循環遍歷數組的行,然后將值存儲到另一個數組中。 實際上代碼沒有問題,但我正在努力提高我的技能並學習新技能這是代碼

Sub Test()
    Dim a, i As Long, j As Long, n As Long
    a = Cells(1).CurrentRegion.Value
    ReDim b(1 To UBound(a, 1) * UBound(a, 2))
    For i = LBound(a) To UBound(a)
        If i Mod 2 = 1 Then
            For j = LBound(a, 2) To UBound(a, 2)
                n = n + 1
                If a(i, j) <> Empty Then b(n) = a(i, j)
            Next j
        Else
            For j = UBound(a, 2) To LBound(a, 2) Step -1
                n = n + 1
                If a(i, j) <> Empty Then b(n) = a(i, j)
            Next j
        End If
    Next i
    Range("M2").Resize(n).Value = Application.Transpose(b)
End Sub

我想做的是壓縮嵌套循環,這是我的嘗試

For j = iif(i mod2=1,LBound(a, 2) To UBound(a, 2),UBound(a, 2) To LBound(a, 2) Step -1)

但這似乎無效。 有任何想法嗎?

這很好用,我可以在專家的幫助下解決這個問題非常感謝大家

Sub Test()
    Dim a, i As Long, j As Long, n As Long
    a = Cells(1).CurrentRegion.Value
    ReDim b(1 To UBound(a, 1) * UBound(a, 2))
    For i = LBound(a) To UBound(a)
        For j = IIf(i Mod 2 = 1, LBound(a, 2), UBound(a, 2)) To IIf(i Mod 2 = 1, UBound(a, 2), LBound(a, 2)) Step IIf(i Mod 2 = 1, 1, -1)
            n = n + 1
            If a(i, j) <> Empty Then b(n) = a(i, j)
        Next j
    Next i
    Range("N2").Resize(n).Value = Application.Transpose(b)
End Sub

壓縮代碼

Option Explicit

Sub Test()
    Dim a: a = Cells(1).CurrentRegion.Value
    Dim ub1 As Long, ub2 As Long: ub1 = UBound(a): ub2 = UBound(a, 2)
    ReDim b(1 To ub1 * ub2)
    Dim i As Long, j As Long, n As Long, md As Long
    For i = 1 To ub1
        md = i Mod 2
        For j = Abs(md - 1) * ub2 + md To md * ub2 + Abs(md - 1) _
                Step 2 * (md - 1) + 1
            n = n + 1
            If a(i, j) <> Empty Then b(n) = a(i, j)
        Next j
    Next i
    Range("M2").Resize(n).Value = Application.Transpose(b)
End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM