趣味のエクセルマクロ&数字選択式宝くじ

ナンバーズ4などの数字選択式宝くじデータ分析用の自作マクロおよびナンバーズ4などの各種データリストなどをブログにしています。

マクロ作成方法15(自動記録・計算)

ABの数字を元に行での計算します。6+2=8 6-2=4 6x2=12 6÷2=3
6x2=12 6÷2=3はそれぞれ6*2=12 6/2=3と計算します。


(表1)AB列を元に自動記録マクロで計算をして見ました。
よく見れば分かりますが何だか分かりにくいです。


Sub Macro1() ’(表1)全部の行を同じように計算


    Range("C3").Select
    ActiveCell.FormulaR1C1 = "=RC[-2]+RC[-1]" ’たし算
    Range("D3").Select
    ActiveCell.FormulaR1C1 = "=RC[-3]-RC[-2]" ’引き算
    Range("E3").Select
    ActiveCell.FormulaR1C1 = "=RC[-4]*RC[-3]" ’かけ算
    Range("F3").Select
    ActiveCell.FormulaR1C1 = "=RC[-5]/RC[-4]" ’割り算
    Range("C4").Select
    ActiveCell.FormulaR1C1 = "=RC[-2]+RC[-1]"
    Range("D4").Select
    ActiveCell.FormulaR1C1 = "=RC[-3]-RC[-2]"
    Range("E4").Select
    ActiveCell.FormulaR1C1 = "=RC[-4]*RC[-3]"
    Range("F4").Select
    ActiveCell.FormulaR1C1 = "=RC[-5]/RC[-4]"
    Range("C5").Select
    ActiveCell.FormulaR1C1 = "=RC[-2]+RC[-1]"
    Range("D5").Select
    ActiveCell.FormulaR1C1 = "=RC[-3]-RC[-2]"
    Range("E5").Select
    ActiveCell.FormulaR1C1 = "=RC[-4]*RC[-3]"
    Range("F5").Select
    ActiveCell.FormulaR1C1 = "=RC[-5]/RC[-4]"
    Range("C6").Select
    ActiveCell.FormulaR1C1 = "=RC[-2]+RC[-1]"
    Range("D6").Select
    ActiveCell.FormulaR1C1 = "=RC[-3]-RC[-2]"
    Range("E6").Select
    ActiveCell.FormulaR1C1 = "=RC[-4]*RC[-3]"
    Range("F6").Select
    ActiveCell.FormulaR1C1 = "=RC[-5]/RC[-4]"
    Range("F7").Select
End Sub


Sub Macro2() ’(表2)最初の行だけ計算 後はコピー


    Range("J3").Select
    ActiveCell.FormulaR1C1 = "=RC[-2]+RC[-1]"
    Range("K3").Select
    ActiveCell.FormulaR1C1 = "=RC[-3]-RC[-2]"
    Range("L3").Select
    ActiveCell.FormulaR1C1 = "=RC[-4]*RC[-3]"
    Range("M3").Select
    ActiveCell.FormulaR1C1 = "=RC[-5]/RC[-4]"
    Range("J3:M3").Select
    Selection.AutoFill Destination:=Range("J3:M6"), Type:=xlFillDefault
    Range("J3:M6").Select
    Range("O13").Select
End Sub


自動記録でないのが分かりやすいですw


   ActiveCell.FormulaR1C1 = "=RC[-2]+RC[-1]"は下の様に手入力で


 Cells(3,3)=Cells(3,1)+Cells(3,2)になります。


 関数では C3に=A3+B3の式になります。


 Cells(3,1)は1列目で3行目を表します。Cells(行,列)ですね。


(表1)の3行目の各々の計算は
   Cells(3,3)=Cells(3,1)+Cells(3,2)
   Cells(3,4)=Cells(3,1)-Cells(3,2)
   Cells(3,5)=Cells(3,1)*Cells(3,2)
   Cells(3,6)=Cells(3,1)/Cells(3,2)


 4行目以降の各々の計算は行の部分が4、5、6に成りますね。


(表2)のコピーはマクロで考えると色々方法はあると思います。


 ・最初の行を下の複数行にコピー貼り付けする
 ・FOR NEXT や DO UNTILを使って計算する
  その際はCells(3,3)の数字の部分を変数に変えて変化に対応するようにします。
  


マクロ作成方法14(自動記録・検索)

マクロ自動記録で検索します。下の表の様に0666を検索しています。ホームの検索と置換のメニューから検索を選び、オプションで検索対象を値にしています。


記録されたマクロは以下の様になりました。


Sub Macro1()
    Selection.Find(What:="0666", After:=ActiveCell, LookIn:=xlValues, LookAt _
        :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
        False, MatchByte:=False, SearchFormat:=False).Activate
End Sub



自動記録で出来たマクロを元に以下の様に追加修正しています。
検索する番号は文字変数 bango で扱っています。


Sub box_kensaku()
Dim bango As String
  On Error GoTo errorcheck
Sheets("box").Select
  Range("B3:W65").Select
   bango = Application.InputBox("box番号入力して下さい", Default:=Cells(1, 25))
  
   If Len(bango) <> 4 Then MsgBox ("4桁で番号入力してください。"): End
  
   Cells(1, 25) = bango
’---------------------------------------------------------------------------------------------------------------
    Selection.Find(What:=bango, After:=ActiveCell, LookIn:=xlValues, LookAt _
        :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
        False, MatchByte:=False, SearchFormat:=False).Activate
’---------------------------------------------------------------------------------------------------------------
          retu = ActiveCell.Column
          gyou = ActiveCell.Row
     Range(Cells(gyou, retu + 1), Cells(gyou, retu + 1)).Select
   
       res = MsgBox("集計しますか", vbYesNo)
    If res = vbYes Then
       Cells(gyou, retu + 1) = Cells(gyou, retu + 1) + 1
    
    End If
   box_kensaku_3
   
    Exit Sub
errorcheck:
  MsgBox ("番号がありません。チェックして下さい"): End
End Sub



マクロの自動記録で、どんどんマクロを作って見るのは良いと思います。
記録されたマクロを見てマクロを考えるのは大事だと思います。


・どんな表示になっているか
・一部を変えてマクロを実行したら
・応用するには



マクロ作成方法13(自動記録・コピー)

書式コピーもマクロの自動記録で作ってます。手入力では無理ですねw


指定した行(変数gyou)に5行上の書式をコピー 
自動記録ではコピー元とコピー先がセルの番地なので、マクロ実行でいつも同じ動作になります。そこでコピー元とコピー先を下の様にして変化に対応出来る様にしてます。



  Dim gyou As Integer
     gyou = ActiveCell.Row ’マウスで指定した行数を変数に入れる
  Cells(gyou - 5, 66).Select ’コピー元(指定行の5つ上の行)
    Selection.Copy
    Cells(gyou, 66).Select 
’コピー先
    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    Application.CutCopyMode = False


3031の文字色を5行下の5935に書式コピー





計算式コピー


計算式も最初の行に設定しておいて、追加のデータ用に計算式のコピー貼り付けしてます。(間違って消した場合の為に上から5行分くらい計算式はあります)


計算式を値コピーすれば計算式が無くなり数千行の表が軽くなります。
これも自動記録で作成出来ますね。コピー元・先は書式コピーと同様にします。



マクロの自動記録で作成した後、指定部分を変更してマクロの動きを確認します。
もし上手く行かなかったら修正して行きます。


自動記録は変化する行には対応出来ないので問題ですが、手動作成ではマクロ作成ポイントです。