pickup

連番をふるというのは、パソコンが行う単純作業で最もメジャーですよね。

しかし、なかなか、奥が深いです。

今回は条件付きで、連番を振ります。

目次

スポンサーリンク

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

 

こんにちは。伊川(@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で実行

 

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

Naosuke

出た、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が始まるのに、別のやり方を探すのが面倒でした。

だから、このような方法で実現をしました。

 

ここがポイント

 

ここがポイント
Function8.png
Evaluate(エヴァンユエイト)なんて知りませんでした。

しかし、便利な関数ですよね。

数式を実行する関数があるなんて便利です。

ということは、Evaluate(エヴァンユエイト)の引数は、数式となりますね。

ここに、気付かないと、VBAの迷宮にはりますね。

動画とブログでわかりやすくExcelとACCESSを紹介しています

 

 

まとめ

 

 

VBAも、知っているようで、知らないことが沢山あります。

知らないことがあると、カンタンにはまってしまいます。

日々、勉強ですね。

 

今回も最後まで読んでいただきありがとうございました。

 

スポンサーリンク