返回列表 上一主題 發帖

[發問] 變數設定

[發問] 變數設定

請把陣列中的對應位置值設給變數,VBA如何做,謝謝
  1. Option Base 1
  2. Option Explicit

  3. Sub Test()

  4.     '定義變數
  5.     Dim Qref%, kWref%, COPref%, Qev_ref%, Qcd_ref%, Tchws%, Tchwr%, Tcws%, Tcwr%
  6.     Dim a0%, a1%, a2%, a3%, a4%, a5%
  7.     Dim ar
  8.    
  9.     '變數名稱陣列,   說明: 名稱在陣列中的位置是會變的
  10.     ar = Array("Qref", "kWref", "COPref", "Qev_ref", "Qcd_ref", "Tchws", "Tchwr", "Tcws", "Tcwr", _
  11.                 "a0", "a1", "a2", "a3", "a4", "a5")
  12.    
  13.     '把變數名稱在陣列中的位置設給變數
  14.    
  15.     '(如何寫VBA可以得到期望結果)'?
  16.     'Qref = 1
  17.     'kWref = 2
  18.     'COPref = 3
  19.     'Qev_ref = 4
  20.     'Qcd_ref = 5
  21.    
  22.     '   .
  23.     '   .
  24.     '   .
  25.     'a5 = 15
  26.    
  27.    
  28. End Sub
複製代碼

本帖最後由 stillfish00 於 2016-3-7 15:25 編輯

回復 1# Scott090
這樣?
Qref = Application.Match("Qref", ar, 0)
kWref = Application.Match("kWref", ar, 0)
表達不清、題意不明確、沒附檔案格式、沒有討論問題的態度~~~~~~以上愛莫能助。

TOP

回復 2# stillfish00


    謝謝大大的解惑,答案正是所要的,非常感恩

再請教,
假如事先沒變數設定,是否能從名稱陣列中分離出 使成各個變數並賦于在陣列中的位置值?

TOP

本帖最後由 stillfish00 於 2016-3-7 19:02 編輯

回復 3# Scott090
沒辦法吧 , 除非全用code寫code?
是說你這樣變數的名稱放在Array有啥好處嗎,奇怪的用法。
表達不清、題意不明確、沒附檔案格式、沒有討論問題的態度~~~~~~以上愛莫能助。

TOP

回復 4# stillfish00

非結構化性資料表欄位多,做計算的程式易失去可讀性而混亂;
例如:
       AR(i,j) 的 j 代表欄位,欄位多了 ,j 只是一個數字概念,沒有名詞意義;當然,數字用來做迴圈很重要
       Cells(i,"B").offset(,j) 一樣的意思

假如能用欄位名稱當變數 j, 則是:
     AR(i,欄位名稱)
     cells(i,"B").offset(,欄位名稱)

以上請教 大大  有沒有其他的解法

謝謝

TOP

回復 1# Scott090
  1. Option Base 1
  2. Option Explicit

  3. Sub Test1()

  4. '定義變數
  5.     Dim Qref%, kWref%, COPref%, Qev_ref%, Qcd_ref%, Tchws%, Tchwr%, Tcws%, Tcwr%
  6.     Dim a0%, a1%, a2%, a3%, a4%, a5%
  7.     Dim ar, x
  8.     Dim D As Object
  9.     Set D = CreateObject("Scripting.Dictionary")

  10.     '變數名稱陣列,   說明: 名稱在陣列中的位置是會變的
  11.     ar = Array("Qref", "kWref", "COPref", "Qev_ref", "Qcd_ref", "Tchws", "Tchwr", "Tcws", "Tcwr") ', "a0", "a1", "a2", "a3", "a4", "a5")

  12.     '把變數名稱在陣列中的位置設給變數

  13.     '(如何寫VBA可以得到期望結果)'?
  14.     'Qref = 1
  15.     'kWref = 2
  16.     'COPref = 3
  17.     'Qev_ref = 4
  18.     'Qcd_ref = 5

  19.     '   .
  20.     '   .
  21.     '   .
  22.     'a5 = 15
  23.     For Each x In ar
  24.         D(x) = Application.Match(x, ar, 0)
  25.     Next

  26.     [E1:F1].Resize(D.Count) = Application.Transpose(Array(D.keys, D.items))
  27.    
  28.     For Each x In D.keys
  29.         Debug.Print x, D(x)
  30.     Next
  31. End Sub
複製代碼
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

本帖最後由 stillfish00 於 2016-3-8 09:34 編輯

回復 5# Scott090
處理資料欄位標題,如果需要 我也是採類似ML版主的做法
建立一個字典來對應 : 名稱 -> 欄號
這樣你就能像這樣去使用 : Cells(i,"B").offset(,D("Qref"))
不用宣告 Qref 變數

當然,通常資料欄位都是固定位置時,直接用Const定常數就好。
表達不清、題意不明確、沒附檔案格式、沒有討論問題的態度~~~~~~以上愛莫能助。

TOP

回復 6# ML089


    謝謝大大的回應
抱歉,我沒把問題描述清楚

問題的目標是要 賦值 給 變數,不只是字串在陣列中的位置
例如:
          Qref =1,因為字串 "Qref" 在 陣列的位置 是 1
          Qev_ref = 4, 因為字串 "Qev_ref" 在陣列的位置是 4

TOP

回復 7# stillfish00


之所以發想要以動態的方式處理,
    就是因為欄位很多且位置會變;直接用 Const 會拉得很長,資料位置變動時也不易更改

提議用 ML 版主的字典法 D("Qref") 應可行

測試後再報告

謝謝

TOP

回復 9# Scott090
試試看
  1. Option Base 1
  2. Option Explicit
  3. Sub Test()
  4.     '定義變數
  5.     '  Dim Qref%, kWref%, COPref%, Qev_ref%, Qcd_ref%, Tchws%, Tchwr%, Tcws%, Tcwr%
  6.     '  Dim a0%, a1%, a2%, a3%, a4%, a5%
  7.     Dim ar, i As Integer
  8.    
  9.     '變數名稱陣列,   說明: 名稱在陣列中的位置是會變的
  10.     ar = Array("Qref", "kWref", "COPref", "Qev_ref", "Qcd_ref", "Tchws", "Tchwr", "Tcws", "Tcwr", _
  11.                 "_a0", "_a1", "_a2", "_a3", "_a4", "_a5")  '
  12.     For i = 1 To UBound(ar)
  13.         ActiveSheet.Names.Add ar(i), i     '在作用中工作表上定義名稱,給值
  14.     Next
  15.     MsgBox Cells(i, "B").Offset(, [Qref]).Address
  16. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

        靜思自在 : 願要大、志要堅、氣要柔、心要細。
返回列表 上一主題