iT邦幫忙

0

VBA 有辦法做到動態二維陣列嗎?

  • 分享至 

  • xImage

您好:
目前有 表1
起 迄
100 110
200 300

表2
單據 需求
A001 30
A002 60

最終結果
單據 需求
A001 30 100 110
200 210
A002 50 211 260 因為超過50張 ,所以 換下一個
261 270

我想要再VBA 先 計算做成一個二維陣列
再把他填到 sheet中, 不然 要找多個地方去計算

但目前 表2 的需求row 筆數 不固定
所以想請問
要如何做一個 動態 二維陣列

篩進去 最終結果

謝謝

wdchiang iT邦新手 2 級 ‧ 2023-09-14 04:12:17 檢舉
可以問 ChatGPT 它會給個可以參考的答案,再想辦法改成自己想要的。
有聽過陣列運算嘛 ?
陣列可以 加減乘除,有試試不同大小的陣列經過運算之後是不是會產生你要的結果
不知道陣列運算,那知道POWER QUERY,這各也能做到樓主要的運算跟分析
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
賽門
iT邦超人 1 級 ‧ 2023-09-14 15:51:41

在BA中宣告二維陣列時不可以使用變量為陣列的列數及行數,一定要常數。
例如:

Dim x as Integer
Dim Arr(x) as Integer  --> 錯誤,必需是常數運算式

不能用Arr(x)來宣告陣列,必需把x換成常數。

但是你可以宣告一個65536列的二維陣列,用不到那麼多列就不管他了,不需要用變量來控制宣告陣列。
例如:

Dim Arr(65536, 65536)
Dim x, y
x = 3 <--可以是運算式
y = 100 <--可以是運算式
Arr(x, y) = 1000

這樣子先宣告固定索引的陣列,再用運算方式指定陣列元素。
有很多種方式來達到你的要求,看使用的程式語言的特性來變通運用囉。

賽門 iT邦超人 1 級 ‧ 2023-09-14 16:03:50 檢舉

你的需求也可以這麼做:
先檢查表二有多少列數值,然後再宣告陣列。你可以使用Range.End函數來檢查表中有多少Cell有數值。

兩張以上的表要合併,最簡單的就是POWER QUERY直接寫JOIN語法
不想寫 join 就是表格轉陣列之後用陣列運算,陣列運算之後的結果就是彈性大小
陣列運算是高中數學,很多人都忘記了其實陣列運算能用的地方很多

0
froce
iT邦大師 1 級 ‧ 2023-09-14 22:51:37
Dim invoices()
ReDim invoices(1, 2)
invoices(1, 2) = 1
MsgBox invoices(1, 2)

# ReDim Preserve保留原陣列資料
# 只能動後面的維度,且只能增加
ReDim Preserve invoices(1, 3)
MsgBox invoices(1, 2)

這樣?
excel VBA用這個限制很大,如果你是用office 365可以考慮用python in excel
https://support.microsoft.com/zh-tw/office/%E5%9C%A8-excel-%E7%B9%AA%E5%9C%96%E5%92%8C%E5%9C%96%E8%A1%A8%E4%B8%AD%E5%BB%BA%E7%AB%8B-python-798b5e8d-ce45-4451-8da3-f269cdad5cff
或power query

我要發表回答

立即登入回答