このような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は、マルチエリアの場合、実際のクロスワークシート範囲では使用できなくなります。しかし、私は疑問に思っていますか?..。