この記事では、EXCELを利用してナンバー3の過去の当選番号の各数字の出現回数をカウントする方法について説明しています。
過去の当選番号データを提供しているサイトがあるので、そちらからダウンロードして利用させてもらいます。
この機能を応用すれば、CSVファイルをEXCELに取込して、データ加工することができるようになります。
それでは、EXCELでナンバー3の過去の当選番号から各数字の出現回数をカウントする機能を作成していきましょう。
※あくまでもカウントしただけですので、参考にするかは自己責任でお願いします。
困っている女性
困っている女性
解決する男性
困っている女性
解決する男性
解決する男性
困っている女性
EXCELでナンバー3の過去の当選番号から各数字の出現回数をカウントする機能に必要なものを、1つ1つ順番に説明していきます。
もくじ
1.出現回数を出力するシートを作成する
まず、「取込ファイルパス」を指定する欄を作成します。
つぎに、各数字の出現回数を出力する欄を作成します。
「ナンバー3分析」シートを作成する
- 「ナンバー3分析」という名前のシートを作成します。
- 1行目に「取込ファイルパス」のタイトル行を作成します。
- 2行目に「取込ファイルパス」を入力する欄を作成します
- 3行目に「各数字の出現回数」のタイトル行を作成します。
- 4行目に「数字」、「百の位」、「十の位」、「一の位」のタイトル行を作成します。
- 5行目から14行目に、各数字の出現回数を出力する欄を作成します。
百の位、十の位、一の位に出現した各数字(0から9)の回数が出力されます。
2.ナンバー3の過去の当選番号データを準備する
それでは、一番大事なナンバー3の過去の当選番号データを準備しましょう。
ナンバー3の過去の当選番号データをダウンロードする
以下のサイトからデータをダウンロードできます。
http://www.toe.jp/numbers34/download/
上記の画像の「Number3.lzh」というリンクをクリックして、データをダウンロードさせてもらいましょう。
ダウンロードしたデータは、解凍ソフトを利用して、解凍してください。
解凍すると、以下の「Numbers3.csv」ファイルになります。
ちなみに、ダウンロードした「Number3.csv」ファイルの中身は以下のようになっています。
1、2行目はタイトル行となっており、3行目から実際のデータとなっています。
3.VBAで過去の当選番号をカウントする機能を作成する
「Microsoft Visual Basic for Applications」を起動します。
標準モジュールを追加して、以下のソースを書きます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
Public Sub MainProc() Dim shtMain As Worksheet Dim filePath As String Dim buf As String Dim arrBuf() As String Dim lng100(9) As Long Dim lng10(9) As Long Dim lng1(9) As Long Dim i As Integer Dim lineNo As Long Dim tmp As String Dim num100 As String Dim num10 As String Dim num1 As String '①「ナンバー3分析」シートを変数に格納する Set shtMain = ThisWorkbook.Sheets("ナンバー3分析") '②取込ファイルパスを変数に格納する filePath = shtMain.Range("A2") '③百の位、十の位、一の位を格納する配列を初期化する For i = 0 To 9 lng100(i) = 0 lng10(i) = 0 lng1(1) = 0 Next '④行番号を初期化する lineNo = 0 '⑤取込ファイルを開く Open filePath For Input As #1 '⑥取込ファイルの最終行まで読込みを繰り返す Do Until EOF(1) '⑦行番号をカウントアップする lineNo = lineNo + 1 '⑧1行読込み、変数に格納する Line Input #1, buf '⑨3行目以降を処理する If lineNo >= 3 Then '⑩カンマで区切って、配列に格納する arrBuf = Split(buf, ",") '⑪3個目の値を変数に格納する tmp = arrBuf(2) '⑫百の位、十の位、一の位の数字を変数に格納する num100 = Mid(tmp, 2, 1) num10 = Mid(tmp, 3, 1) num1 = Mid(tmp, 4, 1) '⑬百の位、十の位、一の位の配列の各数字の出現回数をカウントアップする lng100(num100) = lng100(num100) + 1 lng10(num10) = lng10(num10) + 1 lng1(num1) = lng1(num1) + 1 End If Loop '⑭ファイルを閉じる Close #1 '⑮出現回数を「ナンバー3分析」シートに書き込む For i = 0 To 9 shtMain.Range("B" & 5 + i) = lng100(i) shtMain.Range("C" & 5 + i) = lng10(i) shtMain.Range("D" & 5 + i) = lng1(i) Next MsgBox "完了" End Sub |
4.過去の当選番号をカウントする機能の使い方
それでは、過去の当選番号をカウントする方法を説明します。
まず、「ナンバー3分析」シートのA2セルに先程ダウンロードした「Numbers3.csv」を保存しているパスを入力します。
次に、「開発」タブの「マクロ」をクリックします。
先程作成した自作関数「MainProc」が一覧に表示されていますので、選択します。
次に、「実行」ボタンをクリックして処理を開始します。
少し待つと、各数字のカウント結果が「ナンバー3分析」シートの5行目から14行目に表示されます。
どうですか、簡単でしょ。
過去の当選数字の百の位は、9が一番多く出現していることがわかります。
逆に一番出現回数が少ないのは、5です。
ちなみに、百の位の0から9の出現回数(B5~B14)をすべて足すと、ダウンロードデータの最新の回別の数字になります。5461になります。
まあ、当たり前ですが。
十の位も、一の位も5461になります。
回別に各数字の出現回数をカウントしているので、すべて足すと最大の回別の数字になります。
5.CSVファイルを作成するVBAプログラムの説明
それでは、VBAプログラムを説明します。
①「ナンバー3分析」シートを変数に格納する
1 2 |
'①「ナンバー3分析」シートを変数に格納する Set shtMain = ThisWorkbook.Sheets("ナンバー3分析") |
そうすることにより、入力するプログラムを短くすることができるからです。
何度も「ThisWorkbook.Sheets(“ナンバー3分析”)」と入力するより、「shtMain」と入力するほうが少なくてすむからです。
②取込ファイルパスを変数に格納する
1 2 |
'②取込ファイルパスを変数に格納する filePath = shtMain.Range("A2") |
③百の位、十の位、一の位を格納する配列を初期化する
1 2 3 4 5 6 |
'③百の位、十の位、一の位を格納する配列を初期化する For i = 0 To 9 lng100(i) = 0 lng10(i) = 0 lng1(1) = 0 Next |
lng100には百の位用、lng10は十の位用、lng1は一の位用です。
ちなみに、lng100(0)には百の位に0が出現した回数を格納します。
lng100(9)には、9が出現した回数を格納します。
④行番号を初期化する
1 2 |
'④行番号を初期化する lineNo = 0 |
1行ずつ処理を進めるたびに、カウントアップし、行番号と同じ数字が格納されることになります。
⑤取込ファイルを開く
1 2 |
'⑤取込ファイルを開く Open filePath For Input As #1 |
ファイルを開かないと、中身のデータを参照することができないからです。
⑥取込ファイルの最終行まで読込みを繰り返す
1 2 |
'⑥取込ファイルの最終行まで読込みを繰り返す Do Until EOF(1) |
EOFは、「END OF FILE」の略で、ファイルの最終行を意味します。
数字の1は、取込ファイルを開く処理で指定した#1の1です。
⑦行番号をカウントアップする
1 2 |
'⑦行番号をカウントアップする lineNo = lineNo + 1 |
初期化時に0が格納されていますので、カウントアップされて1、2と数字が大きくなります。
現在何行目を処理をしているか判断するために、この変数は利用します。
⑧1行読込み、変数に格納する
1 2 |
'⑧1行読込み、変数に格納する Line Input #1, buf |
⑨3行目以降を処理する
1 2 |
'⑨3行目以降を処理する If lineNo >= 3 Then |
なぜなら、今回利用するファイルの1・2行目はタイトル行となっており、利用しないからです。
⑩カンマで区切って、配列に格納する
1 2 |
'⑩カンマで区切って、配列に格納する arrBuf = Split(buf, ",") |
具体的には、1つ目のカンマまでの文字列は、arrBuf(0)に格納されます。
1つ目のカンマと2つ目のカンマの間の文字列は、arrBuf(1)に格納されます。
⑪3個目の値を変数に格納する
1 2 |
'⑪3個目の値を変数に格納する tmp = arrBuf(2) |
この配列は0から値が格納されているので、2が3番目となります。
具体的には、配列の1番目には「回別」、配列の2番目には「抽選日」、配列の3番目には「当せん番号」が格納されています。
なので、3番めの値を利用します。
⑫百の位、十の位、一の位の数字を変数に格納する
1 2 3 4 |
'⑫百の位、十の位、一の位の数字を変数に格納する num100 = Mid(tmp, 2, 1) num10 = Mid(tmp, 3, 1) num1 = Mid(tmp, 4, 1) |
変数「tmp」には、当せん番号の値が格納されていますが、「”123″」のようにダブルコーテーションが含まれています。
なので、tmpの2文字目から1文字を取得して、num100に格納しています。
“123”の場合、num100には1、num10には2、num1には3がそれぞれ格納されます。
⑬百の位、十の位、一の位の配列の各数字の出現回数をカウントアップする
1 2 3 4 |
'⑬百の位、十の位、一の位の配列の各数字の出現回数をカウントアップする lng100(num100) = lng100(num100) + 1 lng10(num10) = lng10(num10) + 1 lng1(num1) = lng1(num1) + 1 |
各位の配列の添字(0~9)が各位の数字になります。
その添字の数字が出現すれば、カウントアップされることになります。
配列「lng100」に1が格納されている場合、カウントアップされて、2が格納されます。
このようにして、各位の数字の出現に応じて、出現回数をカウントしています。
⑭ファイルを閉じる
1 2 |
'⑭ファイルを閉じる Close #1 |
⑮出現回数を「ナンバー3分析」シートに書き込む
1 2 3 4 5 6 |
'⑮出現回数を「ナンバー3分析」シートに書き込む For i = 0 To 9 shtMain.Range("B" & 5 + i) = lng100(i) shtMain.Range("C" & 5 + i) = lng10(i) shtMain.Range("D" & 5 + i) = lng1(i) Next |
百の位の0~9の出現回数をセルB5~B14にセットしています。
十の位の0~9の出現回数をセルC5~C14にセットしています。
一の位の0~9の出現回数をセルD5~D14にセットしています。
※あくまでもカウントしただけですので、参考にするかは自己責任でお願いします。
以上です。
最後まで読んでいただきありがとうございました。
この記事をシェアしていただけると喜びます。