Excel 使用Range.Address指定范围的高端
如果我在一个范围内使用.Address得到的结果是$F$1:$F$21,有没有办法只分离F21部分,然后使用.Offset告诉excel我要在其中输入值的单元格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
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,今天帮我省了几次钱:)