1

このようなUDFを検討してください(省略形):

Public Function ffifneps(wo As Range, pre As Variant, suf As Variant) As String
Dim z As Range, e As String
...
For Each z In wo
    If CStr(z.Value) <> "" Then
        If (Len(e) > 0) Then e = e & ", "
        e = e & maske & z.Value & maske
    End If
Next z
...

Sheet1からこのUDFを使用します。たとえば、woはSheet1のマルチエリア範囲です。

=ffifneps((B37:B38;B137:B138);C37:C38;". ")

UDFは、別のワークシートの挿入または削除時に再計算され、相対範囲をワークシートに適用して表示されるため、予期しない結果が生じます。

私が次のような単一エリア範囲を渡す場合

=ffifneps(B37:B38;C37:C38;". ")

すべて順調。

ところで、エリアを見ると、同じことが起こります。

...
For Each z In pre.Areas
    e = e & "'" & z.Parent.Name & "'!" & z.Address
    i = i + 1
    If (pre.Areas.Count > 1) And (i < pre.Areas.Count) Then e = e & ", "
Next z
...

私は何が間違っているのですか?ご協力いただきありがとうございます!

編集:当分の間、私はそれを次のようにパッチしました:

...
If (TypeName(Application.Caller) = "Range") Then
    If (wo.Areas.Count > 1) Then Set wo = Application.Caller.Parent.Range(wo.Address)
    If (TypeName(pre) = "Range") Then If (pre.Areas.Count > 1) Then Set pre = Application.Caller.Parent.Range(pre.Address)
    If (TypeName(suf) = "Range") Then If (suf.Areas.Count > 1) Then Set suf = Application.Caller.Parent.Range(pre.Address)
End If

醜いのですが、UDFは、マルチエリアの場合、実際のクロスワークシート範囲では使用できなくなります。しかし、私は疑問に思っていますか?..。

4

0 に答える 0