Note: The other languages of the website are Google-translated. Back to English

 如何在Excel中根据单元格值运行宏?

假设我的工作簿中有多个宏代码,现在,我想基于单元格值运行这些代码。 本文,我将讨论在使用Excel的日常工作中可能遇到的几种情况。

如果单元格值大于或小于VBA代码中的特定值,则运行或触发宏

如果单元格值等于带有VBA代码的特定文本,则运行或触发宏


箭头蓝色右气泡 如果单元格值大于或小于VBA代码中的特定值,则运行或触发宏

例如,如果单元格A1中的值在10到50之间,请运行macro1,如果该值大于50,则运行macro2。 要在Excel中解决此任务,请应用以下VBA代码。

1。 右键单击要基于单元格值执行宏的工作表选项卡,然后选择 查看代码 从上下文菜单中,然后在打开的 适用于应用程序的Microsoft Visual Basic 窗口,将以下代码复制并粘贴到空白模块中:

VBA代码:如果单元格值大于或小于以下,则运行宏:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    If Target.Cells.Count > 1 Then Exit Sub
    If IsNumeric(Target) And Target.Address = "$A$1" Then
        Select Case Target.Value
        Case 10 To 50: Macro1
        Case Is > 50: Macro2
        End Select
    End If
End Sub

基于单元格值1的doc运行宏

备注:在上面的代码中:

A1 是包含要基于其运行宏的特定值的单元格;

情况10至50:Macro1:表示该值在10到50之间,运行Macro1;

案例> 50:Macro2:这意味着如果该值大于50,请运行Macro2。

请根据需要更改这些宏名称和条件,并且您还可以在 案例 脚本。

2。 然后保存并关闭此代码窗口,现在,当您在单元格A10中输入的值介于50到1之间时,将触发Macro1,如果输入的值大于50,则将执行Macro2。


箭头蓝色右气泡 如果单元格值等于带有VBA代码的特定文本,则运行或触发宏

例如,如果要基于单元格中的特定文本触发宏,则在输入文本“ Delete”的情况下运行macro1,而在键入文本“ Insert”的情况下运行macro2。 以下代码可以帮您一个忙。

1。 右键单击要基于单元格值执行宏的工作表,然后选择 查看代码 从上下文菜单中,然后在打开的 适用于应用程序的Microsoft Visual Basic 窗口,将以下代码复制并粘贴到空白模块中:

VBA 代码:如果单元格值是特定文本,则运行宏

Sub worksheet_change(ByVal target As Range)
Set target = Range("A1")
If target.Value = "Delete" Then
 Call Macro1
End If
If target.Value = "Insert" Then
Call Macro2
End If
End Sub 

基于单元格值2的doc运行宏

备注:在上面的代码中,“删除“和”插页”是您要基于其运行宏的单元格文本,并且 Macro1 Macro2 是您要基于文本执行的宏。 请根据需要更改它们。

2。 然后保存此代码并关闭窗口,现在,当在单元格A1中输入文本“ Delete”时,将触发macro1,如果输入文本“ Insert”,则将执行macro2。


相关文章:

Excel中单元格值更改时如何运行宏?

如何在Excel中打印之前自动运行宏?

如何基于从Excel的下拉列表中选择的值运行宏?

如何通过单击Excel中的超链接运行宏?

从工作簿中选择工作表时如何运行宏?


最佳办公效率工具

Kutools for Excel解决了您的大多数问题,并使您的生产率提高了80%

  • 重用: 快速插入 复杂的公式,图表 以及您以前使用过的任何东西; 加密单元 带密码 创建邮件列表 并发送电子邮件...
  • 超级公式栏 (轻松编辑多行文本和公式); 阅读版式 (轻松读取和编辑大量单元格); 粘贴到过滤范围...
  • 合并单元格/行/列 不会丢失数据; 拆分单元格内容; 合并重复的行/列...防止细胞重复; 比较范围...
  • 选择重复或唯一 行; 选择空白行 (所有单元格都是空的); 超级查找和模糊查找 在许多工作簿中; 随机选择...
  • 确切的副本 多个单元格,无需更改公式参考; 自动创建参考 到多张纸; 插入项目符号,复选框等...
  • 提取文字,添加文本,按位置删除, 删除空间; 创建和打印分页小计; 在单元格内容和注释之间转换...
  • 超级滤镜 (将过滤方案保存并应用于其他工作表); 高级排序 按月/周/日,频率及更多; 特殊过滤器 用粗体,斜体...
  • 结合工作簿和工作表; 根据关键列合并表; 将数据分割成多个工作表; 批量转换xls,xlsx和PDF...
  • 超过300种强大功能. 支持 Office / Excel 2007-2021 和 365。支持所有语言。 在您的企业或组织中轻松部署。 完整功能 30 天免费试用。 60 天退款保证。
kte选项卡201905

Office选项卡为Office带来了选项卡式界面,使您的工作更加轻松

  • 在Word,Excel,PowerPoint中启用选项卡式编辑和阅读,发布者,Access,Visio和Project。
  • 在同一窗口的新选项卡中而不是在新窗口中打开并创建多个文档。
  • 每天将您的工作效率提高50%,并减少数百次鼠标单击!
