【Excel VBA】同一グループに、条件付きで連番を振る

記事
IT・テクノロジー

YouTubeでも紹介しています。是非ご覧ください。




連番をふるというのは、パソコンが行う単純作業で最もメジャーですよね。
しかし、なかなか、奥が深いです。
今回は条件付きで、連番を振ります。

同一グループに、条件付きで連番を振る

こんにちは。伊川です。
最近は、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毎、かつ、単勝オッズの低い順に連番を振りたいのです。
1.png

2.png

このようになります。


SUMPURODCT関数をVBAで実行 作業手順 その2 VBAで実行

3.png

こんな感じでコードを書いてみました。
4.png


出た、ACCESSなら、いざ知らず、Excelもかよと思いました。
結論としては、このようなコードは、VBAでは利用できないということが、NET上の情報にありました。
結構、VBA SUMPURODCTで検索すると、HITしました。


SUMPURODCT関数をVBAで実行 作業手順 その3  evaluateを使う

Evaluate(エヴァンユエイト)を利用します。
Evaluateは、Excel VBAでのみ使えるVBAコード上からExcelの数式を実行するための関数です。
つまり、セルに入れる数式を文字列としてVBAで実行できます。
なんとなく、難しいそうですよね。
5.png


こんなコードになります。
個人的には、変数の書き方が難しいと思いました。
書き方は、=SUMPRODUCT(($A$2:$A$524=A2)*($D$2:$D$524<D2))+1 
上記の数式を観ながら記載すればいいと思います。
特に説明は、不要かと思います。
注意点は、標準モジュールではなく、シートモジュールに記載したほうがいいのではないかと思います。

SUMPURODCT関数をVBAで実行 作業手順 その4 他の手段

沢山あると思います。
しかし、なぜ、SUMPURODCT関数だけが、WorksheetFunctionで実行できないのか不思議でした。
これは、完璧な競馬ネタで、秋のG1が始まるのに、別のやり方を探すのが面倒でした。
だから、このような方法で実現をしました。


ここがポイント

Evaluate(エヴァンユエイト)なんて知りませんでした。
しかし、便利な関数ですよね。
数式を実行する関数があるなんて便利です。
ということは、Evaluate(エヴァンユエイト)の引数は、数式となりますね。
ここに、気付かないと、VBAの迷宮にはりますね。

まとめ
VBAも、知っているようで、知らないことが沢山あります。
知らないことがあると、カンタンにはまってしまいます。
日々、勉強ですね。
今回も最後まで読んでいただきありがとうございました。



サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す