我创建了一个数组,如果满足了条件,它就会被填充--到目前为止还不错。现在,需要将满足条件的值复制到不同的工作表中。
实际上,我不得不提出以下问题: 1.首先我无法获得范围内的值。2。如果满足条件,数组为每一行存储4列(范围)。如果我能够确定每个数组列并将其粘贴到一个特定的列中(在数组中,列是相邻的,但在目标表中则不是),这是否可能。
这是我到目前为止掌握的代码:
Sub determineDelta()
'Start determination and copy values to Delta sheet
Worksheets("Source").Activate
Range("A2").Select
numberOfRecords = Range(Selection, Selection.End(xlDown)).Rows.Count + 1
Dim myArray() As Variant
ReDim myArray(1 To 500) As Variant
Dim i, j, k As Integer
k = 0
ReDim myArray(numberOfRecords, k) As Variant
For i = 2 To numberOfRecords
If IsError(Application.Match(Cells(i, "A").Value, Sheets("SE16N").Range("A:A"), 0)) Then
For j = 2 To 6
myArray(j, k) = Cells(i, j).Value
Debug.Print myArray(j, k)
Next j
k = k + 1
ReDim Preserve myArray(numberOfRecords, k)
End If
Next i
Worksheets("Delta").Activate
Range("I2:I" & UBound(myArray)) = "FI"
Range("J2:J" & UBound(myArray)) = "A"
Range("M2").Resize(UBound(myArray), 1).Value = Application.Transpose(myArray)
End Sub我已经在网上看了两天了,包括卡佩森。在这篇关于阵列定径 (底部)的文章中,它声明#N/A。这就是我所拥有的!但我不想。:-)
我有一种感觉,我没有那么远,如果它只是一个相对较小的东西,我也不会感到惊讶。
我希望有人能帮我。
发布于 2017-10-11 16:22:17
一些建议补充说,不确定这是否是你所需要的。
Sub determineDelta()
'Start determination and copy values to Delta sheet
Worksheets("Source").Activate
Range("A2").Select
numberofrecords = Range(Selection, Selection.End(xlDown)).Rows.count + 1
Dim myArray() As Variant
'Unnecessary code
'ReDim myArray(1 To 500) As Variant
Dim i, j, k As Integer
k = 0
'ReDim myArray(numberOfRecords, k) As Variant
ReDim myArray(numberofrecords, 2 To 6) As Variant
For i = 2 To numberofrecords
'[1]
If Not IsError(Application.Match(Cells(i, "A").Value, Sheets("SE16N").Range("A:A"), 0)) Then
For j = 2 To 6
'[2]
'myArray(j, k) = Cells(i, j).Value
'Debug.Print myArray(j, k)
myArray(k, j) = Cells(i, j).Value
Next j
k = k + 1
'Since we already have a large enough array, no need to redim here
'ReDim Preserve myArray(numberofrecords, k)
End If
Next i
With Worksheets("Delta")
.Range("I2:I" & UBound(myArray)) = "FI"
.Range("J2:J" & UBound(myArray)) = "A"
'[3]
'.Range("M2").Resize(UBound(myArray), 1).Value = Application.Transpose(myArray)
.Range("M2").Resize(UBound(myArray), 5).Value = myArray
End With
End Sub1:如果下列公式有错误,IsError将返回TRUE。如果在工作表(“SE16N”)中找到单元格(I,"A"),则不会进入for循环。因此,myArray总是捕获不在工作表中的值(“SE16N”)。添加NOT运算符后,只能找到项才能加载到myArray中。但是,如果需要捕获未显示在工作表中的值(“SE16N”),则原点是正确的。
他说:你声称拥有一个大约一百行的数组是一种浪费,但你只访问了第二行到第六行,我将(j,k)改为(k,j),所以希望大多数数组都能被使用。
3:由于我交换了行和列,因此不再需要转换数组。在您的原始代码中,调整范围的大小将使您得到一个包含几行和只有一列的范围。因此,只有数组的第一列可以复制到工作表中,如果我错了,可以随意将5改为1。
如果需要将数据粘贴到分隔的列中,我会想到两个方法。1.可以在开始时将数据存储到不同的数组中。2.多次遍历数组,例如:
Set OriginCell = Range("M2")
Set OriginCell2 = Range("Q2")
For i = 0 to UBound(myArray)
OriginCell.Offset(i).Value = myArray(i, 2)
OriginCell2.Offset(i).Value = myArray(i, 3)
Next i发布于 2017-10-12 12:53:25
非常感谢。当我用您的注释更改上面的代码时,它可以工作。1是的,如果这个值不存在,它需要做一些事情。所以我没有改变那部分。我想我仍然需要读更多关于数组的内容,因为对我来说,这并不是百分之百清楚。3太棒了。不知道这是可能的。
是的,数组中的列需要转到各个列。我用你的代码试过了,但它做不到。我明白你想做的事了。然而,如果我这样插入它,它将使用当前的工作表,即来源,而数据需要在工作表三角洲中。
在设置范围时,我还包括了工作表功能,它的工作原理类似于魅力:
Set OriginCell = Worksheets("Delta).Range("M2")
Set OriginCell2 = Worksheets("Delta).Range("Q2")
For i = 0 to UBound(myArray)
OriginCell.Offset(i).Value = myArray(i, 2)
OriginCell2.Offset(i).Value = myArray(i, 3)
Next i数组中只有一些空行,但我可以自己管理。))谢谢!
https://stackoverflow.com/questions/46691480
复制相似问题