「数式を入力(関数組み合わせ)」
https://www.moug.net/faq/viewtopic.php?t=82409
について。
解決後ですが、コメントを追加させてください。
(1)
Excel365であれば、XLOOKUP関数を使ったほうが簡単です。
関数一つでできますし、マッチしない場合の返り値もその関数内で指定できます。
調べてみて下さい。
(2)
質問者 さんの引用:
一気に範囲は指定できないのですね。。。
値張りだと困るので、検討します。
ということであれば、3番目の方法はもともと対象外とすべきでしょう。
ま、行きがかり上、仮に値書き込みでよいとした場合の話を続けます。
うっかりテスト用のシート指定で提示してしまったので、読み飛ばされたようですので、
改めて載せます。
値を直接書き込むのであれば、以下のように書けます。
With Application
Range("E5:E" & plan_lastRow) = _
.IfNa(.Index(Sheets("指示書").Columns("I"), _
.Match(Range("D5:D" & plan_lastRow), Sheets("指示書").Columns("G"), 0) _
), _
" - ")
End With
ワークシート関数を使う場合、
(a)(Application.)WorksheetFunction. を頭につける方法
(b)Application. を頭につける方法
の二つの方法があります。
歴史的には(a)のほうが新しいもの(Excel97で導入)ですが、
(b)には捨てがたい魅力もあります。
それは、Matchで合致するものが無かった場合などに、
・(a)がエラーになって、処理がストップするのに対して、
・(b)は処理は止まらずに、単にエラー値を返すという点です。
もちろん、既に解説がありましたように、On Error と組み合わせて(a)を使うことができます。
(b)の場合は、m = Application.Match(...省略...)として、
IF IsNumeric(m) Then (マッチあり)とか、
IF IsError(m) Then (マッチせず)などと、簡単に条件分岐ができます。
https://www.moug.net/tech/exvba/0100035.html のサンプル3を参照してください。
(なお、上記のコードでは、マッチ判定をIsNAにさせていることになります)
結構、(b)を使う方も多い印象です。 (b)は今後とも機能として残るような気がしています。