Excel機能の活用


集計
Sub_Total = WorksheetFunction.Sum(Range(Cells(A, N), Cells(B, N)))
又は WorksheetFunction.Sum(Range("A1:A1000"))
又は Application.WorksheetFunction.Sum(Range("A1:A1000"))
Wait(一時停止)
Application.Wait (Now() + "0:00:00.1")
    指定時刻 = Now() + TimeValue("HH:MM:SS")  '現在時刻より何分後 (例) 3分後なら 00:03:00
    Application.Wait (指定時刻)               'この行でマクロ実行を指定時刻まで中断する
Timer(現在時取得)
Dim SinStart As Single
Dim i As Single

SinStart = Timer
  処理A
MsgBox "処理Aにかかった時間 : " & Timer - SinStart & "秒"
Timerは午前0時からの経過秒数を単精度浮動小数点数型(Single)の値で返す
アクティブブック、アクティブシートの退避
ABook = ActiveWorkbook.Name
ASheet = ActiveSheet.Name
アクティブブック、アクティブシートの復旧
Windows(ABook).Activate
Sheets(ASheet).Select

Excel利用のコツ

Excelのセルを使って初期設定を行う
InputBook = Range("B1").Value
InputPath = Range("B2").Value
NeedPrint = Range("B7").Value
セルに数式をそのまま表示したい
(計算はせずに説明用に使う)
文字列として表示する方法
=SUM(A1:A5)と表示したい場合「'=SUM(A1:A5)」と頭に「'」(アポストロフィ)を付けて入力します。

計算式を確認したい場合や印刷したい場合、簡単に切り替える方法
ショートカットキー【Ctrl】+【Shift】+【@】  (解除も同じです)

メニュー操作で行う方法
メニューバーの【ツール】→【オプション】を選択。
【表示】タブを選択。
『数式』をクリックしてチェックを入れます。
セル範囲の数式と値のクリア
Range(Cells(DelStart, L), Cells(CurrentRow - 1, L)).Select
Cells(CurrentRow - 1, L).Activate
Application.CutCopyMode = False
Selection.ClearContents
セルの範囲指定で削除
Rows(K & ":" & K).Select
Selection.Delete Shift:=xlUp
特定セルの集計
Range("F1").Select
    ActiveCell.FormulaR1C1 = "=RC[-5]+RC[-3]+RC[-1]"

[  ]内に変数を使う場合の注意
"=SUM(R[行top]C:R[-1]C)"ではエラー、正しくは "=SUM(R[" & 行top & "]C:R[-1]C)"
セルの合計
Range("F9").Select
ActiveCell.FormulaR1C1 = "=SUM(R[-8]C:R[-1]C)"
セル値の集計
Worksheetfunction.Sum( Range("L2:L" & RowMax) )
集計計算式による集計
Cells(CurrentRow, L).Select
ActiveCell.FormulaR1C1 = "=SUM(R[" & SigStart & "]C:R[-1]C)"
式、(または値)の読み出し
MsgBox Cells(1, I).Formula
式を文字列で返す、式が入っていないと、値を返す
Excel操作による領域選択
[Shift]キーを押しながらアクティブセルを移動すると、移動した範囲が選択状態になる
[Ctrl]キーを押しながら[End]キーを押すと、そのシートで使用されている範囲の右下に
アクティブセルが移動する
アクティブセルを現在使用しているセルの左上(セルA1)に置いた状態で、
[Ctrl]+[Shift]+[End]キーを押すと、現在使用しているセル範囲が自動的に選択される。
プログラミングによる領域選択
CurrentRegion
  任意のセルが含まれているひとかたまりのセル範囲([Ctrl]+[Shift]+[*]キーの結果と同じ)
Range(任意のセル, ActiveCell.SpecialCells(xlLastCell))
  任意のセルから 最終セルまでの セル範囲
ActiveSheet.UsedRange
Sheets("Sheet1").UsedRange
  ワークシートで使用されているセル範囲

コーディングのコツ

切り捨て
四捨五入
切り上げ
Num_countup = Application.RoundDown(実数, 0)
Num_round = Round(実数, 0)
Num_countdown = RoundUP (実数, 0)
ユーザ関数の作り方
Function 指定前日(本日 As Date) As Date
指定前日 = 本日 - 1
End Function
--------------------------------------------
Sub 前日ファイル名()

Dim 本日 As Date

本日 = Date
前日 = 指定前日(本日)
MsgBox "本日=" & 本日 & vbCrLf & "前日=" & 前日

End Sub
配列の初期化
Dim TBL(30, 5) As Variant

Erase TBL
1次元動的配列
Dim Data() As Variant

N = 0
For I = 2 To MaxRow
            ReDim Preserve Data(N) As Variant
                Data(N) = Cells(I).Value
            N = N + 1
Next I
Preserveがないと、配列拡張ごとに既存要素をクリアする
2次元動的配列
Dim Data() As Variant

N = 0
For I = 2 To MaxRow
            ReDim Preserve Data(19, N) As Variant
            For J = 0 To 19
                Data(J, N) = Cells(I, J + 1).Value
            Next J
            N = N + 1
Next I
ReDim Preserve Data(N, 19) As Variantでは実行時にエラーになる。 1次元目を確定して、2次元目を拡張してゆく
Public Work() As Variant
Sub UserForm2_Test()

Dim N As Integer

        ReDim Preserve Work(9, 0) As Variant
        Work(0, 0) = "交付日付"
        xxxxxxxxxxx
        Work(9, 0) = "担当"
        
        N = 1
        ReDim Preserve Work(9, N) As Variant
        Work(0, N) = "2012年4月21日"                       '日付
        xxxxxxxxxxx
        Work(9, N) = "営業事務"                            '担当
        
        UserForm2.Show vbModeless
        
End Sub
2次元配列(I,J)を段階的にReDimする場合、I行、J列自由に再定義できるのではなく、 ("インデックスが有効範囲にありません"エラーがでるので)I列を固定し、J列のみ再定義する
定数定義と有効範囲
Option Explicit

' プロシージャを超えて参照する変数/定数は動作するプロシージャの前(外)で宣言する。
Public X                ' ←他モジュールからも参照可(変数)
Private Y               ' ←このモジュールからのみ参照可(変数)
Public Const A = "AAA"  ' ←他モジュールからも参照可(定数)
Private Const B = "BBB" ' ←このモジュールからのみ参照可(定数)

Sub TEST()
' プロシージャ固有の変数/定数はプロシージャ内で使用する手前で宣言する。
    Dim Y               ' ←値はプロシージャを抜けるとリセットされる、同一名は
モジュールレベルよりプロシージャレベルが優先 Static Z ' ←値はプロシージャを抜けても保持される Const C = "CCC" ' ←プロシージャレベルでの定数、値を置き換えるとエラーになる End Sub
偶数番、奇数番で設定を変える
Cells(4, 書出し列).Select
Selection.NumberFormatLocal = "#,##0_ "
If I Mod 2 = 1 Then
    Selection.NumberFormatLocal = "#,##0.0_ "
End If
4 5 6

このサイトは個人生活を健やかに、愉しく、 企業活動を闊達にして、 持続可能な社会作りを目指します
Copyright © しなやか暮し研究所 2012 All Rights Reserved.