我将一个数组粘贴到一列中,问题是它将列中的一些单元格留空。如何清除列中的那些单元格?
这就是我所拥有的:
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
答案 0 :(得分:0)
您的示例代码存在一些问题。
.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
重新定位数据,然后将其重新填充到 Inicio 工作表中。