Excel 使用Range.Address指定范围的高端

Excel 使用Range.Address指定范围的高端,excel,vba,Excel,Vba,如果我在一个范围内使用.Address得到的结果是$F$1:$F$21,有没有办法只分离F21部分,然后使用.Offset告诉excel我要在其中输入值的单元格 Public Sub TotalAudits() With Worksheets(1) 'Dim lastrow As Long: Set lastrow = .Cells(.Rows.Count, "A").End(xlUp).Row Dim celTotal As Range: Set cel

如果我在一个范围内使用.Address得到的结果是$F$1:$F$21,有没有办法只分离F21部分,然后使用.Offset告诉excel我要在其中输入值的单元格

Public Sub TotalAudits()
    With Worksheets(1)
        'Dim lastrow As Long: Set lastrow = .Cells(.Rows.Count, "A").End(xlUp).Row
        Dim celTotal As Range: Set celTotal = .Cells(.Rows.Count, "A").End(xlUp).Row.Offset(2, 4)
        celTotal.Value = "Monthly Totals"
        With celTotal
            .Font.Bold = True
            .Font.Italic = True
            .HorizontalAlignment = xlRight
        End With

        Dim rngMonth As Range
        For Each rngMonth In Range("F1:Q" & .Cells(.Rows.Count, 1).End(xlUp).Row).Columns
            Dim colTotal As Integer: colTotal = rngMonth.Cells.SpecialCells(xlCellTypeConstants).Count - 1
            .Range(Split(rngMonth.Address(False, False), ":")(1)).Offset(2, 0).Value = colTotal
            'MsgBox (rngMonth.Address)
        Next rngMonth
        'MsgBox (lastrow)
    End With
End Sub
具体来说,这方面的代码

MsgBox (rngMonth.Address)

我想将地址的最后一部分偏移2行,并将存储在COLTOAL中的值插入偏移单元格。

正如BigBen所说,您应该更改计算最后一行的方式,请尝试以下操作:

lastrow = .Cells(.Rows.Count, "A").End(xlUp).row
只需从
rngMonth.地址中获取
F21
,请使用

Replace(split(rngMonth.Address,":")(1),"$","")
或:

Split(rngMonth.Address(False, False), ":")(1)
Range(Split(rngMonth.Address(False, False), ":")(1)).Offset(2, 0).Value = colTotal
Public Sub TotalAudits()

    With Worksheets(1)
        Dim lastrow As Long: lastrow = .Cells(.Rows.Count, "A").End(xlUp).row
        Dim celTotal As Range: Set celTotal = .Range("A" & lastrow).Offset(2, 4)
        With celTotal
            .Value = "Monthly Totals"
            .Font.Bold = True
            .Font.Italic = True
            .HorizontalAlignment = xlRight
        End With

        Dim rngMonth As Range
        For Each rngMonth In Range("F1:Q" & .Cells(.Rows.Count, 1).End(xlUp).row).Columns
            Dim colTotal As Integer: colTotal = rngMonth.Cells.SpecialCells(xlCellTypeConstants).Count - 1

            MsgBox (rngMonth.Address)
            Range(Split(rngMonth.Address(False, False), ":")(1)).Offset(2, 0).Value = colTotal

        Next rngMonth
        MsgBox (lastrow)
    End With
End Sub

您希望使用的最后一行是:

Split(rngMonth.Address(False, False), ":")(1)
Range(Split(rngMonth.Address(False, False), ":")(1)).Offset(2, 0).Value = colTotal
Public Sub TotalAudits()

    With Worksheets(1)
        Dim lastrow As Long: lastrow = .Cells(.Rows.Count, "A").End(xlUp).row
        Dim celTotal As Range: Set celTotal = .Range("A" & lastrow).Offset(2, 4)
        With celTotal
            .Value = "Monthly Totals"
            .Font.Bold = True
            .Font.Italic = True
            .HorizontalAlignment = xlRight
        End With

        Dim rngMonth As Range
        For Each rngMonth In Range("F1:Q" & .Cells(.Rows.Count, 1).End(xlUp).row).Columns
            Dim colTotal As Integer: colTotal = rngMonth.Cells.SpecialCells(xlCellTypeConstants).Count - 1

            MsgBox (rngMonth.Address)
            Range(Split(rngMonth.Address(False, False), ":")(1)).Offset(2, 0).Value = colTotal

        Next rngMonth
        MsgBox (lastrow)
    End With
End Sub

完整代码:

Split(rngMonth.Address(False, False), ":")(1)
Range(Split(rngMonth.Address(False, False), ":")(1)).Offset(2, 0).Value = colTotal
Public Sub TotalAudits()

    With Worksheets(1)
        Dim lastrow As Long: lastrow = .Cells(.Rows.Count, "A").End(xlUp).row
        Dim celTotal As Range: Set celTotal = .Range("A" & lastrow).Offset(2, 4)
        With celTotal
            .Value = "Monthly Totals"
            .Font.Bold = True
            .Font.Italic = True
            .HorizontalAlignment = xlRight
        End With

        Dim rngMonth As Range
        For Each rngMonth In Range("F1:Q" & .Cells(.Rows.Count, 1).End(xlUp).row).Columns
            Dim colTotal As Integer: colTotal = rngMonth.Cells.SpecialCells(xlCellTypeConstants).Count - 1

            MsgBox (rngMonth.Address)
            Range(Split(rngMonth.Address(False, False), ":")(1)).Offset(2, 0).Value = colTotal

        Next rngMonth
        MsgBox (lastrow)
    End With
End Sub

正如BigBen所说,您应该改变计算最后一行的方式,尝试以下方法:

