我在列中粘贴了一个数组,问题是它使列中的一些单元格为空。如何删除列中的那些单元格?
这就是我所拥有的:
Private Sub Worksheet_Change(ByVal Target As Range)
Worksheets("Info").Range("A1").Select
Dim i As Integer
Dim iLastRow As Long
iLastRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, "A").End(xlUp).Row
Dim arrmatrix() As String
ReDim arrmatrix(1 To iLastRow, 1 To 1)
For i = 1 To iLastRow
Range("A2").Cells(i, 1).Select
If Selection.Offset(0, 11) = "Pi emitida" Then
arrmatrix(i, 1) = Range("A2").Cells(i, 1).Value
End If
Next i
Worksheets("Inicio").Range("G4:G1000000").ClearContents
Worksheets("Inicio").Range("G4").Resize(UBound(arrmatrix, 1)).Value = arrmatrix()
end sub
最佳答案
您的示例代码存在一些问题。
.Activate
Worksheet_Change
中的另一个工作表事件宏。 Worksheet_Change
中使用它。事件宏。照原样,只要添加/修改/删除工作表中任何位置的值,它就会运行。这听起来有点矫枉过正,因为确定结果的仅有两列是 A 列和 L 列。此修改不依赖于在处理它们之前选择或激活工作表。 arrmatrix 数组会根据需要进行扩展,因此您最终不会在数组中得到空白值。
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A:A, L:L")) Is Nothing Then
On Error GoTo Fìn
Application.EnableEvents = False
Dim i As Long, n As Long
Dim arrmatrix As Variant
ReDim arrmatrix(1 To 1, 1 To 1)
For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
If Cells(i, 12).Value = "Pi emitida" Then
n = n + 1
ReDim Preserve arrmatrix(1 To 1, 1 To n)
arrmatrix(1, n) = Cells(i, 1).Value
End If
Next i
With Worksheets("Inicio")
.Range("G4:G" & Rows.Count).ClearContents
.Range("G4").Resize(UBound(arrmatrix, 2), 1) = Application.Transpose(arrmatrix)
End With
End If
Fìn:
Application.EnableEvents = True
End Sub
这只会在 A 列或 L 列中的值被添加/更改/删除时运行。
由于我一直在扩展和填充最后一个等级,因此我使用了
Application.Transpose
在我将数据塞回 之前重新定向数据初始 工作表。
关于arrays - 删除数组中的空单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29930523/