[英]Passing arrays from an Excel VBA function to a spreadsheet
我已經多次將數組從電子表格來回傳遞給VBA函數。 我最近“升級”到Excel 365,現在無法正常工作。 例如:
Public Function test(x As Range)
Dim y()
ReDim y(3)
y(1) = 1
y(2) = 2
y(3) = 3
test = y
End Function
然后,我突出顯示三個單元格,例如b1:b3,然后在頂部單元格中輸入= test(a1:a2)並按shift鍵輸入。 這用應該從測試函數接收y()的數組公式填充范圍。
但是,引用該函數的單元格全為零。 我放入調試行,我可以告訴該函數正在按預期運行。 只是沒有將數組傳遞給電子表格。
那是怎么回事? 有沒有其他人有這種經驗?
@ RDHS,@ tim-williams和@ garys-student-感謝您提出的即刻答復。 還有加里(Gary)的學生-感謝您的迅速回復。 我會投票給所有人,但我不能,因為我是菜鳥。
但是...出於完整性的考慮-您的答案提出了另一個問題(屬於理論上的問題):我應該能夠將一維數組直接強制轉換為范圍列,反之亦然。
顯然,檢查范圍的形狀並進行相應的轉換很容易(嗯,既然您已經向我展示了操作方法,這很容易!)但是它太草率了:
使用上面的示例,而不僅僅是編寫test = y
我需要寫:
如果x.rows.count = 1,則測試= y
否則test = worksheetfunction.transpose(y)結束,如果
我不認識你,但我會乘1號門(test = y)。 另一種方法是馬虎馬虎。
但是MS一直在支持我們-當使用內置電子表格數組功能(例如索引,匹配等)時,excel不會強迫您進行這些體操操作。Index(C1:C10,3)和index(a3:k3, 3)都返回C3中的值,這是每個ARRAY中的第三個ITEM。 索引足夠聰明,可以找出第三項。 當然,如果您可以在工作表上執行此操作,那么必須在VBA中找到一種方法?
我最喜歡的比較 科學 這位教授是計算機科學領域的奠基人之一。他曾經說過:“一種編程語言,如果程序中的程序需要引起人們的關注,那么它就是低級的。”
他實際上做了很多有見地的觀察,並在ARPANET上發布,使他成為世界上第一批博客作者(Google Alan Perlis)之一。 二十年來,每個程序員在他的VT100上都貼有Perlisisms列表-例如:
“在計算中,將顯而易見的東西變成有用的是'挫折'一詞的活潑定義”;
“一個人的常數就是另一個人的變量”;
“愚人忽視了復雜性。實用主義者遭受了它的侵害。有些人可以避免它。天才將其消除。”
我之所以提出他,是因為產生“干凈”代碼的願望可以追溯到第一台計算機上的第一批編碼人員。 我非常喜歡他。
試試看:
Public Function test(x As Range)
Dim y()
ReDim y(3)
y(0) = 1
y(1) = 2
y(2) = 3
test = WorksheetFunction.Transpose(y)
End Function
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.