pp 發問時間: 電腦與網際網路軟體 · 9 年前

vba程式簡化

請問各位高手幫我把程式簡化:

圖片參考:http://imgcld.yimg.com/8/n/AD05141276/o/1511121200...

X軸從H1-1前測開始為I22:P22儲存格

Y軸從H22~H26

資料表單名稱:為J20儲存格 '\在vSht.Range("J20").Value = DataSht.Name(NC1112524_1)

這張圖表單名稱為:檢驗報告

想要統計NC1112524_1表單內BL:BS儲存格符合Y軸(H23:H26)資料數數統計

vSht.Range("I22").Value = "=COUNTIF(" & DataSht.Name & "!BL:BL,檢驗報告!$H$22)"

'vSht.Range("J22").Value = "=COUNTIF(" & DataSht.Name & "!BL:BL,檢驗報告!$H$22)"

'vSht.Range("K22").Value = "=COUNTIF(" & DataSht.Name & "!BL:BL,檢驗報告!$H$22)"

'vSht.Range("L22").Value = "=COUNTIF(" & DataSht.Name & "!BL:BL,檢驗報告!$H$22)"

'vSht.Range("M22").Value = "=COUNTIF(" & DataSht.Name & "!BL:BL,檢驗報告!$H$22)"

'vSht.Range("N22").Value = "=COUNTIF(" & DataSht.Name & "!BL:BL,檢驗報告!$H$22)"

'vSht.Range("O22").Value = "=COUNTIF(" & DataSht.Name & "!BL:BL,檢驗報告!$H$22)"

'vSht.Range("P22").Value = "=COUNTIF(" & DataSht.Name & "!BL:BL,檢驗報告!$H$22)"

已更新項目:

上述程式內容打錯更正如下:

vSht.Range("I22").Value = "=COUNTIF(" & DataSht.Name & "!BL:BL,檢驗報告!$H$22)"

'vSht.Range("J22").Value = "=COUNTIF(" & DataSht.Name & "!BM:BM,檢驗報告!$H$22)"

2 個已更新項目:

'vSht.Range("K22").Value = "=COUNTIF(" & DataSht.Name & "!BN:BN,檢驗報告!$H$22)"

'vSht.Range("L22").Value = "=COUNTIF(" & DataSht.Name & "!BO:BO,檢驗報告!$H$22)"

3 個已更新項目:

'vSht.Range("M22").Value = "=COUNTIF(" & DataSht.Name & "!BP:BP,檢驗報告!$H$22)"

'vSht.Range("N22").Value = "=COUNTIF(" & DataSht.Name & "!BQ:BQ,檢驗報告!$H$22)"

4 個已更新項目:

'vSht.Range("O22").Value = "=COUNTIF(" & DataSht.Name & "!BR:BR,檢驗報告!$H$22)"

'vSht.Range("P22").Value = "=COUNTIF(" & DataSht.Name & "!BS:BS,檢驗報告!$H$22)"

5 個已更新項目:

vSht.Range("I23").Value = "=COUNTIF(" & DataSht.Name & "!BL:BL,檢驗報告!$H$23)"

'vSht.Range("J23").Value = "=COUNTIF(" & DataSht.Name & "!BM:BM,檢驗報告!$H$23)"

6 個已更新項目:

'vSht.Range("K23").Value = "=COUNTIF(" & DataSht.Name & "!BN:BN,檢驗報告!$H$23)"

'vSht.Range("L23").Value = "=COUNTIF(" & DataSht.Name & "!BO:BO,檢驗報告!$H$23)"

7 個已更新項目:

'vSht.Range("M23").Value = "=COUNTIF(" & DataSht.Name & "!BP:BP,檢驗報告!$H$23)"

'vSht.Range("N23").Value = "=COUNTIF(" & DataSht.Name & "!BQ:BQ,檢驗報告!$H$23)"

8 個已更新項目:

'vSht.Range("O23").Value = "=COUNTIF(" & DataSht.Name & "!BR:BR,檢驗報告!$H$23)"

'vSht.Range("P23").Value = "=COUNTIF(" & DataSht.Name & "!BS:BS,檢驗報告!$H$23)"

9 個已更新項目:

其它內容依順'vSht.Range("I24").Value = "=COUNTIF(" & DataSht.Name & "!BR:BR,檢驗報告!$H$24)"

十直到I26...."=COUNTIF(" & DataSht.Name & "!BS:BS,檢驗報告!$H$26)"

10 個已更新項目:
11 個已更新項目:

大大您太厲害了,為什麼

vSht.[I22:P26] = "=COUNTIF(" & DataSht.Name & "!BL:BL,檢驗報告!$H22)" 一行就能搞定,為什麼可以不用寫迴圈,還請大大方便指導一下.

感恩!!

12 個已更新項目:

謝謝2位大大的解說,可讓40行的程式變成一行就能搞定,真是受益非淺

感恩!

3 個解答

評分
  • Daniel
    Lv 7
    9 年前
    最佳解答

    I22~P26的所有公式輸入, 程式碼改為:vSht.[I22:P26] = "=COUNTIF(" & DataSht.Name & "!BL:BL,檢驗報告!$H22)" 只要一行喔!

    .

    2011-12-12 09:27:53 補充:

    連同前方輸入資料的三行, 可再簡化為:

    With vSht

    .[J20] = DataSht.Name

    .[O20] = "=SUBTOTAL(3," & .[J20] & "!BD2:BD" & uRow & ")" '資料總筆數

    .[I22:P26] = "=COUNTIF(" & .[J20] & "!BL:BL,檢驗報告!$H22)"

    End With

    .

  • 9 年前

    3Q~~老師大大

    讓您費心了!

  • 9 年前

    這樣一步一步求解是不是容易些?回答的人也可立即上手。

    除Daniel大的正解外,還是提供〔錄製〕法:

    將i22公式確定:

    =COUNTIF(NC1112524_1!BL:BL,檢驗報告!$H22)

    以錄製取得:

    ActiveCell.FormulaR1C1 = "=COUNTIF(NC1112524_1!C[55],檢驗報告!RC8)"

    再更改為:

    vSht.Range("I22:P26").FormulaR1C1 = "=COUNTIF(" & DataSht.Name & "!C[55],檢驗報告!RC8)"

    2011-12-12 11:59:16 補充:

    先了解〔絕對位址〕.〔相對位址〕的差異性,

    範圍中的第一個公式即可套用到整個範圍,

    與直接在工作表將公式右拉下刷是同樣道理,它會自動位移參照。

    2011-12-12 11:59:50 補充:

    另要注意:

    vSht.[I22:P26] = "=COUNTIF(" & DataSht.Name & "!BL:BL,檢驗報告!$H22)"

    若改成

    vSht.[I24:P26] = "=COUNTIF(" & DataSht.Name & "!BL:BL,檢驗報告!$H22)"

    就會有錯誤!

    2011-12-12 12:00:01 補充:

    但使用

    vSht.Range("I24:P26").FormulaR1C1 = "=COUNTIF(" & DataSht.Name & "!C[55],檢驗報告!RC8)"

    就不會有問題!

還有問題?馬上發問,尋求解答。