|
▼ponpon さん、こんばんは。
>もし気がつかれたら、返事をいただけるとうれしいです。
吉田が惜しい負け方をしたので眠れなくて・・・。
興味のない方には、何の事やらでしょうねえ・・・。
>コードを自分なりに理解しましたが、
>>rr = Evaluate("max(if(" & r_ad & "=""" & ComboBox1.Text & """,row(" & r_ad & ")))")
このEvaluateの中の数式は配列数式です。
例えば、VBA初心者さんの例でコンボボックスで「東北」を選択した場合、
Evaluateメソッドの中の数式は、
max(if([svtest.xls]Sheet1!$A$2:$A$10="東北",row([svtest.xls]Sheet1!$A$2:$A$10)))
となっています([・・・]の中は、私がテストしたブック名です)。
これは、「会社名が"東北"だったら、行番号返しなさい、そうでなかったら、False」
という配列をまず作成します。
頭にMAX関数がありますから、その配列の中の最大値を返すという数式です。
Max関数はFALSEは無視されます。
よって、東北の最大行が取得できる という数式です。
尚、Evaluateは、全ての配列数式を意図したように返してくれるわけではありませんので
注意して下さい。
必ず、事前に配列を作成してくれるか否かを確認する必要がありそうです。
私の場合、
1 セルに配列数式をサンプルとして作成して意図した値が表示されるか確認
2 Evaluateを使用して確認。駄目な場合は、配列として認識してくれるように工夫
(トップレベルのIF関数でA1:A10なんて使用していると成功率が高い)
3 実際に運用
という手順で使いますが・・・。
以前に投稿したものですが、
http://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=8119;id=excel
↑も読んでみて下さい。
>ここのところが、わかりません。
>
>多分、sheet1のr_adの値がComboBox1.Textならば、一番大きい行番号をrrという変数に格納しなさい。という意味だと思うのですが、
> Evaluateの使い方と、引数の文字列の記述の仕方が全くわかりません。
中身は、セルに記述する数式と一緒ですよ!!
もしかしたら、ダブルコーテーションかな?
文字列としてダブルコーテーションを表現するときは "" と二つ連続しなければ
なりませんが・・・。
蛇足ですが、ここの投稿で[A1].valueとか
[now()]なんて表記を見かけたことがありませんか?
これEvaluateの省略表記です。
Evaluate("a1") やEvaluate("now()")と同値です。
ここの投稿では、Range("a1")と記述するのが面倒なときに、たまに[a1]なんて
記述しますが、実際のコードでは使っていません。
以上です。
|
|