【Excel VBA】同一グループに、条件付きで連番を振る
YouTubeでも紹介しています。是非ご覧ください。
連番をふるというのは、パソコンが行う単純作業で最もメジャーですよね。
しかし、なかなか、奥が深いです。
今回は条件付きで、連番を振ります。
同一グループに、条件付きで連番を振る
こんにちは。伊川(@naonaoke)です。
最近は、Excelばかりやっているので、Excelもやってみようと思います。
Excelで、同一グループに、条件付きで連番を振るというのは、どのようにするのか?
悩みました・・・・・・
ACCESSなら、カンタンできるのですが、Excelでは、やったことがありません。
関数を利用すればカンタンできるのですが、VBAでは、どうするのか?
WorkSheetFunctionならばできるだろうと安直な思いからやったのですが、なかなか厳しい過程となりました。
このブログはこんな人にお勧め
ExcelでVBAを勉強している人
VBAで連番を振りたい人
VBAでSUMPURODCT関数を利用したい人
このブログを、読み終わるころには・・・・
WorkSheetFunctionを、関数のように利用できると思っていましたが、そうではありませんでした。
結構考えましたが、Excelでも型が一致しませんというエラーに嫌気がさしましたが、なんとか完成しました。
その過程を見てください。
SUMPURODCT関数をVBAで実行
今は、それほど利用されませんが、COUNTIFS関数が登場するまでは、私の会社では、よく利用していました。
配列の対応する要素間の積をまず計算し、さらにその和を返します。
ただし、SUMPRODUCT関数は数値以外の配列要素は、0であると見なされます。
SUMPRODUCT関数で複数条件の件数をカウントしたり、合計を出すことができます。
SUMPRODUCT関数を用いて、1行/1列おきに計算することもできます。
こんな関数です。
私の上席が、VLOOKUP関数、IF関数、SUMPRODUCT関数の大ファンでした。
月末になると、Excelが起動するのに、3分かかるという伝説のExcelでした。
SUMPURODCT関数をVBAで実行 作業手順 その1 ワークシート関数で実行
やりたいことは、レースID毎、かつ、単勝オッズの低い順に連番を振りたいのです。
このようになります。
SUMPURODCT関数をVBAで実行 作業手順 その2 VBAで実行
こんな感じでコードを書いてみました。
出た、ACCESSなら、いざ知らず、Excelもかよと思いました。
結論としては、このようなコードは、VBAでは利用できないということが、NET上の情報にありました。
結構、VBA SUMPURODCTで検索すると、HITしました。
SUMPURODCT関数をVBAで実行 作業手順 その3 evaluateを使う
Evaluate(エヴァンユエイト)を利用します。
Evaluateは、Excel VBAでのみ使えるVBAコード上からExcelの数式を実行するための関数です。
つまり、セルに入れる数式を文字列としてVBAで実行できます。
なんとなく、難しいそうですよね。
こんなコードになります。
個人的には、変数の書き方が難しいと思いました。
書き方は、=SUMPRODUCT(($A$2:$A$524=A2)*($D$2:$D$524<D2))+1
上記の数式を観ながら記載すればいいと思います。
特に説明は、不要かと思います。
注意点は、標準モジュールではなく、シートモジュールに記載したほうがいいのではないかと思います。
SUMPURODCT関数をVBAで実行 作業手順 その4 他の手段
沢山あると思います。
しかし、なぜ、SUMPURODCT関数だけが、WorksheetFunctionで実行できないのか不思議でした。
これは、完璧な競馬ネタで、秋のG1が始まるのに、別のやり方を探すのが面倒でした。
だから、このような方法で実現をしました。
ここがポイント
Evaluate(エヴァンユエイト)なんて知りませんでした。
しかし、便利な関数ですよね。
数式を実行する関数があるなんて便利です。
ということは、Evaluate(エヴァンユエイト)の引数は、数式となりますね。
ここに、気付かないと、VBAの迷宮にはりますね。
まとめ
VBAも、知っているようで、知らないことが沢山あります。
知らないことがあると、カンタンにはまってしまいます。
日々、勉強ですね。
今回も最後まで読んでいただきありがとうございました。
サンプルファイル
私のホームページでも販売しています。このようなファイルは、全部で、300ファイル前後ありますが、総ダウンロード数は、10,000件を、超えました。10,000件超えてから、面倒なので、カウントしていないです。
勉強したい方、会社の実務で利用したい方にお勧めです。
はっきり言いますが、ネットで調べる時間を考えたら、購入したほうが、時間の節約になります。
まして、ネットのコードは、作動するとは限りません。
料金は、200円です。
よろしくお願いします。
ここから先は
¥ 200
よろしければサポートをお願いします。いただいたお金に関しては、書籍の購入に充て、より良い情報を皆様に提供します。