VBA循环合并特定范围内的单元格

时间:2018-04-03 12:51:16

标签: excel vba excel-vba loops merge

我有一个指定的范围,想要合并每行的单元格A-D。我不确定哪个循环是最好的,并且已经弄乱了不同的循环并且我遇到的问题是对象定义的错误或将整个范围合并到一个单元格中。

Sub Merge()

Dim EndRangeRE As Range
Dim EndRangeNRE As Range
Dim rngall As Range
Dim StartRangeNRE As Range
Dim StartRangeRE As Range
Dim looprng As Range

Sheets("{Activity} 7300-1input template").Activate
Set rngall = Sheets("{Activity} 7300-1input template").UsedRange
Set EndRangeRE = rngall.Find(What:="10. Other Costs", LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=True)
Set EndRangeNRE = rngall.Find(What:="Recurring Costs", LookIn:=xlValues,LookAt:=xlWhole, MatchCase:=True)
Set StartRangeNRE = rngall.Find(What:="Non-Recurring Costs",LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=True)
Set StartRangeRE = rngall.Find(What:="Recurring Costs", LookIn:=xlValues,LookAt:=xlWhole, MatchCase:=True)
Set looprng = Sheets("{Activity} 7300-1input template").Range(StartRangeNRE, EndRangeRE)

For Each Row In looprng
    Cells(0, 4).Merge
Next Row

End Sub

这个给了我一个错误,我不知道如何指定每行,A:D合并和下一行。它会是一个循环吗?我非常乐意采用最简单的方法来实现这一目标,因此欢迎提出建议(我在编码方面没有太多经验,所以有任何东西可以帮助我学习!)。谢谢!

4 个答案:

答案 0 :(得分:2)

这会合并 A D 100行:

Sub ytrewq()
    For i = 1 To 100
        Range("A" & i & ":D" & i).MergeCells = True
    Next i
End Sub

修改#1:

Sub ytrewq()
    For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row
        Range("A" & i & ":D" & i).MergeCells = True
    Next i
End Sub

答案 1 :(得分:2)

也许你在此之后:

Option Explicit

Sub Merge()
    Dim EndRangeRE As Range, StartRangeNRE As Range
    Dim myRow As Range

    With Sheets("{Activity} 7300-1input template")
        With .UsedRange
            Set EndRangeRE = .Find(What:="10. Other Costs", LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=True)
            Set StartRangeNRE = .Find(What:="Non-Recurring Costs", LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=True)
        End With

        For Each myRow In .Range(StartRangeNRE, EndRangeRE).Rows
            .Rows(myRow.row).Resize(, 4).Merge
        Next
    End With
End Sub

我摆脱了未使用的变量并使用一些With-End With块来引用同一对象的多个引用

答案 2 :(得分:1)

尝试此代码:

 Sub test()
        'Get The Last non empty row
        lastRow = ThisWorkbook.Sheets("YourSheetName").Cells(Rows.Count, 1).End(xlUp).Row

        For i = 1 To lastRow
            ThisWorkbook.Sheets("YourSheetName").Range("A" & i & ":D" & i).Merge
        Next i

 End Sub

答案 3 :(得分:0)

下面的代码包括在列中合并单元格" A:D"在looprng范围内。

<强>代码

Option Explicit

Sub Merge()

Dim EndRangeRE As Range
Dim EndRangeNRE As Range
Dim rngall As Range
Dim StartRangeNRE As Range
Dim StartRangeRE As Range
Dim looprng As Range
' 2 added object variables      
Dim Sht As Worksheet
Dim myRow As Range   

' set your worksheet object, don't need to Activate it
Set Sht = ThisWorkbook.Sheets("{Activity} 7300-1input template")    
Set rngall = Sht.UsedRange

Set EndRangeRE = rngall.Find(What:="10. Other Costs", LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=True)
Set EndRangeNRE = rngall.Find(What:="Recurring Costs", LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=True)
Set StartRangeNRE = rngall.Find(What:="Non-Recurring Costs", LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=True)
Set StartRangeRE = rngall.Find(What:="Recurring Costs", LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=True)

Set looprng = Sht.Range(StartRangeNRE, EndRangeRE)

' merge cells in columns "A:D" in your range
For Each myRow In looprng.Rows
    Sht.Range(Sht.Range("A" & myRow.Row), Sht.Range("D" & myRow.Row)).Merge
Next myRow

End Sub