officetab底部
按评论排序
注释 (19)
5中的5评分 · 1评级
该评论由网站上的主持人最小化
嗨,如果你想运行基于两个单元格的宏怎么办? 一个单元格是基于文本的,另一个单元格是数值的? 然后,如果两个单元格准确显示您想要的内容,您将需要调用宏,例如第一个单元格为“YES”,第二个单元格为 1,如果不是,弹出框将显示“未找到”。
该评论由网站上的主持人最小化
要求:
根据选择
以下三个相同维度的属性将有一个下拉列表,如下所示。
并且将有三个衍生细胞(G46、G47 和 G48)

场景:
如果我从成本中心下拉列表中选择一个值,则成本中心派生单元格(K46)应填充从成本中心下拉列表(H46)中选择的值,其他两个派生单元格(K47 和 k48)应变为空白。

同样,如果我从预算管理器下拉列表中选择值,预算管理器派生单元格应填充从预算管理器下拉列表(H47)中选择的值,其他两个派生单元格(K45 和 k48)应变为空白。
该评论由网站上的主持人最小化
我正在处理结果分析。 在这种情况下,excel中的数据将是这样的名称,子名称,Crade。 现在,我想从结果中找到所有通过或成功的候选编号。 我怎么才能得到它。 因为,我有 6 个不同的主题及其结果在单个 Excel 表中。 如果学生在一门科目上不及格,他就不是一个成功的学生。 如何在所有科目中删除他们的名字。
该评论由网站上的主持人最小化
请更正同一工作表的代码。
第一个代码完美运行
私人子Worksheet_Change(按目标的ByVal目标)
If Not Intersect(Target, Range("D1")) 什么都不是
选择案例范围(“D1”)
案例“0.5”:一半
案例“1”:一个
案例“1.25”:OneTwentyFive
最终选择
结束如果
END SUB

第二个代码不起作用(请更正以下内容)
私有子更改(ByVal 目标作为范围)
If Not Intersect(Target, Range("D2")) 什么都不是
选择案例范围(“D2”)
案例“9.53”:九点五三
最终选择
结束如果
END SUB
该评论由网站上的主持人最小化
Olá, quero fazer o seguinte:
Na Celula A1, assim que ela estiver preenchida passe para a celula de baixo, no caso A2。
Eu uso um leitor de codigo de barras para cadastrar produtos, e ele lê os numeros automaticos, ai tenho que ficar apertando ENTER para ir para celula de baixo。

谢谢!
该评论由网站上的主持人最小化
Hola, una Consulta, como se haría si por ejemplo dado un numero se pueda ejecutar las dos macros
该评论由网站上的主持人最小化
你好,古斯塔沃
要解决您的问题,请应用以下代码:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    If Target.Cells.Count > 1 Then Exit Sub
    If IsNumeric(Target) And Target.Address = "$A$1" Then
        If Target.Value > 10 And Target.Value < 50 Then
         macro1
         macro2
        End If
    End If
End Sub

请尝试,希望对您有所帮助!
该评论由网站上的主持人最小化
你好,
je souhaiterais appliquer cette 宏 à mon 代码。 Le problème est que la cellule s'incrémente via une toupie et le code ne reconnais pas le changement de valeur de la cellule。
Quand je saisie la valeur manuellement celà fonctionne 校正。

谢谢你在前进
该评论由网站上的主持人最小化
你好,吉尔斯,
你应该插入一个 微调按钮(ActiveX 控件) 首先,然后右键单击它,选择 查看代码,然后,在现有脚本之间复制并粘贴以下代码,
Dim xWSh As Worksheet
Dim xOL As OLEObject
Dim xRg As Range
Set xWSh = Application.ActiveSheet
Set xOL = xWSh.OLEObjects("SpinButton1") 'The name of the spin button
Set xRg = xWSh.Range(xOL.LinkedCell)
If IsNumeric(xRg) And xRg.Address = "$A$1" Then
        Select Case xRg.Value
        Case 10 To 50: Macro1
        Case Is > 50: Macro2
        End Select
End If

https://www.extendoffice.com/images/stories/comments/comment-skyyang/DOC-RUN-CODE.png

请尝试,希望对您有所帮助!
该评论由网站上的主持人最小化
嗨!

我对 VBA 很陌生,我为我拥有的 excel 表尝试了这个解决方案。 我基本上只是在excel中有一个很长的列表,你在T列中应该输入是或否,我希望它,如果输入是,运行一个宏......我尝试了很多不同的方法来定义范围但是没有任何效果。

Sub worksheet_change(ByVal target As Range)

设置目标 = Range("T:T")
如果 target.Value = "Yes" 那么
调用宏1
结束如果

END SUB

我强调了这个问题(运行时错误-类型不匹配): If target.Value = "Yes" Then

有人可以帮忙吗?

最好的问候,伊莎贝拉
该评论由网站上的主持人最小化
你好,韦斯特加德
可能是下面的 VBA 代码可以帮助你:(注意:请更改名称 Macro1 到您自己的代号)
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("T:T")) Is Nothing Then
If Target.Value = "Yes" Then
      Call Macro1
    End If
    End If
