我试图允许用户以百分比或小时数的形式输入值 - 未使用的选项使用已输入的内容自动填充宏。
如果用户在25小时内按键,则使用以下示例,macro
然后将公式添加到B2(在B3中显示以供参考)以计算25%(在C2中显示的总数),如果用户将百分比添加到单元格B2,它也将起作用,然后它将使用小时数填充A2(再次使用C2中显示的总数)。
我已经让宏工作了:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Cell As Range
For Each Cell In Target
If Cell.Address = "$A$2" Then
Application.EnableEvents = False
Range("B2").Formula = "=(A2/C2)*100"
Application.EnableEvents = True
End If
Next Cell
For Each Cell In Target
If Cell.Address = "$B$2" Then
Application.EnableEvents = False
Range("A2").Formula = "=(B2*C2)/100"
Application.EnableEvents = True
End If
Next Cell
End Sub
我现在想要建立的是一种更有效的方法 在不同的行上重复使用它?
列将保持不变,但理想情况下它可以在第2行到第100行。在运动中,我能想到的唯一选择是多次复制宏并引用单独使用的单元格。
非常感谢任何指针或建议。
答案 0 :(得分:2)
要执行2到100之间的所有行,请使用此:
使用“相交”来确定在特定范围内更改的单元格。
在公式上使用R1C1表示法以确保评估同一行。
代码:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A2:A100")) Is Nothing Then
Application.EnableEvents = False
Target.Offset(, 1).FormulaR1C1 = "=(RC[-1]/RC[1])*100"
Application.EnableEvents = True
End If
If Not Intersect(Target, Range("B2:B100")) Is Nothing Then
Application.EnableEvents = False
Target.Offset(, -1).FormulaR1C1 = "=(RC[1]*RC[2])/100"
Application.EnableEvents = True
End If
End Sub
答案 1 :(得分:1)
只需更改测试以查看列属性,并使用相对引用 - 如下所示:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Cell As Range
For Each Cell In Target
If Cell.Column = 1 And (Cell.Row >= 2 And Cell.Row <= 100) Then
Application.EnableEvents = False
Cell.Offset(0, 1).FormulaR1C1 = "=(RC[-1]/RC[1])*100"
Application.EnableEvents = True
End If
Next Cell
For Each Cell In Target
If Cell.Column = 2 (Cell.Row >= 2 And Cell.Row <= 100) Then
Application.EnableEvents = False
Cell.Offset(0, -1).FormulaR1C1 = "=(RC[1]*RC[2])/100"
Application.EnableEvents = True
End If
Next Cell
End Sub