Excel VBA-關於儲存格變動性的設計議題

問題:當工作表內有多組被參照的儲存格需撰寫 VBA 程式作處理運算,但不希望因被參照儲存格的位置 (座標)變動後,而頻繁修改程式碼。

描述:參考下圖,當有一組表格內的儲存格,例如「加權指數」,有包括「成交價」、「最高價」、「最低價」、「成交量」... 等屬性 (property)。若撰寫 VBA 程式時,係以「絕對座標」參考值 (例如「成交價」座標現為 "B4")來處理,則當上述任一屬性座標更動時 (或新增屬性而移動原來屬性位置),程式碼必須修正調整。這也說明了若以單一儲存格的「絕對座標」作為撰寫程式的參考值,不會是好的寫作方式。
Excel 儲存格

解決方案:利用 Excel Range 物件,標定一組儲存格作為參考表格,再以「相對座標」來取得所參考的儲存格。


說明:

再以上圖為例,利用 Range 物件,將相關的一組儲存格標定為「加權指數」表格。

Set 加權Rng = Worksheets("即時報價").Range("A2:B11")

「加權指數」表格即為「Range」物件,如要取得該表格內的「成交價」,可以利用 "Find" 函數,以該屬性當為參數搜尋,取得所在位置後,再利用 "Offset" 函數取得相鄰的儲存格位置。參考下列程式碼片段:

Dim Price,O,H,L As Single
With 加權Rng
   Price = .Find(What:="成交價").Offset(0, 1).Value
   O = .Find(What:="開盤").Offset(0, 1).Value
   H = .Find(What:="最高價").Offset(0, 1).Value
   L = .Find(What:="最低價").Offset(0, 1).Value
End With

這樣撰寫的好處就是只需要標定第一次的 Range 物件的座標範圍,爾後被標定範圍內的儲存格位置無論怎麼調整,只要透過儲存格的標題關鍵字搜尋,即可找到實際需處理的相鄰儲存格。

文章導覽

   

共有 2 則迴響

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *