趣味のエクセルマクロ

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

マクロの中でワークシート関数を使う

マクロの中で関数を使うと便利ですね。全部の関数が使える様ではないですが?
私も出来るだけ使っています。


・文字列関数や日付関数はマクロの中で使えない様です。


 



 Cells(i, 84) = WorksheetFunction.CountIf(Range(Cells(2, 83), Cells(i, 83)), Cells(i, 83))

最初の行CE2のCells(2, 83)から現在の行Cells(i, 83)までCells(i, 83)のデータが何回か計算して隣のCF列、Cells(i, 84)に合計として出してる。
(この計算では時間が掛かり過ぎるかも知れませんが? 行iは2~現在行まで変化する)



私のマクロではApplicationを使っていますが今はWorksheetFunctionですね。






 caunter = Application.CountA(Range(Cells(4500, writretu), Cells(5500, writretu)))
上の式で、上の表のデータ個数をカウント(赤字)している。これも元に次のデータ記入位置(上の行に向かって)を計算(カウントが3の場合、次のカウントは4なので次回は1行上にデータを出力)



---------------------- 他の使い方 例 ---------------------------
Cells(5501, 320) = 5501 - Application.Max(Range(Cells(5501, 200), Cells(5501, 319)))
5501行の200列から319列での最大値を出して5501から引き算して320列5501行に出力




 
データを参照し、回号分を関数コピーしさらに値コピーする。
Sub kankaku_sita_syuukei()   ' 間隔を下並びで出力。整列コピーする準備

 kaigo = Range("l1") ’最終回号とする。
 
    Range("gi10") = "=CL3 " 'データを参照する(gi10に =CL3 の式を入れる)
    Range("gj10") = "=CN3 "
    Range("gk10") = "=DG3 "
    Range("gl10") = "=DA3 "
    Range("gm10") = "=DB3 "
    Range("gi10:gm10").Copy Range(Cells(11, 191), Cells(9 + kaigo, 195)) 'データを回号分コピー
   
     Range(Cells(11, 191), Cells(9 + kaigo, 195)).Select ’値コピー(関数を消す)
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False


 ---
 ---
End  Sub