Board logo

標題: FREQUENCY問題 [打印本頁]

作者: wes    時間: 2013-9-10 00:00     標題: FREQUENCY問題

因為工作關係,每天都要使用Excel畫圖,為了增加工作效率請教各位,問題如下

Range("a:b").Select
Selection.FormulaArray = _
"=FREQUENCY(x1:x2,y1:y2)"

請問若我要將FREQUENCY函式中x1:x2位址設為變數,該如何做?
我的目的是要畫直方圖,但FREQUENCY(data_array,bins_array)中的data_array是會變動的,
x1為固定,x2的數值會隨者資料多寡而變動。
作者: luhpro    時間: 2013-9-10 20:39

本帖最後由 luhpro 於 2013-9-10 20:44 編輯
因為工作關係,每天都要使用Excel畫圖,為了增加工作效率請教各位,問題如下

Range("a:b").Select
Sele ...
wes 發表於 2013-9-10 00:00
  1. Range("a:b").Select
  2. Selection.FormulaArray = _
  3. "=FREQUENCY(INDIRECT(ADDRESS(1,24,4,1)):INDIRECT(ADDRESS(2,24,4,1))," & _
  4.            "INDIRECT(ADDRESS(1,25,4,1)):INDIRECT(ADDRESS(2,25,4,1)))"
  5. ' ADDRESS(列號, 欄號, 1=$X$1 2=X$1 3=$X1 4=X1, 0=R1C1 1=A1 表示方式) -> 取得位址表示文字
  6. ' INDIRECT -> 取得表示位址的文字所對應的儲存格參照
複製代碼

作者: wes    時間: 2013-9-10 22:17

回復 2# luhpro


感謝您的回覆,!但又碰到了問題,再次請教您,
Selection.FormulaArray = _
    "=FREQUENCY(INDIRECT(ADDRESS(2,9,1,1)):INDIRECT(ADDRESS(X,9,1,1))," & _
           "INDIRECT(ADDRESS(15,18,1,1)):INDIRECT(ADDRESS(85,18,1,1)))"

因為每次資料的長度是會變動的,例如說我將X值放在Excel的"T4"位置,我如何將X值帶入呢?
作者: GBKEE    時間: 2013-9-11 07:06

回復 1# wes
  1. Option Explicit
  2. Sub Ex()
  3.     Dim data_array As Range, Bins_array As Range
  4.     With Sheets("Sheet1")
  5.         Set data_array = .Range("X1", .Range("X1").End(xlDown))        'data_array是會變動的,x1為固定,x2的數值會隨者資料多寡而變動。
  6.        .Range("a:b").FormulaArray = "=FREQUENCY(" & data_array.Address & ",y1:y2)"
  7.         '*************************************************************************
  8.         'Set Bins_array = .Range("y1", .Range("y1").End(xlDown))       '如Bins_array是會變動的,y1為固定,y2的數值會隨者資料多寡而變動。
  9.         '.Range("a:b").FormulaArray = "=FREQUENCY(" & data_array.Address & "," & Bins_array.Address & ")"
  10.         '***************************************************************************
  11.     End With
  12. End Sub
複製代碼

作者: luhpro    時間: 2013-9-11 20:54

本帖最後由 luhpro 於 2013-9-11 21:00 編輯
回復  luhpro
感謝您的回覆,!但又碰到了問題,再次請教您,
Selection.FormulaArray = _
    "=FREQUENCY(INDIRECT(ADDRESS(2,9,1,1)):INDIRECT(ADDRESS(X,9,1,1))," & _
           "INDIRECT(ADDRESS(15,18,1,1)):INDIRECT(ADDRESS(85,18,1,1)))"
wes 發表於 2013-9-10 22:17

對於儲存格的 FormulaArray 函數來說,
Excel VBA 只要給它一個與 "儲存格公式" 完全相同的字串即可.

你把列號放在 T4 上, 即是要以 T4 儲存格的內容做為其列號,
故而此例設定儲存格公式應改為 :
  1. =FREQUENCY(INDIRECT(ADDRESS(2,9,1,1)):INDIRECT(ADDRESS(T4,9,1,1)),INDIRECT(ADDRESS(15,18,1,1)):INDIRECT(ADDRESS(85,18,1,1)))
複製代碼
亦即只要把 X 用 T4 來取代就可以了.

另在 Excel VBA 中,
兩個 " 之間即為一個字串,(自指令的開頭算起)
而兩個字串間則應用 & 來連結使成 字串A & 字串B 的形式,
若想在該字串中插入變數可以在欲插入的位置上加上  " & 變數名稱 & "
使其變成 "字串頭" & 變數名稱 & "字串尾" 的形式即可.




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