Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 如何在Excel中合并具有相同数据的相邻列?_Vba_Excel - Fatal编程技术网

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>。这与宏无关,但合并单元格通常是一条道路。您可能想考虑使用<代码>格式/对齐/水平/中心跨选择< /代码>。