【问题标题】:VBA - System generated report amendmentsVBA - 系统生成的报告修正
【发布时间】:2015-02-27 12:09:29
【问题描述】:

我在创建将修改系统生成的报告的宏时遇到了一些问题。

我希望能够将我的系统生成的报告粘贴到 excel 中,并通过按下一个按钮(宏),它将选择我的数据的每一行并将数字复制到另一个选项卡,然后我希望它删除这些交替行。

然后它会转到另一个选项卡并提起这些数字并将它们粘贴到外部列中。

我曾尝试通过录制宏来做到这一点,但我不确定如何让它选择不同范围的数据。

任何人都可以提供任何帮助将不胜感激。

宝拉

【问题讨论】:

  • 这样做的目的是什么,它们是重复的吗?
  • 不,它们不会复制我正在运行初始报告的系统,将点击次数放在一行中,并将总数放在下面,但是我被要求以并排格式提供

标签: excel report vba


【解决方案1】:

以下代码应该可以满足您的需求。它检查您的范围中的第一行是奇数还是偶数,这决定了它移动到哪一列(“系列”中的第一行,有值,移动到第一列,第二行,总计,移动到第二列)。

如果有帮助,请告诉我。

Sub MoveAlternatingToNewTab()
    Dim wsOrigin As Worksheet
    Dim wsDestination As Worksheet
    Dim rngOrigin As Range
    Dim isFIRST_ROW_ODD As Integer
    Dim cel As Range
    Dim nLastRow As Long

    Set wsOrigin = Worksheets("Sheet1")
    Set wsDestination = Worksheets("Sheet2")

    Set rngOrigin = wsOrigin.Range("A1:A12") 'Change this to suit your needs

    'Below variable stores whether the first row of the rngOrigin variable
    'Is odd or even. Used to know which column the data should be move to
    isFIRST_ROW_ODD = rngOrigin.Rows(1).Row Mod 2

    For Each cel In rngOrigin

        If cel.Row Mod 2 = isFIRST_ROW_ODD Then
        nLastRow = wsDestination.Cells(Rows.Count, 1).End(xlUp).Row + 1
            wsDestination.Cells(nLastRow, 1) = cel.Value
        Else
            wsDestination.Cells(nLastRow, 2) = cel.Value
        End If
    Next cel
End Sub

【讨论】:

  • 这很好用,谢谢!如果我想通过单独的宏删除中间行,我可以使用相同类型的代码吗?但反转它只是为了删除?
  • @Paula,您能否说明哪些行代表您要删除的“中间”行?
  • @Paula 我将在下面留下另一个答案,详细说明如何删除交替行。
【解决方案2】:

[注意]回答 cmets 中有关删除备用行的后续问题:

要删除交替的行,我更喜欢从数据集的底部开始并向上工作。这样做可以防止工作表中的变化(由于删除)影响循环。首先,找到要删除的最后一行,然后向后循环,步长为 2。

Sub DeleteAlternateRows()
    Dim nLastRow As Long

    nLastRow = Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row

    If nLastRow Mod 2 = 0 Then
        nLastRow = nLastRow - 1
    End If

    For i = nLastRow To 1 Step -2
        Worksheets("Sheet1").Rows(i).Delete
    Next i
End Sub

【讨论】:

  • 这就是我要寻找的唯一问题是它删除了错误的替代项...我尝试将其交换为 For i = nLastRow To 1 Step -1 但这只会删除所有内容:S
  • @Paula 我们绝对不想删除所有内容,哈哈! LoopStep 部分表示增量的大小。 Step - 2 告诉我们的代码移动到每一行,而不是每一行。我们需要告诉我们的代码从哪一行(在底部)开始。我们是否有任何关于哪些行将被删除的详细信息(例如,是每个奇数行还是偶数行;或者这些行是否包含唯一标识符或数据类型)?使用这些信息,我们可以构建一个更健壮的子程序。
  • 不,肯定不想要那个大声笑... o 对,这解释了为什么它不能与 -1 愚蠢的我一起工作,而且我需要删除每个 ODD 行
  • @Paula 我刚刚在上面的答案中编辑了我的代码。现在,代码标识了数据集中的最后一行。接下来测试最后一行是偶数行还是奇数行。如果是偶数,则减一(移动到奇数行),然后开始循环。如果一切顺利,请告诉我。
  • 你是一个完整的传奇!非常感谢,它运行良好,绝对可以节省我整理这些信息的时间
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-02
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 2011-04-21
相关资源
最近更新 更多