Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 将数据存储在数组中,隐藏一些行,并将数据写回非隐藏行_Excel_Vba - Fatal编程技术网

Excel 将数据存储在数组中,隐藏一些行,并将数据写回非隐藏行

Excel 将数据存储在数组中,隐藏一些行,并将数据写回非隐藏行,excel,vba,Excel,Vba,在名为“EIRP LL”的工作表中,范围L6:O13包含数据。有时,第7-13行由于与此数据无关的原因而被隐藏。L6:O13范围内的数据将保持不隐藏状态,因此L6:O13中的数据将复制到名为ConfigDataArray的数组中。然后清除L6:O13范围。所有这些代码都有效 然后,困难开始了。存储在ConfigDataArray中的数据必须写入从第6行开始的非隐藏行,而第6行恰好总是未隐藏的。我试图通过切片数组的行并使用For循环迭代这些行来实现这一点。但它不起作用。只有数组数据的第一行和第三行

在名为“EIRP LL”的工作表中,范围L6:O13包含数据。有时,第7-13行由于与此数据无关的原因而被隐藏。L6:O13范围内的数据将保持不隐藏状态,因此L6:O13中的数据将复制到名为ConfigDataArray的数组中。然后清除L6:O13范围。所有这些代码都有效

然后,困难开始了。存储在ConfigDataArray中的数据必须写入从第6行开始的非隐藏行,而第6行恰好总是未隐藏的。我试图通过切片数组的行并使用For循环迭代这些行来实现这一点。但它不起作用。只有数组数据的第一行和第三行被写回工作表,第三行被写回隐藏行。以j=6开头,以Next结尾的代码显然有故障。非常感谢您的建议

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