End Sub

请尝试,希望对您有所帮助!
该评论由网站上的主持人最小化
非常感谢! 它现在可以工作了:)
该评论由网站上的主持人最小化
嗨,
如何根据单元格A1公式计算结果修改此代码
子工作表_Calculate()
请帮忙

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
如果 Target.Cells.Count > 1 然后退出 Sub
如果 IsNumeric(Target) 和 Target.Address = "$A$1" 那么
选择案例目标.值
情况10至50:Macro1
案例> 50:Macro2
最终选择
结束如果
END SUB
5中的5评分
该评论由网站上的主持人最小化
你好,FG,
要使代码在公式单元格中工作,请应用以下代码:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    On Error Resume Next
    If Target.Cells.Count > 1 Then Exit Sub
    If IsNumeric(Target) And Target.Address = "$A$1" Then
        Select Case Target.Value
        Case 10 To 50: macro1
        Case Is > 50: macro2
        End Select
    ElseIf (Not Intersect(Range("$A$1"), Target.Dependents) Is Nothing) Then
        Set Rg = Intersect(Range("$A$1"), Target.Dependents)(1)
        Select Case Rg.Value
        Case 10 To 50: macro1
        Case Is > 50: macro2
        End Select
    End If
End Sub

请试一试,希望对您有所帮助!
该评论由网站上的主持人最小化
再见天阳。 Spero tu possa aiutarmi。 Ho un programmino in vba che basandosi su variazioni di prezzo di una cella (E1), collegata in DDE con una piattaforma di trading di borsa, fissa i prezzi: Massimo, Minimo, Apertura, Chiusura, per poi passare alla riga successiva 在基地a un intervallo temporale impostato all'apertura del foglio elettronico。 L'algoritmo da me sviluppato fa si che nelle colonne: "BH" e "BI" vengano visualizzati i prezzi di acquisto e di vendita, ma solo quando soddisfatte le condizioni date, altrimenti le celle non restitiisco nessun valore. Quello di cui avrei bisogno è di un avviso sonoro .wav che mi avvisi quando viene restituito un valore, di acquisto o di vendita, in modo di non dover fissare lo schermo per 14 ore al giorno。 Ho provato inserire un codice "SoundMe()" trovato on-line,ma suona ogni volta che c'è un nuovo massimo o un nuovo minimo nella riga in cui il programma sta aggiornando i prezzi。 Pensi che il problema si possa resolvere? 谢谢大家注意
斯特凡诺
该评论由网站上的主持人最小化
早上好,
Ho provato il listato che permette di richiamare 2 macro al cambio del valore di una cella, se quel cambio deriva da una funzione "se" non funziona, se digito i valori (vero o falso) funziona。

来吧posso ovviare?
Eventualmente come potrei evitare di utilizzare il condizionale sulla cella e far verificare al listato se la cella che deve far avviare le macro è compilata o meno?

GRAZIE
该评论由网站上的主持人最小化
早上好,
vorrei eseguire una macro quando una in una cella viene inserito un controllo "if" o se viene inserita una data e non un numero。

Ad esempio se nella cella A1 inserisco: If(B2=0;vero;falso) e la macro leggendo vero mi nasconde lo sheet2 altrimenti mi scopre la sheet 2.

来 posso 票价?
Riesco a far funzionare il tutto se inserisco in A1 manualmente un valore (in questo caso vero o falso)。

谢谢
该评论由网站上的主持人最小化
你好,卡洛,
其实本文的第二个代码就可以解决你的问题。
备注: 你只需要将文本改为True 和False 到代码中,并将代码名称更改为你自己的。
Sub worksheet_change(ByVal target As Range)
Set target = Range("A1")
If target.Value = "True" Then
 Call Macro1
End If
If target.Value = "False" Then
Call Macro2
End If
End Sub 


请再试一次,谢谢!
该评论由网站上的主持人最小化
你好,

ich bräuchte dafür ein Makro,

ich kann dieses Problem nicht alleine lösen, wäre super wenn mir jemand helfen könnte.

在 M1 steht die Zahl 5, jetzt soll der Bereich von A83 bis A683 auf die Zahl 5 geprüft werden, solltte zB A111 die Zahl 5 enthalten, dann soll C111 + 1 (wenn in C111 23 steht dann soll da 24 stehen)。 Genau 所以 wenn in A444 eine 5 steht,dann soll C444 + 1(wenn C444 = 99 dann 100)。
Immer wenn der Wert mit M1 übereinstimmt,dann soll diese Zelle in Spalte C immer wieder + 1 zählen。 还有 23 +1 dann 24 + 1 dann 25 +1 usw usw。


Vielleicht kann mir da jemand helfen,

预先感谢您。

LG斯特凡
这里还没有评论
留下你的意见
以访客身份发帖
×
评价此帖子:
0   产品特性
建议地点

关注我们

版权所有 © 2009 - extendoffice.com。 | 版权所有。 供电 ExtendOffice。 | 网站地图
Microsoft和Office徽标是Microsoft Corporation在美国和/或其他国家的商标或注册商标。
受Sectigo SSL保护