Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(指定なし : 指定なし)
RE: 数式を入力(関数組み合わせ)
投稿日時: 23/08/19 10:03:43
投稿者: simple

「数式を入力(関数組み合わせ)」
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)は今後とも機能として残るような気がしています。

投稿日時: 23/08/22 19:32:02
投稿者: simple

閉じます。