首页 > 解决方案 > 过滤表格列表以仅包含有用的行

问题描述

鉴于数据缺乏优雅

记录表连续许多行,每个条目都有自己的一组相同的标题

在此处输入图像描述

我希望只从第 7 行、第 14 行等中提取数据,然后将数据填充到一个简单的表中以在“协议摘要”表单上使用,然后根据其中的数据将它们全部按字母数字顺序排序A 列,因此它们都按“事件类型”分组。

因为可能在“事件类型”标题下的潜在数据可能会有很大差异(通常具有 [数字 1-32/字母/数字 1-30] 的格式,但也可以是全字母,有几千种可能性,我认为过滤其他行可能会更容易,因为它们不会改变。我很想重新设计表格,但不幸的是它不是我的表格,所以我必须使用我得到的东西。

谢谢你的时间。

标签: excelvbavlookup

解决方案


这将遍历您的工作表直到最后使用的行,从第 7 行开始,每次迭代步进 7 行。

在每次迭代中,行中的每个单元格都被写入一个数组,然后将其写入另一个表以进行排序(但是您想这样做)。

此代码是示例,可能无法通过复制/粘贴来工作。

  • 我已经在Sheet1代码模块中写了这个,所以Me参考ThisWorkbook.Sheets("Sheet1").
  • 我是从一个空白工作簿中制作的,并且没有重命名任何工作表,因此您需要对任何工作表引用进行调整以匹配您适当的工作表名称。
  • 该代码将仅引用 A、B 和 C 列TargetRow(我只测试了 3 列数据,因为我不知道您的工作范围)。我将在代码块之后引用要更新的内容以扩展它。
  • 目前,该数组被放回Sheet2从 cell 开始A2。这是假设第 1 行包含表头,因为这会将数据直接写入表格式。当然,如果您想更改数据写入的位置,请更改写入的单元格(将数组写入工作表时,您只需定义写入范围的左上角单元格,Excel 会根据关于数组的大小和维度)。

Sub WriteEverySeventhRowToAnotherSheet()

Dim SeventhRowCount As Long
Dim myArray() As Variant
Dim lastrow As Long
Dim TargetCell As Variant
Dim TargetRow As Range
Dim ArrFirstDimension As Long
Dim ArrSecondDimension As Long

lastrow = Me.Range("A" & Me.Rows.Count).End(xlUp).Row
ReDim myArray(1 To lastrow / 7, 1 To 3)
ArrFirstDimension = 1
ArrSecondDimension = 1

'------------------Loop over every 7th row and enter row data to array---------------
For SeventhRowCount = 7 To lastrow Step 7
    Set TargetRow = Me.Range("A" & SeventhRowCount & ":C" & SeventhRowCount)
    For Each TargetCell In TargetRow
        If Not ArrSecondDimension > UBound(myArray) Then
            myArray(ArrFirstDimension, ArrSecondDimension) = TargetCell
            'Debug.Print TargetCell
            ArrSecondDimension = ArrSecondDimension + 1
        End If
    Next TargetCell
    ArrFirstDimension = ArrFirstDimension + 1
    ArrSecondDimension = 1
    Set TargetRow = Nothing
Next SeventhRowCount

'---------------------Write array to another sheet------------------
Dim Destination As Range
Set Destination = ThisWorkbook.Sheets("Sheet2").Range("A2")
Destination.Resize(UBound(myArray, 1), UBound(myArray, 2)).Value = myArray

End Sub

要扩展循环将写入数组的列数,请将以下实例更改为C正确的列字母(在下面的行中,范围设置为从 A 列到 C 列):

  • Set TargetRow = Me.Range("A" & SeventhRowCount & ":C" & SeventhRowCount)

还要更改数组的第二维以匹配上面设置的列数(即 E 列 = 5 和 L 列 = 13 等) - 您需要3用正确的数字替换数字。

  • ReDim myArray(1 To lastrow / 7, 1 To 3)

推荐阅读