Arrays 在VBA中更改数组

Arrays 在VBA中更改数组,arrays,excel,vba,Arrays,Excel,Vba,我想将值交换到一个多维数组中,每行的值不是#N/a或不是0。因此,输入表位于电子表格上,包含以下数字,问题是我无法按照自己的意愿交换它们 24 20 0 #N/A #N/A #N/A 21 20 0 #NA #N/A #N/A 25 24 20 0 #N/A #N/A 26 25 24 20 0 #N/A 28 26 25 24 20 0 你对如何处理这件事有什么建议吗 Sub FlipRows() Dim

我想将值交换到一个多维数组中,每行的值不是#N/a或不是0。因此,输入表位于电子表格上,包含以下数字,问题是我无法按照自己的意愿交换它们

24  20  0   #N/A  #N/A  #N/A 
21  20  0   #NA  #N/A  #N/A
25  24  20   0   #N/A  #N/A
26  25  24  20    0    #N/A
28  26  25  24    20    0
你对如何处理这件事有什么建议吗

Sub FlipRows()

    Dim Rng As Range
    Dim WorkRng As Range
    Dim arr As Variant
    Dim i As Integer, j As Integer, k As Integer
    Dim matrix As Range, matrix2 As Range

    Set matrix = Range("A1:F5")
    Set matrix2 = Range("A7:F11")
    'Set tempMatrix as String, tempMatrix2 as String

    On Error Resume Next

    'matrix.Select
    'matrix.Copy

    'matrix2.Select
    'matrix2.PasteSpecial

    Set WorkRng = Application.Selection
    arr = WorkRng.Formula
    For i = 1 To UBound(arr, 1)
        k = UBound(arr, 2)
        For j = 1 To UBound(arr, 2) / 2
            xTemp = arr(i, j)
            arr(i, j) = arr(i, k)
            arr(i, k) = xTemp
            k = k - 1
        Next
    Next
    WorkRng.Formula = arr

End Sub

假设无效值(0和
#NA
)始终位于每行的右侧,则应执行以下操作:

    For i = LBound(arr, 1) To UBound(arr, 1)
        'first search backward the first valid entry
        For k = UBound(arr, 2) To LBound(arr, 2) Step -1
            If Not IsError(arr(i, k)) Then If arr(i, k) <> 0 And arr(i, k) <> "#NA" Then Exit For
        Next

        'Now do the swap in the valid region
        For j = LBound(arr, 2) To Int(k / 2)
            Dim temp: temp = arr(i, j)
            arr(i, j) = arr(i, LBound(arr, 2) + k - j)
            arr(i, LBound(arr, 2) + k - j) = temp
        Next
    Next
    WorkRng.Formula = arr
i=LBound(arr,1)到UBound(arr,1)的

'第一次向后搜索第一个有效条目
对于k=UBound(arr,2)到LBound(arr,2)步骤-1
如果不是iError(arr(i,k)),则如果arr(i,k)0和arr(i,k)“#NA”,则退出
下一个
'现在在有效区域进行交换
对于j=LBound(arr,2)到Int(k/2)
尺寸温度:温度=arr(i,j)
arr(i,j)=arr(i,LBound(arr,2)+k-j)
arr(i,LBound(arr,2)+k-j)=温度
下一个
下一个
工作公式=arr

假设要交换的值之后总是有一个零值

Sub swap()
Set r = Range("A1:F5")
For Each ro In r.Rows
    Set re = ro.Find(0, lookat:=xlWhole)
    co = re.Column
    For c = 1 To (co - 1) / 2
        a = ro.Cells(1, c)
        ro.Cells(1, c) = ro.Cells(1, co - c)
        ro.Cells(1, co - c) = a
    Next c
Next ro

End Sub

是否
#NA
和零始终位于右侧,或者它们可能出现在良好值之间?是的,它们始终位于右侧此代码还会将无效值移到左侧。我希望将无效值始终保留在右侧。我看到这段代码只保留了右边最后一行的0side@Florin这应该是因为您的一些
#NA
值实际上是字符串,我认为它们是错误的。我添加了一个检查,请尝试编辑的代码。但是顺便问一下,为什么要从
选择设置范围?您最好将其设置为显式范围。