この記事では、EXCELを利用してナンバー3の過去の当選番号の各数字の出現回数をカウントする方法について説明しています。
過去の当選番号データを提供しているサイトがあるので、そちらからダウンロードして利用させてもらいます。
この機能を応用すれば、CSVファイルをEXCELに取込して、データ加工することができるようになります。
それでは、EXCELでナンバー3の過去の当選番号から各数字の出現回数をカウントする機能を作成していきましょう。
※あくまでもカウントしただけですので、参考にするかは自己責任でお願いします。
困っている女性
困っている女性
解決する男性
困っている女性
解決する男性
解決する男性
困っている女性
EXCELでナンバー3の過去の当選番号から各数字の出現回数をカウントする機能に必要なものを、1つ1つ順番に説明していきます。
もくじ
1.出現回数を出力するシートを作成する
まず、「取込ファイルパス」を指定する欄を作成します。
つぎに、各数字の出現回数を出力する欄を作成します。
「ナンバー3分析」シートを作成する
「ナンバー3分析」シートを作成する
- 「ナンバー3分析」という名前のシートを作成します。
- 1行目に「取込ファイルパス」のタイトル行を作成します。
- 2行目に「取込ファイルパス」を入力する欄を作成します
- 3行目に「各数字の出現回数」のタイトル行を作成します。
- 4行目に「数字」、「百の位」、「十の位」、「一の位」のタイトル行を作成します。
- 5行目から14行目に、各数字の出現回数を出力する欄を作成します。
百の位、十の位、一の位に出現した各数字(0から9)の回数が出力されます。
2.ナンバー3の過去の当選番号データを準備する
それでは、一番大事なナンバー3の過去の当選番号データを準備しましょう。
ナンバー3の過去の当選番号データをダウンロードする
以下のサイトからデータをダウンロードできます。
http://www.toe.jp/numbers34/download/
過去データのダウンロードできるサイト
上記の画像の「Number3.lzh」というリンクをクリックして、データをダウンロードさせてもらいましょう。
ダウンロードしたデータは、解凍ソフトを利用して、解凍してください。
解凍すると、以下の「Numbers3.csv」ファイルになります。
ダウンロードしたCSVファイル
ちなみに、ダウンロードした「Number3.csv」ファイルの中身は以下のようになっています。
1、2行目はタイトル行となっており、3行目から実際のデータとなっています。
ダウンロードしたCSVファイルの中身
3.VBAで過去の当選番号をカウントする機能を作成する
「Microsoft Visual Basic for Applications」を起動します。
VBAプログラムを記入する(その1)
VBAプログラムを記入する(その2)
標準モジュールを追加して、以下のソースを書きます。
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分析」シートを変数に格納する
'①「ナンバー3分析」シートを変数に格納する
Set shtMain = ThisWorkbook.Sheets("ナンバー3分析")
ここでは、このあとの処理で何度も使う「ナンバー3分析」シートを変数に格納しています。
そうすることにより、入力するプログラムを短くすることができるからです。
何度も「ThisWorkbook.Sheets(“ナンバー3分析”)」と入力するより、「shtMain」と入力するほうが少なくてすむからです。
②取込ファイルパスを変数に格納する
'②取込ファイルパスを変数に格納する
filePath = shtMain.Range("A2")
ここでは、このあとの処理で利用する取込ファイルパスを変数に格納しています。
③百の位、十の位、一の位を格納する配列を初期化する
'③百の位、十の位、一の位を格納する配列を初期化する
For i = 0 To 9
lng100(i) = 0
lng10(i) = 0
lng1(1) = 0
Next
ここでは、あとの処理で各数字のカウントした結果を格納する配列を初期化しています。
lng100には百の位用、lng10は十の位用、lng1は一の位用です。
ちなみに、lng100(0)には百の位に0が出現した回数を格納します。
lng100(9)には、9が出現した回数を格納します。
④行番号を初期化する
'④行番号を初期化する lineNo = 0
ここでは、取込ファイルの処理している行番号を格納する変数を0で初期化しています。
1行ずつ処理を進めるたびに、カウントアップし、行番号と同じ数字が格納されることになります。
⑤取込ファイルを開く
'⑤取込ファイルを開く Open filePath For Input As #1
ここでは、先程変数「filePath」に格納された取込ファイルパスを利用して、ファイルを開いています。
ファイルを開かないと、中身のデータを参照することができないからです。
⑥取込ファイルの最終行まで読込みを繰り返す
'⑥取込ファイルの最終行まで読込みを繰り返す Do Until EOF(1)
ここでは、取込ファイルの最終行まで1行ずつ処理を進め、最終行になるまで処理を繰り返すことを表しています。
EOFは、「END OF FILE」の略で、ファイルの最終行を意味します。
数字の1は、取込ファイルを開く処理で指定した#1の1です。
⑦行番号をカウントアップする
'⑦行番号をカウントアップする lineNo = lineNo + 1
ここでは、変数「lineNo」をカウントアップしています。
初期化時に0が格納されていますので、カウントアップされて1、2と数字が大きくなります。
現在何行目を処理をしているか判断するために、この変数は利用します。
⑧1行読込み、変数に格納する
'⑧1行読込み、変数に格納する Line Input #1, buf
ここでは、1行分のデータをファイルから読込して、変数「buf」に格納しています。
⑨3行目以降を処理する
'⑨3行目以降を処理する If lineNo >= 3 Then
ここでは、3行目以降かどうかを判断し、3行目以降なら処理をするように制御しています。
なぜなら、今回利用するファイルの1・2行目はタイトル行となっており、利用しないからです。
⑩カンマで区切って、配列に格納する
'⑩カンマで区切って、配列に格納する arrBuf = Split(buf, ",")
ここでは、ファイルから読み込んだ1行分のデータをカンマ区切りで分割して、配列に格納しています。
具体的には、1つ目のカンマまでの文字列は、arrBuf(0)に格納されます。
1つ目のカンマと2つ目のカンマの間の文字列は、arrBuf(1)に格納されます。
⑪3個目の値を変数に格納する
'⑪3個目の値を変数に格納する tmp = arrBuf(2)
ここでは、配列「arrBuf」に格納されている値の3番めを変数「tmp」に格納しています。
この配列は0から値が格納されているので、2が3番目となります。
具体的には、配列の1番目には「回別」、配列の2番目には「抽選日」、配列の3番目には「当せん番号」が格納されています。
なので、3番めの値を利用します。
⑫百の位、十の位、一の位の数字を変数に格納する
'⑫百の位、十の位、一の位の数字を変数に格納する num100 = Mid(tmp, 2, 1) num10 = Mid(tmp, 3, 1) num1 = Mid(tmp, 4, 1)
ここでは、変数「num100」に百の位の数字を格納し、変数「num10」に十の位の数字を格納し、変数「num1」に一の位の数字を格納しています。
変数「tmp」には、当せん番号の値が格納されていますが、「”123″」のようにダブルコーテーションが含まれています。
なので、tmpの2文字目から1文字を取得して、num100に格納しています。
“123”の場合、num100には1、num10には2、num1には3がそれぞれ格納されます。
⑬百の位、十の位、一の位の配列の各数字の出現回数をカウントアップする
'⑬百の位、十の位、一の位の配列の各数字の出現回数をカウントアップする lng100(num100) = lng100(num100) + 1 lng10(num10) = lng10(num10) + 1 lng1(num1) = lng1(num1) + 1
ここでは、先程格納した各位の数字num100、num10、num1を利用して、各位の数字の出現回数をカウントアップしています。
各位の配列の添字(0~9)が各位の数字になります。
その添字の数字が出現すれば、カウントアップされることになります。
配列「lng100」に1が格納されている場合、カウントアップされて、2が格納されます。
このようにして、各位の数字の出現に応じて、出現回数をカウントしています。
⑭ファイルを閉じる
'⑭ファイルを閉じる Close #1
ここでは、ファイルの利用が終わりましたので、ファイルを閉じています。
⑮出現回数を「ナンバー3分析」シートに書き込む
'⑮出現回数を「ナンバー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
ここでは、先程までカウントしていた各位の数字の出現回数を「ナンバー3分析」シートにセットしています。
百の位の0~9の出現回数をセルB5~B14にセットしています。
十の位の0~9の出現回数をセルC5~C14にセットしています。
一の位の0~9の出現回数をセルD5~D14にセットしています。
※あくまでもカウントしただけですので、参考にするかは自己責任でお願いします。
以上です。
最後まで読んでいただきありがとうございました。
この記事をシェアしていただけると喜びます。

