関数の戻り後にセルのサイズを自動調整する

関数の戻り後にセルのサイズを自動調整する

たくさんの関数を含む xla があります。基本的に、これらの関数はそれぞれ別のワークシートで垂直ルックアップを実行します。以下は、そのうちの 1 つの基本的な例です。

Function ax2Project_Address(projectnumber)
If (projectnumber = "?") Then
    ax2Project_Address = "Unknown address"
Else
    ax2Project_Address = Application.VLookup(projectnumber, Sheets("AX Data").Range("A:K"), 11, False)
End Function

これにより、ユーザーはワークシート上のプロジェクト番号で関数を呼び出すだけで、垂直ルックアップを自分で記述しなくても、アドレスを取得できます。
今やりたいのは、現在のセルの行の高さをその内容に合わせて自動調整することです。問題は、これは明らかにセルにアドレスが入力された後に実行する必要があることですが、関数は return 後に終了するため、自動調整コマンドは実行されません。

関数内で return 後に autofit コマンドを実行する方法はありますか?
または、まったく異なるアプローチを使用できますか?

答え1

関数は、呼び出されたセル以外、Excel 内の何も変更できません。そうは言っても、関数がルーチンをトリガーすることはできると思います。

Option Explicit

Public Function eieio(numb As Long) As Long
    eieio = Int(numb / 2)
    Test
End Function


Sub Test()
MsgBox ("hi")
End Sub

eieio(12) = 6 および msgbox "hi"

そうは言っても、あなたができない次のようなことです -

Option Explicit

Public Function eieio(numb As Long) As Long
    eieio = Int(numb / 2)
    Test
End Function


Sub Test()
Dim str As String
str = Application.Caller.Address
Dim rng As Range
Set rng = Range(str)
MsgBox (rng.Address)
rng.EntireRow.AutoFit
End Sub

したがって、私の知る限り、ルーチンは application.caller を変更できません。それは常にそうでした。

答え2

シート全体を自動調整したくない場合は、ワークシート コード モジュールでこれを使用します。

Private Sub Worksheet_Calculate()
    Dim a As Range
    For Each a In Me.UsedRange
        If a.Formula Like "=ax2Project_Address(*" Then a.EntireRow.AutoFit
    Next a

End Sub

関連情報