• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Evaluateを使ってマクロに記述した関数に変数を使う方法)

Evaluateを使ったマクロでの関数実行方法

このQ&Aのポイント
  • Evaluateを使ってマクロで関数を実行する方法を解説します。
  • 特定のセルを変数にすることも可能です。
  • 使用する関数や変数によってマクロの実行方法も変わるので注意が必要です。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

>今回は単なる好奇心で普段使っている関数をマクロで表現できないかなと思った次第で、どうしても知りたい 今回のようなマクロで、配列数式を埋め込むというのは、マクロとは少し違う問題です。それに、Evaluate 内は、SUMPRODUCT 関数は必要ないのです。配列数式に、インクリメンタル変数を埋め込むのは簡単ですが、Excelのバージョンなどに影響受けてしまいますから、あまり多用すべきではないと思います。 それを、一般プロシージャで表現できて、始めて、マクロが分かるということになると思います。 '------------------------------------------- Sub Test1()   Dim i As Long   For i = 1 To 5     Cells(i, 4).Value = Evaluate("SUM((ISERROR(FIND(A" & i & ",B1:B100))=FALSE)*(C1:C100<=10))")   Next End Sub '以下は同じ内容のプロシージャです。 '------------------------------------------- Sub Test2()   Dim i As Long, j As Long   Dim strTxt As String   Dim cnt As Long   For i = 1 To 5     strTxt = Cells(i, 1).Value     For j = 1 To 100       If Cells(j, 2).Value Like "*" & strTxt & "*" Then         If Cells(j, 3).Value <= 10 Then           cnt = cnt + 1         End If       End If     Next     Cells(i, 5).Value = cnt     cnt = 0   Next End Sub

nagoya-1
質問者

お礼

ご回答ありがとうございます。 自分でも違う方法で動かすことができましたが、いろいろな方法があるようでとても面白い世界だなと思います。 ご教示いただいた内容を参考に勉強してみます。 >それを、一般プロシージャで表現できて、始めて、マクロが分かるということになると思います。 ここにたどり着くまで長い道のりなんでしょうね。頑張ってみます。

その他の回答 (1)

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.1

この例で Evaluate に渡している引数は文字列なのだから、   Evaluate("SUMPRODUCT((ISERROR(FIND(A" & Cstr(i) & ",B1:B100...(略)") のように & 演算子で単純に連結すればいいんじゃないかな。 ですが、私ならきっとこうします。 With Range("D1:D5")   .Formula = "=SUMPRODUCT((ISERROR(FIND(A1,$B$1:$B$100))=FALSE)*($C$1:$C$100<=10))"   .Value = .Value ' 数式を値に変換 End With 数式の内容は見てませんけど、このようにすれば A1 の部分はちょうど 数式のフィルのように変化します。変化させたくない部分は絶対参照で。 A1、A3、A5 のようなパターンならループでの処理になりますが。

nagoya-1
質問者

お礼

ご回答ありがとうございます。 VBAやマクロにちょっと興味があるので、暇を見つけてはチョコチョコと独学でいじっている程度なのですが そろそろ本格的に勉強してみようかと思います。

関連するQ&A