【Excel】ユーザ定義関数はワークシートの値を変更できない【VBA】
昔はまったことがあるので、自分用にメモしておきます。
ユーザ定義関数の制約
公式が↑に書いてあるとおりです。
でも実際に使ってみるまで気が付きませんでした。
はまった事例
Option Explicit
Dim P1 As String
Dim P2 As String
Function GetD(Rng As Range) As Double
P1 = "高"
P2 = "○"
Call test
GetD = WorksheetFunction.DCountA(Rng, 1, Range("A1:B2"))
End Function
Public Sub test()
With ActiveSheet
.Range("A1").Value = "優先度"
.Range("B1").Value = "判定"
.Range("A2").Value = P1
.Range("B2").Value = P2
End With
End Sub
上記のような、何の変哲もないワークシートの値を書き換えるtest()があったとします。
test()単体ではうまくいくけど、ユーザ定義関数GetDから呼び出すと、testは機能しません。
Excelのユーザ定義関数の制約によるものなんですが、気が付くまでしばらく時間がかかりました。
このほかにもフォントの色を変えるとか、ワークシートの名前を変えるとかもできません。