【问题标题】:Merge columns where cells have same values, excluding "0"s [closed]合并单元格具有相同值的列,不包括“0”[关闭]
【发布时间】:2017-10-29 06:07:37
【问题描述】:

我见过很多关于合并的问题,但我无法(以我的入门级能力)回答这个特定问题,我将永远感谢您的专业知识和帮助!!!

我希望将具有相同值的不同单元格组合并为特定范围。

以下是输入和期望结果的示例。我已将文件格式化为不显示“0”和“否”,但实际描述(替换为 50% 折扣)很长,无法在单个单元格中查看,因此需要合并单元格以更好地显示信息。还有多家商店每周都会添加新商店,因此我想避免手动合并单元格。

输入

Month                   January February    March     April       May
Store 1 Campaign Period   no      yes       yes       yes         no
Campaign Details          0       50% off   50% off   50% off     0
Store 2 Campaign Period   no      no        no        yes        yes
Campaign Details          0       0         0    spring fling   spring fling

期望的输出

Month                   January February    March   April     May
Store 1 Campaign Period   no     yes         yes    yes       no
Campaign Details          0            50% off                0
Store 2 Campaign Period   no     no          no     yes       yes
Campaign Details          0      0            0     spring fling    

【问题讨论】:

  • 嗨,欢迎来到 SO。为了获得帮助,您需要展示您编写宏的个人尝试。基本上,您将跨越表格中的单元格,并且每当一组相邻单元格(我猜在同一行上)具有相同的“描述文本”时,合并它们。开始这个或发布您当前的代码(如果您已经这样做了),我们很乐意帮助您完成它。
  • 感谢您的反馈!当我输入以下代码时,我收到“内存不足”的错误
  • 对不起,这里是:Sub sbMergeColumns() For i = 16 To Cells(Rows.Count, 1).End(xlUp).Row If Range("di:Bdi") "0 " Or Range("di:Bdi") "" Then GoTo 16 16 Range("di:Bdi").Merge (True) Next End Sub

标签: vba excel if-statement merge


【解决方案1】:

这应该可以帮助您入门。假设数据位于“Sheet1”中。它将合并“A”列中标有“广告系列详细信息”的行中的单元格。合并在具有相同值的相邻行单元格上执行 - 至少两个具有相同值的相邻单元格将被合并。

Option Explicit

Sub MergeSameDetails()
  Dim sht As Worksheet
  Set sht = Worksheets("Sheet1")

  Application.DisplayAlerts = False

  With sht
    Dim lastrow As Integer, i As Integer, j As Integer, cnt As Integer
    Dim val As Variant
    lastrow = .Cells(.Rows.Count, "A").End(xlUp).Row
    For i = 1 To lastrow
      If .Cells(i, "A").Value = "Campaign Details" Then
        cnt = 1
        val = .Cells(i, 2).Value
        For j = 3 To 7
          If val = .Cells(i, j).Value Then
            cnt = cnt + 1
          Else
            If cnt >= 2 And val <> "0" Then
              .Range(Cells(i, j - cnt), Cells(i, j - 1)).Merge
              .Cells(i, j - cnt).HorizontalAlignment = xlCenter
            End If
            cnt = 1
            val = .Cells(i, j).Value
          End If
        Next
      End If
    Next
  End With

  Application.DisplayAlerts = True

 End Sub

【讨论】:

  • 感谢您的快速回复!我已经尝试将“广告系列详细信息”的此代码编辑为从“C”列开始,并将 j 范围调整为来自“D:BD”,但收到错误“下标超出范围”。然后我编辑了我的 Excel 表,使“活动详细信息”在“A”列中,但仍然收到相同的错误。你能帮忙吗?
  • 啊啊啊啊没关系!我玩了一下它并调整了列设置,它起作用了!非常感谢!
猜你喜欢
  • 1970-01-01
  • 2022-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-28
相关资源
最近更新 更多