マクロ 簡単なはずが?
上の表でFK列の数字に従い右列に数字に対応した列に●をマクロで表示させています。
毎日データを入力していますが、入力ミスがあって気が付かなかった場合は結構修正は面倒です。(間違いを目で見て1個づつ探しながら直すので5266と5267にミス有)
なぜ入力ミスが起きるのか分からないのですが?
毎日データ入力していても忘れたりしてデータミスになってる可能性もあります。
(当選番号からマクロで数字を計算しているので、マクロミスかも?)
そこで、一度で上の表に間違いなく表示するマクロを考え始めましたが?
考えているとあたまが痛くなり、なかなか簡単にはいきませんw
週に1回でもマクロを作ったり見たりしないとマクロから遠ざかるような感覚がありますが、忘れる前に思い出すようにしたいです。
考え方としては、以下のようなものだと思います?
1.数字1行毎に●を表示した後にすぐに列方向間隔の数字を表示させる。
2.●を全行表示終わったら、全列に間隔の数字を表示させる(縦方向または横方向)
1.か2.のどれかをマクロにすれば良いのですが?
マクロにするにあたっては次のルールが考えられます。
●印の箇所には数字を入れない。
●印の次の行が●でなかったら1から始まる。
最初のデータの数字は1となる。
数字の次の行はプラス1づつ増やして行く。
マクロ式は
Do Until Cells(i, 167) = ""
For j = 1 To 16
if Cells(i, 167+k)<>"●" then
Cells(i, 167+k)=1
または
Cells(i, 167+k)= Cells(i, 167+k-1)+1
などを組み合わせて行くのだと思います。
変数 i j k はデータ出力位置に合わせられるように調整します。
作りながら上手くいかないので、考えながら?
上手く動いたら?
うーん、●表示は簡単ですが?
間隔数字表示が?
マクロ学習方法(アクティブラーニング) - 趣味のエクセルで当てようロト・ナンバーズ
マクロはアイデア? - 趣味のエクセルで当てようロト・ナンバーズ
マクロは暗号? - 趣味のエクセルで当てようロト・ナンバーズ
変数 知らなかった本当の使い方 - 趣味のエクセルで当てようロト・ナンバーズ
やっとw
上の様に、やっと正しく表示されるマクロを作ってみました。
これで作った下のマクロは正しいかは分かりませんが?
Sub ●計記入sb_all() '大小一括表示
Sheets("合計").Select
Dim i,j ,retu as integer ’変数を整数に設定
saikeisanoff ’再計算など止める
Range("FL5:GA5288").Select '表示を消す
Selection.ClearContents
i = 5
Do Until Cells(i, 167) = ""
retu = Cells(i, 167)
If i = 5 Then Range(Cells(i, 168), Cells(i, 183)) = 1’最初の行に間隔1を入れる
Cells(i, 167 + retu) = "●" ’次に●表示
i = i + 1 ’行を1行づつ増やす(下行に向かって処理するために)
For j = 1 To 16 ’16列分間隔出力
If i >= 6 Then ’2行目からの間隔出力
If Cells(i - 1, 167 + j) = "●" Then ’1行前が●なら
If Cells(i, 167 + j) <> "●" Then Cells(i, 167 + j) = 1
Else ’1行前が●でないなら
Cells(i, 167 + j) = Cells(i - 1, 167 + j) + 1 ’間隔をプラス1づつ増やし表示
End If
End If
Next j
Loop
saikeisanon
End Sub
すごく短いマクロで●表示と間隔表示が簡単に・・?出来ました。
簡単でも、出来るまでに時間が掛かってますw (アイデアが未熟)
とりあえず、最初の行の16列分だけに間隔1を入れることを思いつきました。
これを(●と間隔を同時に)条件でマクロを考えていたら上手く行かなかったw
一度に複数条件をもとにマクロ処理を作るのは難しいですね!
(処理を単純化すれば作りやすいような気がしました。単純化=アイデア?)
saikeisanoff や saikeisanon は別のマクロ(マクロのスピードアップ)