VBAでこんなことできます_その1 フォルダ作成
イントロ
どうもinageです。
最近はRPAとかを中心に業務自動化であれこれやっております。
RPAとかGASとかIFTTTとか、手作業でやっていたことを自動化できる仕組みが色々あって、便利な世の中ですね。
たまに理解のある現場だと「VBAで良くないっすか」という意見が通ったり、運が良いと「じゃあちょっと教えてよ」と言われることもあって嬉しい限りです。
そんな時、「VBAでこんなことできます」ととりあえず見せて「おー」と言ってもらいたい。
何も準備がない時にすぐに見せられるものがあればいいな、ということで久しぶりにこのブログを思い出しました。
が
あんまり見せられるものがない。。。
で
簡単なもので、どんなことができるかわかるようなものをほぼ自分のためにいくつか上げていきたいとおもいます。
どんなマクロ
フォルダを選択して、その配下にサブフォルダを一括で作ります。
使い方
1)フォルダ選択ボタン-> フォルダを選択する
2)B7以下に作りたいサブフォルダ名を入力していく
3)フォルダ作成ボタンを押す
コード
Option Explicit Sub フォルダ選択() Dim r As Range Set r = Sheets(1).Range("B2") With Application.FileDialog(msoFileDialogFolderPicker) .AllowMultiSelect = False .InitialFileName = ActiveWorkbook.Path If .Show = True Then r = .SelectedItems(1) End If End With End Sub Sub フォルダ作成() Dim rootPath As String Dim i As Long Dim maxRow As Long Dim folderName As String Dim fullPath As String Const startRow = 7 rootPath = Range("B2") If Dir(rootPath, vbDirectory) = "" Then MsgBox "フォルダを選択してください" End End If maxRow = Cells(Rows.Count, 2).End(xlUp).Row If maxRow < startRow Then MsgBox "サブフォルダ名をB列に1つ以上入れてください" End End If For i = startRow To maxRow folderName = Cells(i, 2) fullPath = rootPath & "¥" & folderName ' Debug.Print i & "_" & fullPath If Dir(fullPath, vbDirectory) = "" Then MkDir fullPath End If Next End Sub
諸注意
・Windowsで動作します
・デモ用なので、エラー処理とかちゃんとやってません
・自由に使っていただいて構いませんが、自己責任でお願いします
・バナナはおやつに入りません
ASUSのMEMOPADが反応しなくなったのでとりあえずFireタブレットでLineができるようになれ
イントロ
愛用のASUS ME173タブレットが2度目の反抗期(電源が入らない。反応しない)に入り、前回は色々調べて
タブレットの電源が入らない!ASUS MeMO Padを強引に蘇生させた方法 | 伊東制作所
こんな感じのことをして回復したのですが、今回は何度やっても反応がない。
で、手元にあるFireタブレットでとりあえずLineだけでも復活させたいなと。
こちらのページをとても参考にさせていただきました。
ただし自分の環境のせいか、何か変わったのか、一部うまくいかなかったのでその記録。
・Windows10 Home
・Fire タブレット 8GB、ブラック(第5世代)
- 出版社/メーカー: Amazon
- 発売日: 2015/09/30
- メディア: エレクトロニクス
- この商品を含むブログ (30件) を見る
Lineゲットまでの手順
Lineはamazonのアプリストアにないので、
- FireをUsbでつないでPCから色々できるようにする(ドライバ入れたりデバッグできるように設定したり)
- FireにGoogle Playストアを入れる
- Google PlayストアからLineとか入れる
という手順を踏む必要があります。
うまくいかなかったところ
androidlover.net
Google USB Driver をインストールしても Android ADB Interface として認識されない。
解決策
どうやってたどり着いたか忘れましたが、上の本家amazonのページにKindle Fire 用のusbドライバーへのリンクがあります。
(ちなみに、日本語ページには無さそう。why?)
https://s3.amazonaws.com/android-sdk-manager/redist/kindle_fire_usb_driver.zipというところ
デバイスマネージャーでFireを一旦削除してから解凍した
[Fire_Devices ADB drivers.exe]
を実行して、接続しなおすと
こんな感じで、認識されました。
ADBとして認識されたあとは、参考ページのとおりにやってGoogle Playストアがインストール完了。
androidlover.net
改めまして、お世話になりました。
大事なこと
JSO(自己責任でお願いします)
VBAを使ってロト6のデータを形にする その3
はじめに
前回、
vba-belle-equipe.hatenablog.com
「ボーナス数字」と「連続ハズレ回数」を出すところまでいきました。
今回は連続でハズレた回数の履歴をつけていきたいと思います。
「結果」シート
変わりません。
「メイン」シート
連続ハズレ回数を記録する列が増えています。
※回数はどこまでも伸びる可能性がありますが、とりあえず40回以上は一くくりにしてみました。
コード
こんな感じになりました。
Sub 更新() Dim startnum As Long, endnum As Long Dim i As Long, j As Long Dim hit(1 To 43) As Long Dim bonus(1 To 43) As Long Dim nohit(1 To 43) As Long Dim renzoku(1 To 43, 0 To 40) As Long Dim num As Long, num2 As Long With Sheets("メイン") startnum = .Range("C1") endnum = .Range("C2") .Range("C3") = endnum - startnum + 1 End With With Sheets("結果") For i = startnum + 1 To endnum + 1 '連続ハズレ For j = 1 To 43 nohit(j) = nohit(j) + 1 Next '本数字(当たり処理) For j = 2 To 7 num = .Cells(i, j) hit(num) = hit(num) + 1 '連続ハズレ調整 nohit(num) = nohit(num) - 1 If nohit(num) > 40 Then nohit(num) = 40 End If renzoku(num, nohit(num)) = renzoku(num, nohit(num)) + 1 nohit(num) = 0 'ハズレリセット Next j 'ボーナス数字 num = .Cells(i, 8) bonus(num) = bonus(num) + 1 Next i End With For i = 6 To 48 Cells(i, 3) = hit(i - 5) '当選回数 Cells(i, 4) = bonus(i - 5) 'BONUS Cells(i, 5) = nohit(i - 5) '連続ハズレ '連続ハズレ過去回数 For j = 7 To 46 Cells(i, j) = renzoku(i - 5, j - 7) Next j Next i End Sub
連続ハズレ回数の履歴
連続ハズレ回数(現在進行形)を
Dim nohit(1 To 43) As Long
という配列に入れるのは前回と同じです。
(当たったら、0にリセットされる)
加えて今回は、各数字と連続ハズレ回数の情報を持たせるために
Dim renzoku(1 To 43, 0 To 40) As Long
という2次元配列を使っています。
こういう表のイメージです。
「1 To 43」の部分で各数字ごとに行を作り、「0 To 40」で回数ごとの列を作っているという感じでしょうか。
結果
こんなん出ました~
(ごちゃごちゃしすぎるので、下のほうは割愛しています)
考察
連続40回ハズレというのはどれくらいの確率でしょうか。
1回ハズレる確率は、37/43で、およそ86%です。
それが40回連続ともなると、0.25%くらい。
しかし、40回以上連続のハズレは、ロト6の歴史で20回以上出現しているようです。
そこまで珍しいことではないみたいですね。
では、連続で外れているという情報を次に買う際の根拠としてよいか。
難しいところです。
絶対に雨が降る雨ごい
と同じように、買い続ければいずれはその数字が当たると思いますが、
問題は
一緒に当たる数字が何なのかわからん
ということですよね。
方法をご存じの方がいたら是非ともご連絡ください。
VBAを使ってロト6のデータを形にする その2
はじめに
前回、
vba-belle-equipe.hatenablog.com
本数字の当り回数を43の数字それぞれでカウントし、表示するところまでいきました。
今回は「ボーナス数字」と「連続ハズレ回数」を出してみます。
コード
こんな感じになりました。
Sub 更新() Dim startnum As Long, endnum As Long Dim i As Long, j As Long Dim hit(1 To 43) As Long Dim bonus(1 To 43) As Long Dim nohit(1 To 43) As Long Dim num As Long With Sheets("メイン") startnum = .Range("C1") endnum = .Range("C2") .Range("C3") = endnum - startnum + 1 End With With Sheets("結果") For i = startnum + 1 To endnum + 1 '連続ハズレ For j = 1 To 43 nohit(j) = nohit(j) + 1 Next '本数字 For j = 2 To 7 num = .Cells(i, j) hit(num) = hit(num) + 1 nohit(num) = 0 'ハズレリセット Next j 'ボーナス数字 num = .Cells(i, 8) bonus(num) = bonus(num) + 1 Next i End With For i = 6 To 48 Cells(i, 3) = hit(i - 5) Cells(i, 4) = bonus(i - 5) Cells(i, 5) = nohit(i - 5) Next End Sub
ボーナス数字
単純に
Dim bonus(1 To 43) As Long
と新しい配列を作って、カウントしています。
連続ハズレ回数
こちらは
Dim nohit(1 To 43) As Long
という配列を作り
- For文の「i」が増える(= 「回」を重ねる)ごとに連続ハズレ回数が1回ずつ増えていく
- ただし、当たったらその数字のカウントはゼロになる
というふうにしています。
結果
こんな感じです。
27回連続とか、なかなかハズレとんなという感じですが、どうなんでしょうか。
その辺の統計を次回はとってみたいと思います。
VBAを使ってロト6のデータを形にする その1
はじめに
先日、新人個人事業主として、税務署主催の青色申告説明会というものに行ってきました。
大変暇な思索にふける時間に富んだ内容でしたので、以前知人から相談された内容についてずっと考えてました。
それは
VBAを使ってロト6を当てられないのか
ムリでしょ
というもの。
どういう情報をどうやって取るかなーと考えるのは結構面白いです。
どんなデータをとるか
とりあえず統計的に意味がありそうな
- それぞれの数字の当選回数
- どれだけ連続で外れているか
あたりをやってみましょう。
「結果」シート
6個の当り数字、ボーナス数字を一覧にしたシートです。
「メイン」シート
対象の回範囲を設定して、それぞれの数字の当り回数を表示させます。
書いてみる
コード
実際に書いて実行してみます。
Sub 更新() Dim startnum As Long, endnum As Long Dim i As Long, j As Long Dim hit(1 To 43) As Long Dim num As Long With Sheets("メイン") startnum = .Range("C1") endnum = .Range("C2") .Range("C3") = endnum - startnum + 1 End With With Sheets("結果") For i = startnum + 1 To endnum + 1 For j = 2 To 7 num = .Cells(i, j) hit(num) = hit(num) + 1 Next j Next i End With With Sheets("メイン") For i = 6 To 48 .Cells(i, 3) = hit(i - 5) Next End With End Sub
ポイント
43個の数字の結果をそれぞれカウントしたいので、配列を
Dim hit(1 To 43) As Long
で作っています。
これにより、1の結果は「hit(1)」、43の結果は「hit(43)」でOK!
結果
こんな感じで、1から43までの当り回数をカウントできました。
※ウインドウ枠を固定しているので、一部が表示されています