標題:
[發問]
變數設定
[打印本頁]
作者:
Scott090
時間:
2016-3-7 14:49
標題:
變數設定
請把陣列中的對應位置值設給變數,VBA如何做,謝謝
Option Base 1
Option Explicit
Sub Test()
'定義變數
Dim Qref%, kWref%, COPref%, Qev_ref%, Qcd_ref%, Tchws%, Tchwr%, Tcws%, Tcwr%
Dim a0%, a1%, a2%, a3%, a4%, a5%
Dim ar
'變數名稱陣列, 說明: 名稱在陣列中的位置是會變的
ar = Array("Qref", "kWref", "COPref", "Qev_ref", "Qcd_ref", "Tchws", "Tchwr", "Tcws", "Tcwr", _
"a0", "a1", "a2", "a3", "a4", "a5")
'把變數名稱在陣列中的位置設給變數
'(如何寫VBA可以得到期望結果)'?
'Qref = 1
'kWref = 2
'COPref = 3
'Qev_ref = 4
'Qcd_ref = 5
' .
' .
' .
'a5 = 15
End Sub
複製代碼
作者:
stillfish00
時間:
2016-3-7 15:06
本帖最後由 stillfish00 於 2016-3-7 15:25 編輯
回復
1#
Scott090
這樣?
Qref = Application.Match("Qref", ar, 0)
kWref = Application.Match("kWref", ar, 0)
作者:
Scott090
時間:
2016-3-7 18:23
回復
2#
stillfish00
謝謝大大的解惑,答案正是所要的,非常感恩
再請教,
假如事先沒變數設定,是否能從名稱陣列中分離出 使成各個變數並賦于在陣列中的位置值?
作者:
stillfish00
時間:
2016-3-7 19:01
本帖最後由 stillfish00 於 2016-3-7 19:02 編輯
回復
3#
Scott090
沒辦法吧 , 除非全用code寫code?
是說你這樣變數的名稱放在Array有啥好處嗎,奇怪的用法。
作者:
Scott090
時間:
2016-3-8 07:35
回復
4#
stillfish00
非結構化性資料表欄位多,做計算的程式易失去可讀性而混亂;
例如:
AR(i,j) 的 j 代表欄位,欄位多了 ,j 只是一個數字概念,沒有名詞意義;當然,數字用來做迴圈很重要
Cells(i,"B").offset(,j) 一樣的意思
假如能用欄位名稱當變數 j, 則是:
AR(i,欄位名稱)
cells(i,"B").offset(,欄位名稱)
以上請教 大大 有沒有其他的解法
謝謝
作者:
ML089
時間:
2016-3-8 08:53
回復
1#
Scott090
Option Base 1
Option Explicit
Sub Test1()
'定義變數
Dim Qref%, kWref%, COPref%, Qev_ref%, Qcd_ref%, Tchws%, Tchwr%, Tcws%, Tcwr%
Dim a0%, a1%, a2%, a3%, a4%, a5%
Dim ar, x
Dim D As Object
Set D = CreateObject("Scripting.Dictionary")
'變數名稱陣列, 說明: 名稱在陣列中的位置是會變的
ar = Array("Qref", "kWref", "COPref", "Qev_ref", "Qcd_ref", "Tchws", "Tchwr", "Tcws", "Tcwr") ', "a0", "a1", "a2", "a3", "a4", "a5")
'把變數名稱在陣列中的位置設給變數
'(如何寫VBA可以得到期望結果)'?
'Qref = 1
'kWref = 2
'COPref = 3
'Qev_ref = 4
'Qcd_ref = 5
' .
' .
' .
'a5 = 15
For Each x In ar
D(x) = Application.Match(x, ar, 0)
Next
[E1:F1].Resize(D.Count) = Application.Transpose(Array(D.keys, D.items))
For Each x In D.keys
Debug.Print x, D(x)
Next
End Sub
複製代碼
作者:
stillfish00
時間:
2016-3-8 09:30
本帖最後由 stillfish00 於 2016-3-8 09:34 編輯
回復
5#
Scott090
處理資料欄位標題,如果需要 我也是採類似ML版主的做法
建立一個字典來對應 : 名稱 -> 欄號
這樣你就能像這樣去使用 : Cells(i,"B").offset(,D("Qref"))
不用宣告 Qref 變數
當然,通常資料欄位都是固定位置時,直接用Const定常數就好。
作者:
Scott090
時間:
2016-3-8 10:26
回復
6#
ML089
謝謝大大的回應
抱歉,我沒把問題描述清楚
問題的目標是要 賦值 給 變數,不只是字串在陣列中的位置
例如:
Qref =1,因為字串 "Qref" 在 陣列的位置 是 1
Qev_ref = 4, 因為字串 "Qev_ref" 在陣列的位置是 4
作者:
Scott090
時間:
2016-3-8 10:42
回復
7#
stillfish00
之所以發想要以動態的方式處理,
就是因為欄位很多且位置會變;直接用 Const 會拉得很長,資料位置變動時也不易更改
提議用 ML 版主的字典法 D("Qref") 應可行
測試後再報告
謝謝
作者:
GBKEE
時間:
2016-3-8 16:00
回復
9#
Scott090
試試看
Option Base 1
Option Explicit
Sub Test()
'定義變數
' Dim Qref%, kWref%, COPref%, Qev_ref%, Qcd_ref%, Tchws%, Tchwr%, Tcws%, Tcwr%
' Dim a0%, a1%, a2%, a3%, a4%, a5%
Dim ar, i As Integer
'變數名稱陣列, 說明: 名稱在陣列中的位置是會變的
ar = Array("Qref", "kWref", "COPref", "Qev_ref", "Qcd_ref", "Tchws", "Tchwr", "Tcws", "Tcwr", _
"_a0", "_a1", "_a2", "_a3", "_a4", "_a5") '
For i = 1 To UBound(ar)
ActiveSheet.Names.Add ar(i), i '在作用中工作表上定義名稱,給值
Next
MsgBox Cells(i, "B").Offset(, [Qref]).Address
End Sub
複製代碼
作者:
Scott090
時間:
2016-3-8 17:21
回復
10#
GBKEE
回復
9#
stillfish00
回復
6#
ML089
謝謝各位大大的幫忙
經測試後,使用 字典法 的 D("Qref") 或 名稱定義 的 [Qref] 替代 變數 Qref 都可以解決問題
再次感恩
作者:
Scott090
時間:
2016-3-31 07:11
回復
11#
Scott090
有看到 clio 的回文通知但看不到全文
請clio 版大再回文
謝謝
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)