Excel 将数据存储在数组中,隐藏一些行,并将数据写回非隐藏行
在名为“EIRP LL”的工作表中,范围L6:O13包含数据。有时,第7-13行由于与此数据无关的原因而被隐藏。L6:O13范围内的数据将保持不隐藏状态,因此L6:O13中的数据将复制到名为ConfigDataArray的数组中。然后清除L6:O13范围。所有这些代码都有效 然后,困难开始了。存储在ConfigDataArray中的数据必须写入从第6行开始的非隐藏行,而第6行恰好总是未隐藏的。我试图通过切片数组的行并使用For循环迭代这些行来实现这一点。但它不起作用。只有数组数据的第一行和第三行被写回工作表,第三行被写回隐藏行。以j=6开头,以Next结尾的代码显然有故障。非常感谢您的建议Excel 将数据存储在数组中,隐藏一些行,并将数据写回非隐藏行,excel,vba,Excel,Vba,在名为“EIRP LL”的工作表中,范围L6:O13包含数据。有时,第7-13行由于与此数据无关的原因而被隐藏。L6:O13范围内的数据将保持不隐藏状态,因此L6:O13中的数据将复制到名为ConfigDataArray的数组中。然后清除L6:O13范围。所有这些代码都有效 然后,困难开始了。存储在ConfigDataArray中的数据必须写入从第6行开始的非隐藏行,而第6行恰好总是未隐藏的。我试图通过切片数组的行并使用For循环迭代这些行来实现这一点。但它不起作用。只有数组数据的第一行和第三行
Sub HideLLRows()
'Hide blank rows in EIRP LL
'Where blank row is defined as no data in Col B for the given row
Application.ScreenUpdating = False
Dim ConfigDataArray As Variant
Set EIRPLL = Sheets("EIRP LL")
LastLLRow = EIRPLL.UsedRange.Rows.Count
'Put the metadata into an 8Row x 4Col array for safe keeping
ConfigDataArray = Range("L6:O13").Value
'Clear the metadata cells
Range("L6:O13").Clear
'Hide the blank rows
For i = 6 To LastLLRow
If EIRPLL.Range("B" & i) = "" Then
EIRPLL.Rows(i).Hidden = Not EIRPLL.Rows(i).Hidden
End If
Next
'Slice the 8 array rows and put into the first 8 non-hidden rows
'beginning on L6:O6 (which is always non-hidden)
j = 6
For k = 1 To 8
If Rows(j).Hidden = False Then
If k < 9 Then
EIRPLL.Range("L" & k + 5) = Application.Index(ConfigDataArray, k, 1)
EIRPLL.Range("M" & k + 5) = Application.Index(ConfigDataArray, k, 2)
EIRPLL.Range("N" & k + 5) = Application.Index(ConfigDataArray, k, 3)
EIRPLL.Range("O" & k + 5) = Application.Index(ConfigDataArray, k, 4)
End If
End If
k = k + 1
j = j + 1
Next
Application.ScreenUpdating = True
End Sub
子隐藏行()
'在EIRP LL中隐藏空白行
'其中,空白行定义为给定行的B列中没有数据
Application.ScreenUpdating=False
Dim ConfigDataArray作为变量
设置EIRPLL=图纸(“EIRPLL”)
LastLLRow=EIRPLL.UsedRange.Rows.Count
'将元数据放入一个8Row x 4Col数组中以便安全保存
ConfigDataArray=范围(“L6:O13”)。值
'清除元数据单元格
范围(“L6:O13”)。清除
隐藏空白行
对于i=6到最后一行
如果EIRPLL.Range(“B”&i)=“那么
EIRPLL.Rows(i).Hidden=不是EIRPLL.Rows(i).Hidden
如果结束
下一个
'切片8个数组行并放入前8个非隐藏行
'从L6:O6开始(始终为非隐藏)
j=6
对于k=1到8
如果行(j).Hidden=False,则
如果k<9,那么
EIRPLL.Range(“L”&k+5)=应用程序索引(ConfigDataArray,k,1)
EIRPLL.Range(“M”&k+5)=Application.Index(ConfigDataArray,k,2)
EIRPLL.Range(“N”&k+5)=应用程序索引(ConfigDataArray,k,3)
EIRPLL.Range(“O”&k+5)=Application.Index(ConfigDataArray,k,4)
如果结束
如果结束
k=k+1
j=j+1
下一个
Application.ScreenUpdating=True
端接头
子隐藏行()
Dim配置数据阵列作为变量i、k、j
将EIRPLL设置为工作表,最后一行
设置EIRPLL=图纸(“EIRPLL”)
LastLLRow=EIRPLL.UsedRange.Rows.Count
Application.ScreenUpdating=False
'清除元数据单元格
具有EIRPLL.范围(“L6:O13”)
ConfigDataArray=.Value
清楚的
以
隐藏空白行
对于i=6到最后一行
如果EIRPLL.Range(“B”&i)=“那么
EIRPLL.Rows(i).Hidden=True
如果结束
下一个
k=1
j=6
请注意,您描述的这两部分似乎存在冲突:“有时,第6-13行由于与此数据无关的原因而被隐藏”和“必须写入从第6行开始的非隐藏行,这恰好总是被隐藏”是!您的Do While解决了问题。对不起,我没有及时回复。这是我第一次涉足数组,这对我很有帮助。非常感谢。
Sub HideLLRows()
Dim ConfigDataArray As Variant, i, k, j
Dim EIRPLL As Worksheet, LastLLRow
Set EIRPLL = Sheets("EIRP LL")
LastLLRow = EIRPLL.UsedRange.Rows.Count
Application.ScreenUpdating = False
'Clear the metadata cells
With EIRPLL.Range("L6:O13")
ConfigDataArray = .Value
.Clear
End With
'Hide the blank rows
For i = 6 To LastLLRow
If EIRPLL.Range("B" & i) = "" Then
EIRPLL.Rows(i).Hidden = True
End If
Next
k = 1
j = 6
Do While k <= 8
With EIRPLL.Rows(j)
If Not .Hidden Then
.Cells(12).Value = ConfigDataArray(k, 1)
.Cells(13).Value = ConfigDataArray(k, 2)
.Cells(14).Value = ConfigDataArray(k, 3)
.Cells(15).Value = ConfigDataArray(k, 4)
k = k + 1
End If
End With
j = j + 1
Loop
Application.ScreenUpdating = True
End Sub