簡體   English   中英

如何在Excel-VBA中的用戶定義函數中傳遞結果數組?

[英]How to pass an array of results in a User defined Function in Excel-VBA?

我正在檢查是否有任何方法可以在UDF中傳遞結果數組。

如果傳遞范圍,例如- $A$2:$A$5 ,我的函數將按預期工作,但是如果傳遞范圍之前,例如IF($A$2:$A$5 < 3, $A$2:$A$5 ,"")帶有控制+ Shift + Enter。

在此處輸入圖片說明

這是我正在使用的代碼-

Public Function ReverseTextToColumns(Rg As Range, Optional D As String = " ") As String
  Dim xArr
  xArr = Application.WorksheetFunction.Transpose((Rg.Value))
  ReverseTextToColumns = Join(xArr, D)
End Function

我不想創建一個復雜的函數,而只是想知道如何在UDF中傳遞結果數組。

將第一個參數傳遞為Variant並刪除.Value

Option Explicit
Public Function ReverseTextToColumns(n As Variant, Optional D As String = " ") As String
    Dim xArr
    xArr = Application.WorksheetFunction.Transpose((n))
    ReverseTextToColumns = Join(xArr, D)
End Function

工作表:

工作表

問題似乎是這種情況:

$A$2:$A$5 < 3

返回FALSE ,這意味着將空字符串""傳遞給函數。 這與參數的類型不兼容Range ; 以下功能:

Function TestRng(rng As Range) As Boolean
    TestRng = True
End Function

還返回#VALUE! 在像這樣的公式中使用時:

=TestRng("")

建議您將參數設置為Variant類型,並在UDF中使用VBA TypeName函數檢查它是否實際上是Range

注意 在這種情況下,您的目標是什么- $A$2:$A$5 < 3 將單元格范圍與數字進行比較是什么意思?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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