【问题标题】:Move merged cell using VBA使用 VBA 移动合并的单元格
【发布时间】:2017-11-27 09:27:54
【问题描述】:

我是 VBA 的新手,所以我发现自己有点不知所措。

我正在尝试根据另一个单元格中的特定值向上移动合并的单元格。

单元格 D4 包含一个介于 1 和 4 之间的值,它取决于一个公式。

当此值等于 1 时,我希望合并的单元格 BQ52:BX64 向上移动到第 40 行,而不是替换单元格,而是向下移动它们。

当值介于 2 和 4 之间时,我希望单元格移回其原始位置。

我尝试录制插入复制单元格的宏,但我不确定如何在 VBA 中对此进行编码以及如何避免循环,因为我正在删除录制中的单元格。

工作表的名称是“打印布局”

非常感谢任何帮助!

【问题讨论】:

  • 您能否发布您迄今为止尝试过的代码以及原始状态/理想结果的图片?

标签: vba excel


【解决方案1】:
Sub random()

    If Range("D4").Value = 1 Then

    Range("BQ52:BX64").Cut
    Range("BQ40").Select
    Selection.Insert Shift:=xlDown

    End If
     End Sub

如果d4 = 1,这会将合并的单元格放在第40行,否则合并的单元格将保留在那里。

【讨论】:

    【解决方案2】:

    如果您可以在 VBA 中将工作表命名为属性窗口中的 Print_Layout 之类的名称,这可能有助于避免将来出现问题。然后,您可以使用以下代码:

    Sub MoveMergedCells()
    
      Print_Layout.Select
          If Range("D4") = "1" Then
              Range("BQ52:BX64").Cut
              Range("BQ40").Insert Shift:=xlDown
          End If
    
    End Sub
    

    您还可以为值 2-4 添加 If/Then 函数。希望这会有所帮助:)

    【讨论】:

      【解决方案3】:

      根据@L Johnstone 给出的答案,完整的代码可以如下:

      Sub MoveMergedCells()
      
       Print_Layout.Select
            If Range("D4") = "1" Then
                Range("BQ52:BX64").Cut
                Range("BQ40").Insert Shift:=xlDown
            Else If Range("D4") = "2" Then
                Range("BQ40:BX52").Cut
                Range("BQ52").Insert Shift:-xlDown
            Else If Range("D4") = "3" Then
                Range("BQ40:BX52").Cut
                Range("BQ52").Insert Shift:-xlDown
            Else If Range("D4") = "4" Then
                Range("BQ40:BX52").Cut
                Range("BQ52").Insert Shift:-xlDown
            End If
      End Sub
      

      我已经尽力回答这个问题,如果有任何遗漏,我深表歉意。 谢谢!!!

      【讨论】: