Arrays 在VBA中更改数组
我想将值交换到一个多维数组中,每行的值不是#N/a或不是0。因此,输入表位于电子表格上,包含以下数字,问题是我无法按照自己的意愿交换它们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
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
值实际上是字符串,我认为它们是错误的。我添加了一个检查,请尝试编辑的代码。但是顺便问一下,为什么要从选择设置范围?您最好将其设置为显式范围。