目次
各列の、最大値を抽出する。1番大きい数字を算出
こんにちは。伊川(@naonaoke)です。
今回は、各横列の最大値を1発で抽出したいと思います。
今回も競馬ネタなのですが、実務で利用することがあるかもしれません。
私の業務では、最大値を抽出することは、良くあります。
その場合は、Max関数を使いますが、関数では、私はやりたくありません。
なので、VBAを利用して、最大値を抽出します。
このブログはこんな人にお勧め
- VBAを勉強している人
- ループを理解できていない人
- 配列を勉強している人
このブログを、読み終わるころには・・・・
ループを理解できるようになります。
ローカルウィンドウの利用方法を理解できるようになります。
若干、配列の理屈も理解できるようになります。
最大値を抽出
この話は、Excelには、まったく関係ありませんが、競馬において、各競走馬を、スピード指数という数値を使って、各競走馬の能力を比較するという考え方があります。
そのスピード指数の一番大きい数字を抽出したいのです。
これを関数で実現するのもいいのですが、VBAの方が汎用性がありますので、VBAで実現します。
この記事を読む前に、下記の記事も併せて読んでいただけると、より理解が深まります。
各週ごとに、競走馬の頭数は異なります。
なので、Excelの縦列の最後、横列の最後を取得する技術が必須になります。
最大値を抽出 作業手順 その1 データベース確認
使い方は、カンタンです。
=RANDBETWEEN(50,250)
セルA1~セルH18まで、ランダムな数字が入力されています。
各横列の最大値をI列に表示させます。
最大値を抽出 作業手順 その2 利用する変数
変数iは、ループに利用する変数です。
変数maxRは、縦列の最後のセル番号を取得します。
変数maxCが、横列の最後のセル番号を取得します。
変数myArrayは、配列を可能する変数です。配列を格納する場合は、Variant型を宣言する方が、失敗がないです。
これが各列の最終値を取得する書き方です。
これは公式として覚えてください。
なかなか、NETで調べても、HITしないのが、現状です。
この2つのコードを利用すると、下図のようになります。
このようにして、Excelの端を指定することが出来ます。
非常に重要な考え方なので、ぜひ、スキルにしてください。
最大値を抽出 作業手順 その3 ループを設定する
上の図のように記載します。
ループに関しては、下記の記事を参照してください。
myArray = Range(Cells(i, 1), Cells(i, maxC))
myArrayに配列を格納しています。
このRangeとcellsを利用して、セルの範囲の指定も、本当に重要です。
基本書等では、あまり説明されていませんが、基本中の基本なので、知識が怪しい人は、下記の記事を参考にしてください。
最大値を抽出 作業手順 その4 ローカルウィンドウで確認する
イミディエイトウィンドウや、ローカルウィンドウどの各種機能が、VBEの画面があります。
初心者のころは、どのように利用するかわからないと思います。
初心者あるある
配列を指定したけど、本当の格納されているのかわからない
そんなときは、下図のようにコードの途中にStopと入力しましょう。
今回は、必ずループの中に記載してください。
中断させることによって、今記載したコードが、どのような状態になっているのかを、ローカルウィンドウで確認できます。
エラーが表示されなければ、そのコードは正しく動いています。
myArray(1)には、横列の一番先頭が格納されているのがわかります。
最大値を抽出 作業手順 その5 VBAで、ワークシート関数を利用する。
このように記載します。
今回の変数iを使って、セルに表現をします。
ループで利用した変数を使わないと、セルに最大値を取得することが出来ません。
変数を自在に操作する
上の図の書き方ですが、これも非常に重要です。
つまり、9番目に書き出せと記載しているのです。
このコードも、私は、初心者のころは、理解できませんでした。
しかし、理解した時は、本当に感動しました。
最大値が抽出されました。
完成のコード
ここがポイント
今回は、ローカルウィンドウの使い方も併せて説明しました。自分の記載したコードがどのように格納されているか、変数がどのような値を取得しているのかを、可視化できれば、難しくありません。各変数、配列が、どのような状態になっているのかローカルウィンドウで必ず確認する癖をつけましょう。そうすれは、配列や、ループも意外にカンタンかもしれません。
まとめ
今回は、配列を利用したカンタンなコードを紹介しました。
本記事のデータベースを見て、これは、配列を利用した方がカンタンと思った人は、スキルアップしていると思います。
競馬ネタなのですが、きっと実務でも利用する機会はあると思います。
実務で利用しなくても、今回のコードは、ループ、配列を利用した一番カンタンなコードです。
壁にぶつかったら、参考にしてみてください。
最後まで、読んでいただきありがとうございました。
今回のサンプルファイルは、No178です。
わからない事を延々と考えるのは、無駄です。
- なんで作動かないの?
- もうやだ!VBAなんか嫌い!
- ネットで調べても情報がない!
必ず作動するコードが、ここにあります。