gpt4 book ai didi

arrays - 在工作表中搜索相似行以组合在一起 Excel VBA

转载 作者:行者123 更新时间:2023-12-04 21:07:21 25 4
gpt4 key购买 nike

我有一个工作表,顶部列出了标题。我还在下面的行中列出了数据。此数据将保持组合为一行,并且不能更改相对于彼此的位置。但是,整排可以自由移动。每个标题描述了下面一行的数据类型。

我希望能够:

  • 告诉宏在哪一列中查找分组行。为方便起见,我们将其称为 Col D
  • 浏览整个工作表。
  • 移动相似的行,使它们组合在一起。***
  • 将组添加到选择

  • *注意,我还将在 Z 列中用整数标记组,以显示该组是一个组

    我遇到的问题是我的子 FindRow 的以下行:
    ActiveSheet.Range(curRange).Resize (resizeRng)

    Dubug 说 curRange = "Elevator"这是一个单元格的值,但不是一个范围,但我在上面定义了它:
    inRange = "A" & rngStart & ":" & Mid(alphabet, totHdrLngth, 1) & belowRowCount
    Set curRange = ActiveSheet.Range(inRange)

    作为引用,我解释了下面的整体代码:

    创建组 - 检查后续行是否在 中具有相同的值Col D .如果是这样,它将这个组标记为一个唯一的整数,并增加选择。如果没有调用 FindRow。

    查找行 - 在整个工作表中搜索行 (第 1 行) 中具有相同的值Col D .如果找到,调用 rowSwapper 交换找到的行 (第 2 行)与下面的行 第 1 行 .

    行交换器 - 函数接受两个行号,并交换它们。

    这是子 创建组 :
    Public Sub CreatGroup()
    Dim letterCount As Integer
    Dim letString, label, inRange As String
    Dim rowSelect, marker, rowStart, rowCount, rngStart, count As Long

    'Predefine necessary variables
    marker = 1
    rowCount = 2 'Start at row 2, excluding header
    rowStart = 2 'For range reference to create group
    belowRowCount = 3 'start below rowCount
    isGroup = False
    count = 1

    'Loop through each cell in column D to determine if consecutive metrics have the same value
    'If true, while loop sorts each series of consecutive metrics individually
    Do
    curCellVal = ActiveSheet.Range("D" & rowCount).Value 'Returns value rowCount(th) row of "Metric" column
    nextCellVal = ActiveSheet.Range("D" & belowRowCount).Value 'Returns the value of the row under rowCount
    marker = 1
    resizeRng = 0

    'Makes a cell selection while cell values in column 4 are equal
    If curCellVal = nextCellVal Then '<<<NECESSARY?
    isGroup = True 'Designates group has been found
    If resizeRng = 0 Then
    rngStart = rowCount
    End If
    'rowStart = ActiveSheet.Row

    'Resize selection to include cell with same metric name
    inRange = "A" & rngStart & ":" & Mid(alphabet, totHdrLngth, 1) & belowRowCount
    Set curRange = ActiveSheet.Range(inRange)

    'Establish place holder in col "Z" (empty) to track groups
    ActiveSheet.Range("Z" & rowCount).Value = marker
    ActiveSheet.Range("Z" & belowRowCount).Value = marker

    resizeRng = resizeRng + 1
    rowCount = rowCount + resizeRng
    belowRowCount = rowCount + 1

    ElseIf curCellVal <> nextCellVal Then 'And isGroup = True Then

    FindRow rowCount

    'Re-establish rowCount to account for cells that may have been added to group
    rowCount = rowCount + resizeRng
    belowRowCount = rowCount + 1
    Else
    rowCount = rowCount + 1
    belowRowCount = rowCount + 1
    End If

    'to prevent subsequent groups of metrics from being labeled together
    marker = marker + 1

    isGroup = False
    Loop While rowCount <= totCount

    End Sub

    此外,作为额外引用,这些潜艇是此处描述的更大程序的一部分:
    Sorting Groups of Rows Excel VBA Macro

    让我知道你的想法...

    最佳答案

    如果你想得到单元格范围地址,你只需要说rng.Address。只需指定您想要 rng 与说 rng.Value (本质上)相同

    至于线路:

    ActiveSheet.Range(curRange).Resize (resizeRng)

    你可能想试试
    ActiveSheet.Range(curRange).Cells.Resize (resizeRng)

    昨晚我在自己的一个小项目上玩弄一些格式,遇到了类似的错误。

    希望有帮助。

    关于arrays - 在工作表中搜索相似行以组合在一起 Excel VBA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7044033/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com