結論:備忘録ですが、便利に活用できると思います!



筆者がよく使い、よく忘れるExcel VBA コードをまとめています!
(よく使うなら忘れるなよっ!)




変数関係

 変数宣言

Const C As Integer = 2

→値を入れる(Constなので、固定値。Integer なので、数値のみ。)

Dim R  As Variant

→値を入れる(Dimなので、可変。Variant なので、文字でも数値でも可)

Public Const Sheetkazu As Long = 4

→Public(Publicステートメント)を使っているので、
全体(標準モジュール内)に使用することができます。
(Longは、-2,147,483,648~2,147,483,647の整数)

ReDim Preserve ArrySheet ( k )

→配列は、本来1度宣言してしまうと素数(ここでは k)は変更できないが、
ReDim Preserve を使うことで、素数(ここでは k)を変更することができる。


もくじ に戻る


セル関係

 セルの選択

Range("A1").Activate

→「Activate」メソッド

Range("A1").Select

→「Select」メソッド

アクティブとセレクトの使い分けは、ここでは触れません(笑)
とりあえず「Select」を使っとけば大丈夫です(テキトーすぎ

Cells(R, C).Select

→R, C は変数。
Cは、列(縦)。Rは、行(横)。

変数を使う場合は、Cells
変数を使わないセル指定は、Range で。ここでは省略
詳しくは→RangeとCellsの使い分けについて
↓指定方法のパターン参照

1. Range("A1")→A1セル
2. Range("A1:B3")→A1~B3セル範囲
3. Range("A1,B3")→A1とB3セル
4. Range("A1", "B3")→A1~B3セル範囲
5. Range(Cells(1, 1))→A1セル
6. Range(Cells(1, 1), Cells(3,2))→A1~B3セル範囲
7. Range("A1", Cells(3,2))→A1~B3セル範囲
8. Range("A1:A3", "B1")→A1~B3セル範囲
9. Range("名前定義")→名前定義のセル範囲
10. Range(Rows(1), Rows(3)) →1~3行の範囲
11. Range(Columns(1), Columns(3)) →1~3列の範囲
12. Range("1:3") →1~3行の範囲
13. Range("A:C") →1~3列の範囲
14. Range(Rows(1), Columns(1)) →全セル

参考サイト:RangeとCellsの使い分けについて




 セルの値

ActiveCell.FormulaR1C1 = "□"

→例えば、Range("A8").Select の後に記載すると。
A8セルに、□が入ることになります。

Worksheets("Sheet1").Range("k21").Value = "・   ・"

→Sheet1のK21セルに「・   ・」を入れます。

Cells(R, D).Value = Application.GetPhonetic(Cells(R, C).Value)

→抽出したい列に対するフリガナを出力したい列に出力

F = Range("B6").Value

→B6セルの値を変数F に入れる。

C = InputBox("数は?", "確認", "")

→確認というボックスが出て、数値を入力するように求められる。
入力後、Cに値が入る(Integer型だと数値しか受け付けない )

RNum = ActiveCell.Row

→現在選択しているセルの行番号を取得します

CNum = ActiveCell.Column

→現在選択しているセルの列番号を取得します


 セルの操作

Selection.Offset(1, 0).Select

→選択されているセルから1つ下に移動する。
A1セルならA2セルに( ↓ と同じ)

Selection.Offset(0, 1).Select

→選択されているセルから1つ右に移動する。
A1セルならB1セルに( →とかTabキー と同じ)

Selection.End(xlDown).Select

→選択されているセルから下に "値があるセル"の最後(もしくは最初)に移動する。
Ctrl + ↓ と同じ

Selection.End(xlUp).Select

→選択されているセルから上に "値があるセル"の最後(もしくは最初)に移動する。
Ctrl + ↑ と同じ

Selection.End(xlToRight).Select

→選択されているセルから右に "値があるセル"の最後(もしくは最初)に移動する。
Ctrl + → と同じ

Selection.End(xlToLeft).Select

→選択されているセルから左に "値があるセル"の最後(もしくは最初)に移動する。
Ctrl + ← と同じ

SendKeys "{F2}", True

→選択されているセルに「F2」キーを送る

SendKeys "{ENTER}", True

→選択されているセルに「Enter」キーを送る

Selection.Copy

→選択されているセルの値をコピーする。
Ctrl + C と同じ。

Selection.Cut

→選択されているセルの値を切り取りコピーする。
Ctrl + X と同じ。

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

→形式を選択して貼り付け の 値のみ を貼り付ける。

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True

→形式を選択して貼り付け の 値のみ と行列を入れ替える で貼り付ける。

Transpose が行列を入れ替える
SkipBlanks が空白セルを無視する


 セルの表示形式

Worksheets("Sheet1").Range("e2").Value = "=TEXT(Sheet1!B2,""平成E(yyyy)年M月D日"")"
With Selection
.WrapText = False
.Orientation = 0
.AddIndent = False
.ShrinkToFit = True
.ReadingOrder = xlContext
End With

→Sheet1のE2セルに、Sheet1のB2の値を"表示形式"が
「平成30(2019)年1月1日」で入る(例えば)。

もくじ に戻る


シート関係

 シート名関係

sheetName = ActiveSheet.Name

→現在選択しているシートのシート名を取得します

Worksheets(1).Name = Cells(1, 1)

→A1セルの値を1番目のシート名にする

Worksheets(1).Name = "作業日:" & Format(Date, "yyyymmdd")

→1番目のシート名が、"作業日:20190111" になる(例えば)

sheetNameA = Worksheets(1).Name

→1番目のシート名を 変数sheetNameA に入れる

もくじ に戻る


画面関係

 画面の操作

Application.ScreenUpdating = False

→「画面の更新」を解除するまで画面を更新しない
本来マクロが動いている間、画面は高速移動して処理をしているのですが、
Falseを指定することで、画面が動かずバックでマクロが動いています
この方が、メモリを使わないので重たい処理もサクサクいける(限度はありますが)

Application.ScreenUpdating = Ture   '画面を更新する。

→マクロの終了前に入れると良い

Application.Calculation = xlCalculationManual 
  'セル中の式の更新を手動で行う

→後で"自動"にしたタイミングで更新
画面と同じく、マクロが数式をいじるたびに、計算を行っていては、
メモリが大量に使われるので、数式がいじり終わった後に計算をすることで、
動作が早くなります

Application.Calculation = xlCalculationAutomatic

→セル中の式の更新を自動で行う(更新されていないものを更新する)

Application.StatusBar = R & "/" & Format(LR, "#,###")

→ステータスを表示
RとLRは、変数です
大量の処理をしている時に、画面の更新をOFFにしていると、
処理しているのか、止まっているのか(笑)わかりません
そんな時に、今どれくらい処理をしているのかの目安になります
ステータスが、Excel画面の一番下(濃い緑のバー)で白字で表示されます

Application.StatusBar = RNum & "件ありました。"

→RNum (変数)件ありました。 と表示されます

Application.StatusBar = False

→ステータスバーを非表示

ActiveWindow.SmallScroll Down:=100

→数値の分だけ、画面が下にスクロールする
数値1で、1セル分

With ActiveWindow
.ScrollRow = 5
.ScrollColumn = 1
End With

→指定した数値のところに画面が移動する

もくじ に戻る


フォーム関係

 フォーム

CheckBox16.Value = False

チェックボックス16 のチェックを外す。

If  Me.Controls("CheckBox" & i).Value = True  Then

→ここでは、チェックボックス i( i は変数)
がチェックされている(True)ならという意味

ArrySheet(k) = Me.Controls("CheckBox" & i).Caption

→ここでは、チェックボックスのCaptionに
指定されている文字を配列ArrySheetに入れる。
オブジェクト名ではない。

もくじ に戻る


その他

 カレントディレクトリを開く

CurrentD = ThisWorkbook.Path

 Shell "C:\Windows\Explorer.exe " & CurrentD, vbNormalFocus
→ThisWorkbook.Pathで カレントディレクトリ(実行中のファイルのディレクトリ)を取得
 Shell でエクスプローラーを利用してカレントディレクトリを開く

もくじ に戻る


他できたら、追記していきます!

もくじに戻る



少し応用

 現在いるセルから複数選択

RNum = ActiveCell.Row '現在選択しているセルの行番号を取得
CNum = ActiveCell.Column '現在選択しているセルの列番号を取得
Range(Cells(RNum, CNum), Cells(RNum, CNum + 8)).Select

→例えば、A1セルにいる場合
A1セル から I1セル(A1セルから右に8つ移動)まで選択される。


もくじ に戻る

【Excel】【marco】 マクロ 2019年01月11日










↓このゲームをプレイしたことはありませんか?

IMG_1620