lastrow = .Cells(.Rows.Count, "A").End(xlUp).row
只需从
rngMonth.地址中获取
F21
,请使用

Replace(split(rngMonth.Address,":")(1),"$","")
或:

Split(rngMonth.Address(False, False), ":")(1)
Range(Split(rngMonth.Address(False, False), ":")(1)).Offset(2, 0).Value = colTotal
Public Sub TotalAudits()

    With Worksheets(1)
        Dim lastrow As Long: lastrow = .Cells(.Rows.Count, "A").End(xlUp).row
        Dim celTotal As Range: Set celTotal = .Range("A" & lastrow).Offset(2, 4)
        With celTotal
            .Value = "Monthly Totals"
            .Font.Bold = True
            .Font.Italic = True
            .HorizontalAlignment = xlRight
        End With

        Dim rngMonth As Range
        For Each rngMonth In Range("F1:Q" & .Cells(.Rows.Count, 1).End(xlUp).row).Columns
            Dim colTotal As Integer: colTotal = rngMonth.Cells.SpecialCells(xlCellTypeConstants).Count - 1

            MsgBox (rngMonth.Address)
            Range(Split(rngMonth.Address(False, False), ":")(1)).Offset(2, 0).Value = colTotal

        Next rngMonth
        MsgBox (lastrow)
    End With
End Sub

您希望使用的最后一行是:

Split(rngMonth.Address(False, False), ":")(1)
Range(Split(rngMonth.Address(False, False), ":")(1)).Offset(2, 0).Value = colTotal
Public Sub TotalAudits()

    With Worksheets(1)
        Dim lastrow As Long: lastrow = .Cells(.Rows.Count, "A").End(xlUp).row
        Dim celTotal As Range: Set celTotal = .Range("A" & lastrow).Offset(2, 4)
        With celTotal
            .Value = "Monthly Totals"
            .Font.Bold = True
            .Font.Italic = True
            .HorizontalAlignment = xlRight
        End With

        Dim rngMonth As Range
        For Each rngMonth In Range("F1:Q" & .Cells(.Rows.Count, 1).End(xlUp).row).Columns
            Dim colTotal As Integer: colTotal = rngMonth.Cells.SpecialCells(xlCellTypeConstants).Count - 1

            MsgBox (rngMonth.Address)
            Range(Split(rngMonth.Address(False, False), ":")(1)).Offset(2, 0).Value = colTotal

        Next rngMonth
        MsgBox (lastrow)
    End With
End Sub

完整代码:

Split(rngMonth.Address(False, False), ":")(1)
Range(Split(rngMonth.Address(False, False), ":")(1)).Offset(2, 0).Value = colTotal
Public Sub TotalAudits()

    With Worksheets(1)
        Dim lastrow As Long: lastrow = .Cells(.Rows.Count, "A").End(xlUp).row
        Dim celTotal As Range: Set celTotal = .Range("A" & lastrow).Offset(2, 4)
        With celTotal
            .Value = "Monthly Totals"
            .Font.Bold = True
            .Font.Italic = True
            .HorizontalAlignment = xlRight
        End With

        Dim rngMonth As Range
        For Each rngMonth In Range("F1:Q" & .Cells(.Rows.Count, 1).End(xlUp).row).Columns
            Dim colTotal As Integer: colTotal = rngMonth.Cells.SpecialCells(xlCellTypeConstants).Count - 1

            MsgBox (rngMonth.Address)
            Range(Split(rngMonth.Address(False, False), ":")(1)).Offset(2, 0).Value = colTotal

        Next rngMonth
        MsgBox (lastrow)
    End With
End Sub

可以使用以下命令获取范围的最后一个单元格

Dim rngMonth As Range
Set rngMonth = Range("F1:F21")

MsgBox rngMonth.Cells(rngMonth.Cells.Count).Offset(2, 0).Address

这将选择范围中的最后一个单元格,将其偏移为两行并返回地址

您可以使用以下命令获取范围中的最后一个单元格

Dim rngMonth As Range
Set rngMonth = Range("F1:F21")

MsgBox rngMonth.Cells(rngMonth.Cells.Count).Offset(2, 0).Address

这将选择范围中的最后一个单元格,将其偏移为两行并返回地址。注意:查找最后一行的方法不可靠。请参阅以了解如何使用。
工作表(1).范围(RNG月地址).偏移量(-2,0)
否否否-2我需要将其设置为偏移量(2,0)。注意:查找最后一行的方法不可靠。请参阅以了解如何使用。
Worksheets(1).Range(rngMonth.Address).Offset(-2,0)
No not-2我需要将其设置为Offset(2,0)如果您不介意我问的话,这两个错误参数是什么?将lastrow设置为Range:Set lastrow=.Cells(.Rows.Count,“A”).End(xlUp).Row-我得到一个错误:该行上需要对象line@Mikku您试图将一个长变量设置为对象-删除
set
,即
Dim lastrow作为long:lastrow=.Cells(.Rows.Count,“a”).End(xlUp)。row
此外,您还有
celTotal.Value=“Monthly Totals”
就在您的
With celTotal
上方,为什么不将其移动到
With
块中?谢谢@Tom,今天为我节省了几次:)如果您不介意我问的话,这两个错误参数是什么?将lastrow设置为Range:Set lastrow=.Cells(.Rows.Count,“A”).End(xlUp).Row-我得到一个错误:该行上需要对象line@Mikku您试图将一个长变量设置为对象-删除
set
,即
Dim lastrow作为long:lastrow=.Cells(.Rows.Count,“a”).End(xlUp)。row
此外,您还有
celTotal.Value=“Monthly Totals”
就在你的
和celTotal的上方
为什么不把它移到
块里面呢?谢谢@Tom,今天帮我省了几次钱:)