Vba 如何在Excel中合并具有相同数据的相邻列?
我发现需要合并相邻行。我想编辑它以合并相邻的列而不是行 原始宏(来自上面的链接)在左侧生成结果。我编辑的宏生成右侧的结果 我尝试在代码中切换行/列的所有引用,但它只是在第二次或第三次出现后合并列。我的循环有问题吗Vba 如何在Excel中合并具有相同数据的相邻列?,vba,excel,Vba,Excel,我发现需要合并相邻行。我想编辑它以合并相邻的列而不是行 原始宏(来自上面的链接)在左侧生成结果。我编辑的宏生成右侧的结果 我尝试在代码中切换行/列的所有引用,但它只是在第二次或第三次出现后合并列。我的循环有问题吗 Sub MergeSimilarCol() 'Updateby20131127 Dim Rng As Range, xCell As Range 'Dim xRows As Integer Dim xCols As Integer xTitleId = "MergeSimilarCo
Sub MergeSimilarCol()
'Updateby20131127
Dim Rng As Range, xCell As Range
'Dim xRows As Integer
Dim xCols As Integer
xTitleId = "MergeSimilarCol"
Set WorkRng = Application.Selection
Set WorkRng = Application.InputBox("Range", xTitleId, WorkRng.Address, Type:=8)
Application.ScreenUpdating = False
Application.DisplayAlerts = False
'xRows = WorkRng.Rows.Count
xCols = WorkRng.Columns.Count
'For Each Rng In WorkRng.Columns
'For i = 1 To xRows - 1
'For j = i + 1 To xRows
'If Rng.Cells(i, 1).Value <> Rng.Cells(j, 1).Value Then
'Exit For
'End If
'Next
'WorkRng.Parent.Range(Rng.Cells(i, 1), Rng.Cells(j - 1, 1)).Merge
'i = j - 1
'Next
'Next
For Each Rng In WorkRng.Rows
For i = 1 To xCols - 1
For j = i + 1 To xCols
If Rng.Cells(i, 1).Value <> Rng.Cells(j, 1).Value Then
Exit For
End If
Next
WorkRng.Parent.Range(Rng.Cells(1, i), Rng.Cells(1, j - 1)).Merge
i = j - 1
Next
Next
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Sub-mergeSimilacol()
'UpdateBy2013 1127
Dim Rng As范围,xCell As范围
'将X行设置为整数
作为整数的Dim xCols
xTitleId=“mergesimilacol”
Set WorkRng=Application.Selection
设置WorkRng=Application.InputBox(“范围”,xTitleId,WorkRng.Address,类型:=8)
Application.ScreenUpdating=False
Application.DisplayAlerts=False
'xRows=WorkRng.Rows.Count
xCols=WorkRng.Columns.Count
'对于WorkRng.列中的每个Rng
'对于i=1到x行-1
'对于j=i+1到x行
'如果Rng.Cells(i,1).值Rng.Cells(j,1).值,则
"退出
"完"
”“接着呢
'WorkRng.Parent.Range(Rng.Cells(i,1),Rng.Cells(j-1,1)).Merge
'i=j-1
”“接着呢
”“接着呢
对于WorkRng.行中的每个Rng
对于i=1到xCols-1
对于j=i+1到xCols
如果Rng.Cells(i,1).值Rng.Cells(j,1).值,则
退出
如果结束
下一个
WorkRng.Parent.Range(Rng.Cells(1,i),Rng.Cells(1,j-1)).Merge
i=j-1
下一个
下一个
Application.DisplayAlerts=True
Application.ScreenUpdating=True
端接头
这里有一个可能更有意义的替代方案。合并后的单元格格式由您决定
Option Explicit
Sub mergeWeeks()
Dim lc As Long, nc As Long, cr As Long, rng As Range
Application.DisplayAlerts = False
With Worksheets("sheet2")
For cr = 1 To 2
lc = Application.Match("zzz", .Rows(cr))
Set rng = .Cells(cr, 1)
Do While rng.Column < lc
nc = Application.Match(rng.Value & "z", .Rows(cr))
rng.Resize(1, nc - rng.Column + 1).Merge
Set rng = rng.Offset(0, 1)
Loop
Next cr
End With
Application.DisplayAlerts = True
End Sub
选项显式
分周()
尺寸lc为长,nc为长,cr为长,rng为范围
Application.DisplayAlerts=False
带工作表(“表2”)
对于cr=1到2
lc=Application.Match(“zzz”,.Rows(cr))
设置rng=.Cells(cr,1)
当rng.列
这里有一个可能更有意义的替代方案。合并后的单元格格式由您决定
Option Explicit
Sub mergeWeeks()
Dim lc As Long, nc As Long, cr As Long, rng As Range
Application.DisplayAlerts = False
With Worksheets("sheet2")
For cr = 1 To 2
lc = Application.Match("zzz", .Rows(cr))
Set rng = .Cells(cr, 1)
Do While rng.Column < lc
nc = Application.Match(rng.Value & "z", .Rows(cr))
rng.Resize(1, nc - rng.Column + 1).Merge
Set rng = rng.Offset(0, 1)
Loop
Next cr
End With
Application.DisplayAlerts = True
End Sub
选项显式
分周()
尺寸lc为长,nc为长,cr为长,rng为范围
Application.DisplayAlerts=False
带工作表(“表2”)
对于cr=1到2
lc=Application.Match(“zzz”,.Rows(cr))
设置rng=.Cells(cr,1)
当rng.列
和If Rng.Cells(i,1).Value Rng.Cells(j,1).Value
-i
和j
应该是.Cells
的第二列参数。这与宏无关,但合并单元格通常会出现问题。您可能想考虑使用<代码>格式/对齐/水平/中心跨选择< /代码>。用<代码> > RNG。单元格(i,1)。值rng.Cype(j,1)。值< /代码> ->代码> i < /> >和<代码> j>代码>应该是<代码>的列(第二)参数。Cys< /Calp>。这与宏无关,但合并单元格通常是一条道路。您可能想考虑使用<代码>格式/对齐/水平/中心跨选择< /代码>。