簡體   English   中英

將數組從Excel VBA函數傳遞到電子表格

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM