0

我需要使用公式合并单元格,以便仅在填充另一个选项卡上的单元格时才合并单元格。我有 2 个标签,每个标签的列数相同。我希望当填充Tab 2中的单元格A1-D1中的单元格1中合并,并且对于Tab 2中的D1值,将其输入到Tab 1中的新合并单元格中。这就是我所拥有的:

4

1 回答 1

0

Excel VBA 方法和函数(Excel 宏)概述

由于您想更改单元格,我不相信您可以使用公式(甚至不是用户定义的公式)。因此,我为您的问题编写了一个 excel vba 宏。

  • FirstRows():是起点。它循环超过 10 行并调用其他方法
  • CheckEmptyCellValues(curRow):此方法检查 tab2 中的空单元格(excel 中的表 2)
  • MergeCells(curRow) 将当前行作为一个数字(从 1 到最大行数的任何整数)并合并 Sheet 1(excel 中的第一个工作表)上第 1 列到第 4 列的单元格

完全工作的演示测试了 4 列和 10 行

Sub FirstRows()
   Sheets(1).Select
   For curRow = 2 To 11
      Merge = CheckEmptyCellValues(curRow)
      If Merge = 4 Then
        MergeCells (curRow)
        cellValue = Sheets(2).Cells(curRow, 4).Value
        Sheets(1).Cells(curRow, 1).Value = cellValue
      End If
   Next
 End Sub
  
Sub MergeCells(curRow)
    Sheets(1).Select
    Range(Cells(curRow, 1), Cells(curRow, 4)).MergeCells = True
End Sub

Function CheckEmptyCellValues(curRow)
    Merge = 0
    Sheets(2).Select
    For i = 1 To 4
        If Len(Cells(curRow, i).Value) > 0 Then
            Merge = Merge + 1
        End If
    Next
    CheckEmptyCellValues = Merge
End Function

您可以在下面看到结果。表 2 中的值已复制到表 1(第二张图像)。在工作表 1 中,如果在第一个图像(工作表 2)中每个单元格(从 a 列到 d 列),则合并一行中的单元格(在第 2 行中,从单元格 A2 到单元格 D2(A2-D2 现在只是一个单元格)连续有一个值。

选项卡 2 中的数据源(表 2) 工作表 1 上的合并单元格和复制值

修改后的代码中的错误

修改后的代码中有一些事情是不可能的或可能导致错误的理解

Function CheckEmptyCellValues(curColumn) 
  Merge = 0 
  Sheets(2).Select 
  For i = A To d 
    If Len(Cells(curColumn, 11).Value) > 0 Then 
        Merge = Merge + 1 
    End If 
  Next 
  CheckEmptyCellValues = Merge 
End Function
  1. 这条线For i = A To d 是不可能的。如果你想使用循环,你必须使用数字:For i = 1 To 4 这将从1 开始重复代码 4ForNext
  2. 这条线Cells(curColumn, 11).Value在技术上是正确的,但具有误导性。Excel 使用后面的第一个值(作为行索引,使用第二个值作为列索引。两个值都必须是一个数字: Cells(4,2).Value 从第 4 个开始返回 Cell 值。行和第二列(在 Excel Gui 单元格 B4 中)

尝试将此行更改For i = A To d为此For i = 1 To 4并查看是否返回所需的结果。

错误第 2 部分

在您的其他修改中,您有一些相同的错误:

  • 循环For curColumn = A to d需要数字而不是字母(除非 A 和 d 是一个用数字填充的变量,但根据您的代码示例,情况并非如此
  • 该行cellValue = Sheets(2).Cells(curColumn, d).Value具有相同的错误,如果 d 只是字母 d 而不是类似的东西d = 4,则不能在循环中使用它。

这是您评论中的代码:

 Sub FirstRows() 
  Sheets(1).Select 
    For curColumn = A To d 
       Merge = CheckEmptyCellValues(curColumn) 
       If Merge = d Then 
          MergeCells(curColumn) 
          cellValue = Sheets(2).Cells(curColumn, d).Value 
          Sheets(1).Cells(curColumn, d).Value = cellValue 
       End If
    Next 
  End 
  Sub Sub MergeCells(curColumn) 
     Sheets(1).Select 
     Range(Cells(curColumn, 1), Cells(curColumn, d)).MergeCells = True 
  End Sub

小心它没有运行。

于 2012-10-27T21:43:18.517 回答