如何仅在其他单元格填充时才能获得excel来合并单元格?

时间:2012-10-27 21:13:24

标签: excel excel-vba excel-formula vba

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

1 个答案:

答案 0 :(得分:0)

Excel VBA方法和功能(Excel宏)概述

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

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

使用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(第二图像)。在Sheet 1中,如果在第一个图像(表2中)每个单元格(从列a到列d),行中的单元格被合并(在行2中从单元格A2到单元格D2(A2-D2现在只是一个单元格))连续有一个值。

The data source from tab 2 (sheet 2) The merged cells and copied values on sheet 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这将重复ForNext之间的代码4次从1开始
  2. 此行Cells(curColumn, 11).Value技术正确但具有误导性。 Excel使用(之后的第一个值作为行索引,第二个值使用列索引。两个值都必须是数字:Cells(4,2).Value从第4个返回Cell值。行和第二列(在Excel Gui中,单元格B4)
  3. 尝试将此行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
    

    小心它没有运行。