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。

請根據需要更改這些宏名稱和條件,並且您還可以在 Case 外殻 腳本。

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 表中。 如果學生在一門科目上不及格,他就不是一個成功的學生。 如何在所有科目中刪除他們的名字。
網站主持人對此評論進行了最小化
請更正同一工作表的代碼。
第一個代碼完美運行
Private Sub Worksheet_Change(ByVal Target As Range)
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?

古拉爵
網站主持人對此評論進行了最小化
早上好,
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.

In 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保護