Evaluateを使ってマクロに記述した関数に変数を使う方法
"=SUMPRODUCT((ISERROR(FIND(A1,B1:B100))=FALSE)*(C1:C100<=10))"
という関数を普段使用しています。
ふとこの関数をマクロで実行させようと思い(理由はありません、思い付きです)、
Range("D1").Value = Evaluate("SUMPRODUCT((ISERROR(FIND(A1,B1:B100))=FALSE)*(C1:C100<=10))")
としてみました。うまくいきました。
次に、
Dim i As Long
For i = 1 To 5
Range("D" & i).Value = Evaluate("SUMPRODUCT((ISERROR(FIND(A1,B1:B100))=FALSE)*(C1:C100<=10))")
next
としてみました。ここで考えたのですが、
FIND(A1,B1:B100)
この部分の「A1」を「i」を使って(つまりRange("D" & i)に連動させて)変数にすることは出来るのでしょうか?
ご教示願います。
今回は単なる好奇心で普段使っている関数をマクロで表現できないかなと思った次第で、どうしても知りたい!必要だ!というわけではありません。
お暇なときにお願いします。
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
ご回答ありがとうございます。
自分でも違う方法で動かすことができましたが、いろいろな方法があるようでとても面白い世界だなと思います。
ご教示いただいた内容を参考に勉強してみます。
>それを、一般プロシージャで表現できて、始めて、マクロが分かるということになると思います。
ここにたどり着くまで長い道のりなんでしょうね。頑張ってみます。
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 のようなパターンならループでの処理になりますが。
ご回答ありがとうございます。
VBAやマクロにちょっと興味があるので、暇を見つけてはチョコチョコと独学でいじっている程度なのですが
そろそろ本格的に勉強してみようかと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
準・究極の選択
「年収1000万円で一生カレーライス」か 「年収180万円で毎日何でも食べ放題」 あなたはどちらを選びますか?
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
VBA Evaluate関数 型が一致しません
Excel(エクセル)
-
Excel 関数? 文字列になっている数値を計算したいのですが
Excel(エクセル)
-
Evaluate()に文字列の形式の数式を渡すには
Visual Basic(VBA)
-
-
4
複数の条件に合う行番号を取得するには
その他(Microsoft Office)
-
5
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
6
Filter関数を用いた結果、何も検索されなかった場合
Visual Basic(VBA)
-
7
vbaでworksheetfunctionでの複数関数がエラーになります
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで80万行、50列位のデ...
-
ゼロを表示
-
Excelの計算が合いません。 諸...
-
Excelの警告について
-
今まで文字化けなく開けていたc...
-
EXCELの散布図で日付が1900年に...
-
エクセルでファイルの最終更新...
-
エクセルの数式バーのフォント...
-
作成した数式を値として表示し...
-
ExcelでASCを使って全角を半角...
-
Excelセルを跨いで合計を出す方法
-
Excel 大小比較演算子による「...
-
Excel関数について教えてくださ...
-
マクロの処理が遅くなった
-
エクセルで入力すると隣のセル...
-
Excel関数について教えてくださ...
-
エクセルの文字が途中から消える
-
エクセルを使用して、円周率を...
-
エクセルのセル内に分数などの...
-
条件付き書式設定で罫線を引き...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelの警告について
-
Excelで数値を時間数に変換する...
-
エクセルの数式バーのフォント...
-
エクセルで数字の組み合わせを...
-
エクセルを使用して、円周率を...
-
Excelで特定の文字列が含まれて...
-
Excel 対象のセルに入力が無い...
-
任意の値が存在する行に名前を...
-
エクセルでファイルの最終更新...
-
index関数の説明をお願いします。
-
条件付き書式でやりたいのですが
-
重複しない値を取り出したい
-
【ExcelVBA】UTF-8(BOM無)でC...
-
【マクロ】マクロが割当てされ...
-
エクセル IF計算式?でしょうか?
-
エクセルで曜日を入れたい
-
表中の指定した条件の文字列を...
-
【Excel】版が同じ事を示す番号...
-
EXCELの散布図で日付が1900年に...
-
Excelについて。Excelに縦1列に...
おすすめ情報