将公式动态添加到 excel 单元格
Adding a formula dynamically to an excel cell
有没有办法(VB?)将公式动态添加到 excel 单元格?
我有一个条件为真和假的单元格,它们根据复选框而变化。
我还有另一个单元格,里面有一个公式。 如果未选中该复选框,则应使用此公式。
如果复选框被选中 ,那么用户应该能够手动插入值 (没有任何公式提示)。所以公式不应该在那里。
我在想一个解决方案,如果复选框未选中,我会将公式添加到单元格中,然后如果复选框被选中,那么我将清除单元格。
这是怎么做到的?我不太熟悉 excel 编码和 VBA.
你可以使用:
if userform1.checkbox.checked = false then
range("A1").formula = "=myformula"
else
range("A1").value = ""
end if
您需要将代码插入到用户窗体的复选框单击或更改事件中,两者应该具有相同的效果,只需双击用户窗体中的复选框,它将带您进入点击事件或将点击替换为 "change",希望这就是你想要实现的目标,干杯
PS。感谢@99moorem
的建议
好的,您需要 TRUE/FALSE 单元格上的触发器来执行下一个 VBA 代码,
右键单击 sheet 名称并单击 "View Code" 并输入此代码:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A5:A5")) Is Nothing Then 'define adress of your True/Flase cell
If Target.Cells.Value = False then
Range("B5").formula = "=enter your formula" 'define adress for cell with formula aswell
else
Range("B5").value = ""
end if
end if
end sub
如果您有一个经典的 Excel 复选框,您可以添加一个链接单元格,它将是 True 或 False。
在下面的代码中,您的链接单元格在A1
中,具有要使用的公式的单元格在B1
和需要用公式填空或填充的单元格在C1
.
您需要指定Sheet_Name(可以不同)并将该代码直接放入Sheet"module" in VBA(按 Alt+F11
并双击带有链接单元格的 sheet(在左侧面板中),然后只需粘贴并编辑有关您的规格)
Private Sub Worksheet_Change(ByVal Target As Range)
Dim LinkedCell As Range, _
FormulaCell As Range, _
ChangingCell As Range
Set LinkedCell = Sheets("Sheet_Name").Range("A1")
Set FormulaCell = Sheets("Sheet_Name").Range("B1")
Set ChangingCell = Sheets("Sheet_Name").Range("C1")
If Application.Intersect(Target, LinkedCell) Is Nothing Then
'not in linked cell
Else
'in linked cell
If LinkedCell.Value2 <> True Then
'Unchecked
ChangingCell.FormulaLocal = ChangingCell.FormulaLocal
Else
'Checked
ChangingCell.FormulaLocal = vbNullString
End If
End If
Set LinkedCell = Nothing
Set FormulaCell = Nothing
Set ChangingCell = Nothing
End Sub
有没有办法(VB?)将公式动态添加到 excel 单元格?
我有一个条件为真和假的单元格,它们根据复选框而变化。
我还有另一个单元格,里面有一个公式。 如果未选中该复选框,则应使用此公式。 如果复选框被选中 ,那么用户应该能够手动插入值 (没有任何公式提示)。所以公式不应该在那里。
我在想一个解决方案,如果复选框未选中,我会将公式添加到单元格中,然后如果复选框被选中,那么我将清除单元格。
这是怎么做到的?我不太熟悉 excel 编码和 VBA.
你可以使用:
if userform1.checkbox.checked = false then
range("A1").formula = "=myformula"
else
range("A1").value = ""
end if
您需要将代码插入到用户窗体的复选框单击或更改事件中,两者应该具有相同的效果,只需双击用户窗体中的复选框,它将带您进入点击事件或将点击替换为 "change",希望这就是你想要实现的目标,干杯 PS。感谢@99moorem
的建议好的,您需要 TRUE/FALSE 单元格上的触发器来执行下一个 VBA 代码, 右键单击 sheet 名称并单击 "View Code" 并输入此代码:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A5:A5")) Is Nothing Then 'define adress of your True/Flase cell
If Target.Cells.Value = False then
Range("B5").formula = "=enter your formula" 'define adress for cell with formula aswell
else
Range("B5").value = ""
end if
end if
end sub
如果您有一个经典的 Excel 复选框,您可以添加一个链接单元格,它将是 True 或 False。
在下面的代码中,您的链接单元格在A1
中,具有要使用的公式的单元格在B1
和需要用公式填空或填充的单元格在C1
.
您需要指定Sheet_Name(可以不同)并将该代码直接放入Sheet"module" in VBA(按 Alt+F11
并双击带有链接单元格的 sheet(在左侧面板中),然后只需粘贴并编辑有关您的规格)
Private Sub Worksheet_Change(ByVal Target As Range)
Dim LinkedCell As Range, _
FormulaCell As Range, _
ChangingCell As Range
Set LinkedCell = Sheets("Sheet_Name").Range("A1")
Set FormulaCell = Sheets("Sheet_Name").Range("B1")
Set ChangingCell = Sheets("Sheet_Name").Range("C1")
If Application.Intersect(Target, LinkedCell) Is Nothing Then
'not in linked cell
Else
'in linked cell
If LinkedCell.Value2 <> True Then
'Unchecked
ChangingCell.FormulaLocal = ChangingCell.FormulaLocal
Else
'Checked
ChangingCell.FormulaLocal = vbNullString
End If
End If
Set LinkedCell = Nothing
Set FormulaCell = Nothing
Set ChangingCell = Nothing
End Sub