我需要使用公式合并单元格,以便仅在填充另一个选项卡上的单元格时才合并单元格。我有 2 个标签,每个标签的列数相同。我希望当填充Tab 2中的单元格A1-D1中的单元格1中合并,并且对于Tab 2中的D1值,将其输入到Tab 1中的新合并单元格中。这就是我所拥有的:
问问题
1463 次
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 现在只是一个单元格)连续有一个值。
修改后的代码中的错误
修改后的代码中有一些事情是不可能的或可能导致错误的理解
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
- 这条线
For i = A To d
是不可能的。如果你想使用循环,你必须使用数字:For i = 1 To 4
这将从1 开始重复代码 4For
次Next
- 这条线
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 回答