Board logo

標題: [發問] 如何在現有的程式碼加入countif [打印本頁]

作者: j88141    時間: 2014-3-17 17:22     標題: 如何在現有的程式碼加入countif

本帖最後由 j88141 於 2014-3-17 17:28 編輯

請問如果想要在下列的程式碼加入
Range("B8")=COUNTIF(G6,"*")+COUNTIF(G8,"*")+COUNTIF(G10,"*")+COUNTIF(G12,"*")
Range("B10")=COUNTIF(E6,"*")+COUNTIF(E8,"*")+COUNTIF(E10,"*")+COUNTIF(E12,"*")
的話該怎麼改寫
自己試過一些
可是好像只要在儲存格內加入函數的話
原本的程式碼就不會執行
[attach]17787[/attach]
  1. Private Sub Worksheet_Change(ByVal myRange As Range)
  2. If Intersect(myRange, [B1:B10]) Is Nothing Then Exit Sub '變動儲存格不在B1:B10則退出程序
  3.    Range("A1") = Application.Sum([B1:B10])     '儲存格A1 等於  SUM(B1:B10)

  4.        If Range("A1") >= Range("E1") And Range("A1") <= Range("G1") Then
  5.        '如果 儲存格A1 大於等於 儲存格E1 和 小於儲存格G1的話

  6.             MsgBox Range("D1") & 和& & Range("F1"), vbOKOnly
  7.        '顯示.....

  8.        ElseIf Range("A1") < Range("E1") Then
  9.        '如果儲存格A1小於儲存格E1

  10.             Range("A1").Interior.ColorIndex = 3
  11.             '儲存格顯示紅色
  12.   
  13.        ElseIf Range("A1") > Range("F1") Then
  14.        '如果儲存格A1大於儲存格F1

  15.             MsgBox Range("E1") & "和&" & Range("G1"), vbCritical
  16.        '顯示.....
  17.       
  18.       End If
  19. End Sub
複製代碼

作者: Hsieh    時間: 2014-3-17 23:45

回復 1# j88141


    =COUNTIF(G6,"*")+COUNTIF(G8,"*")+COUNTIF(G10,"*")+COUNTIF(G12,"*")
你知道這樣公式算出甚麼嗎?
作者: j88141    時間: 2014-3-18 00:13

回復 2# Hsieh


  Range("B8") =計算儲存格G6、G8、G10、G12 中含有文字的儲存格數目

因為不知道還有哪些函數可以使用
所以只好把儲存格一個一個這樣加總起來
作者: Hsieh    時間: 2014-3-18 09:33

本帖最後由 Hsieh 於 2014-3-18 09:36 編輯

回復 3# j88141
B欄如果是要用公式取得數值
那麼針對B欄的變動不是觸發Worksheet_Change程序
而是觸發Worksheet_Calculate程序
如果以目前要驅動的Worksheet_Change事件原本是B欄
當你B欄變成公式,這公式參照的儲存格才是驅動事件的儲存格
反而是G6,G8,G10,G12,E6,E8,E10,E12才是驅動事件的必要儲存格
就將原來If Intersect(myRange, [B1:B10]) Is Nothing Then Exit Sub
改成
If Intersect(myRange, [G6,G8,G10,G12,E6,E8,E10,E12]) Is Nothing Then Exit Sub
順便一提B8公式
=COUNTA(G6,G8,G10,G12)
即可計算範圍內非空白儲存格數量
作者: j88141    時間: 2014-3-18 20:54

回復 4# Hsieh


    可以了
我又學到一課了
謝謝
作者: j88141    時間: 2014-3-19 19:44

本帖最後由 j88141 於 2014-3-19 19:48 編輯

回復 4# Hsieh
    hsieh大
不好意思又來發問

我現在想把B8公式改成      (跨工作表計算)
=COUNTA(工作表2!A1,工作表2!A3,工作表2!A5,工作表2!A7)
所以我就把原本的
If Intersect(myRange, [G6,G8,G10,G12]) Is Nothing Then Exit Sub
改成
If Intersect(myRange, [工作表2!A1,工作表2!A3,工作表2!A5,工作表2!A7]) Is Nothing Then Exit Sub

但好像不能這樣子做
是不是要改哪邊的代碼
作者: Hsieh    時間: 2014-3-19 22:52

回復 6# j88141

Worksheet_Change是針對該工作表變動,跨工作表就必須將程式碼放在變動的工作表模組
但如此一來當你在過程中要計算其他工作表儲存格時,就要指明工作表。
作者: j88141    時間: 2014-3-20 19:00

回復 7# Hsieh

能否請Hsieh大
做出來讓我看
因為用講的不太懂
直接做出來可能我會比較懂
現在我還卡在很初級階段
謝謝Hsieh大幫忙

    [attach]17832[/attach]
作者: Hsieh    時間: 2014-3-20 23:48

回復 8# j88141

[attach]17838[/attach]
[attach]17839[/attach]
作者: j88141    時間: 2014-3-21 22:00

終於成功了
謝謝大師
作者: covernlp    時間: 2014-3-27 13:46

蠻不錯ㄌ 受教ㄌ




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)