エクセルのマクロの記録の使い方がちょっとだけわかりました!
でも具体的にどうすればいいのかがまだぜんぜんわからない!
いきなり全部いっきに教えても覚えられないでしょう(^^;
じゃぁ! もう少し説明を続けていきますね
わからなくなったら前回の記事でおさらいしましょう
前回記事でわかったことは
・「マクロの記録」で自動記録されたマクロ(VBA)の概要
・「マクロの記録」では記録されない部分がある
・「マクロ」付Excelは「マクロ有効ブック(*.xlsm)」で保存
「マクロの記録」で記録したマクロの実行の仕方をもう少し便利にしてみましょう
【この記事でわかること】
・「マクロの記録」で作ったマクロの便利な実行方法がわかります
・「マクロ」を使うために必要な「開発」タブを表示する方法がわかります
・「マクロの記録」でいろいろな操作をテストして記録されたコードを確認します
記事で使用したサンプルファイルはこのリンク先からダウンロードできます
Excel「マクロ」の実行方法
前回記事ではExcelの「表示」タブ→「マクロ」メニュー→「マクロの表示」→マクロ選択→「実行」というステップで「マクロ」を実行させました。もっと効率的な方法があります
ショートカットキーで実行する方法
「マクロの記録」の際にこの部分は説明していませんでした。それは、「ショートカット」は後からでも設定できるからです。では、「ショートカット」を設定する方法を説明します
・「マクロの表示」ダイアログで ①「オプション」ボタンを押します
・「マクロオプション」ダイアログが表示されます
・②「ショートカットキー」に設定するキーを入力します(下の説明を参照願います)
・必要に応じて③にマクロの動作説明を入力します(未入力でも可)
「ボタン」から実行する方法【この方法がオススメです】
「ショートカット」は便利ですが、「ショートカット」を覚えるのは大変です。そして使える「キー」にも限界があります。だから「ボタン」から実行する方法が一番簡単な良い方法だと思っています
「ボタン」として使えるのは次の二つに分けられると思います
・ActiveXコントロールの「コマンドボタン」
・図形や画像などのオブジェクト
ActiveXコントロールの「コマンドボタン」
これを使うには、このあと解説する「開発」タブからActiveXコントロールの「コマンドボタン」をシートに埋め込んで使います。マクロを実行させるには、「コマンドボタン」コントロールのクリックイベントからマクロを呼び出す必要があります(この部分については別途説明します)
今の段階では、少し難しいですよね(^^)
フォームコントロールの「ボタン」
これも、このあと解説する「開発」タブからフォームコントロールの「コマンドボタン」をシートに埋め込んで使います。埋め込むと同時に「マクロの登録」ダイアログ(下の画像参照)が表示され、そのまま登録されている「マクロ名」を選んで「OK」を押下すれば要録が完了します
このボタンの方がActiveXコントロールの「コマンドボタン」より簡単ですね(^^)
図形や画像などのオブジェクト
この方法もお手軽で簡単です。こちらをご覧ください
・配置したオブジェクト上で右クリック
・「マクロの登録」を選択
・現れたダイアログで実行させる「マクロ」を選択して「OK」を押下
上の画像では「図形の四角形」を配置していますが、その他のオブジェクトでも「右クリック」して「マクロの登録」が表示されるものなら何でも登録が可能です。「画像」でも「⇒」や「線」でもOKです
いかがですか? この方法は簡単でしょ! 私はいつもこの方法を主に使っています
「開発タブ」を表示する方法を解説
「開発」 タブとは
ヘルプを見ると、次のように記載されています
[開発] タブは次の手順を実行するか、または使用する場所です
・マクロ(VBA)を書く
・以前に記録したマクロ(VBA)を実行する
・XML コマンドを使用する
・ActiveX コントロールを使用する
・Microsoft Office プログラムで使用するアプリケーションを作成する
・Microsoft Excel でフォーム コントロールを使用する
・Microsoft Visio でシェイプシートを操作する
・Microsoft Visio で新しい図形およびステンシルを作成する
初心者が使うのは黄色アンダーラインでマークしている3つでしょう
マクロを使っていく場合は「開発」タブを表示しておく必要があります
「開発」タブの表示方法
Excelの初期設定では [開発] タブは表示されていませんが、リボンに追加することができます
【Excel2016で設定する場合】
・「ファイル」 タブの一番下の「オプション」→「Excelのオプション」ダイアログ表示
・「リボンのユーザー設定」をクリックでリボンをカスタマイズできるようになります
・右側「リボンのユーザー設定」の「メイン タブ」で「開発」のチェックをオンにします
すると、このように(下画像)「開発」タブが表示されました
これで「マクロ(VBA)」を使いこなす準備ができました(^^)
・一番左の「Visual Basic」がエディターを開いて編集画面を表示します
・前段で少し説明したActiveXコントロールの「コマンドボタン」は「挿入」から使用できます
・「マクロの記録」もここから実行できます
Excel「マクロ記録」で出来る「マクロ」
・「マクロ記録」でどんな「マクロ」が作成されるのかテストしてみましょう
・前回はセルに入力する「マクロ」を作成しました。同じExcelブックに記録を追加していきます
「マクロの記録」でいろいろな操作を記録してみます
・自動記録されたコードにコメントを付けていますので確認してみてください
前回記事のマクロ(VBA)コード(抜粋)
・「セルを選択」「セルに入力」「ショートカットで移動」
Sub Macro1()
Range("A1").Select 'セルを選択
ActiveCell.FormulaR1C1 = "ID" 'セルに入力
Range("B1").Select 'セルを選択
ActiveCell.FormulaR1C1 = "名称" 'セル漢字入力
ActiveCell.Characters(1, 2).PhoneticCharacters = "メイショウ"
Selection.End(xlUp).Select 'ショートカットで上へ移動
End Sub
今回記録したマクロ(VBA)コード
・新規シート作成
・作成したシートに元のシートからデータをコピーして貼り付け
・貼付け方法を「値」で貼付け
・シートの選択(移動)
・複数シート選択
・シートをコピー
これを順番に実行したマクロ(VBA)コードがこちらです
Sub Macro2()
'
' Macro2 Macro
'
'
Sheets.Add After:=ActiveSheet '新規シート作成
Sheets("Sheet1").Select 'Sheet1選択
Range("A1:E11").Select '範囲選択
Selection.Copy '選択範囲をコピー
Sheets("Sheet9").Select '新規シートを選択
ActiveSheet.Paste 'コピーしたデータを貼り付け
Sheets.Add After:=ActiveSheet
Sheets("Sheet1").Select
Selection.End(xlUp).Select
Range("A1:E1").Select
'選択した範囲から最下部まで選択(ショートカット)
Range(Selection, Selection.End(xlDown)).Select
'前に操作した(セルのコピー、または切り取り)を無効にしている
Application.CutCopyMode = False
Selection.Copy
Sheets("Sheet10").Select
'選択したセルに値貼付け
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'複数シート選択
Sheets(Array("Sheet1", "Sheet9", "Sheet10")).Select
Sheets("Sheet10").Activate
Application.CutCopyMode = False
'選択した複数シートをまとめてコピー
Sheets(Array("Sheet1", "Sheet9", "Sheet10")).Copy Before:=Sheets(4)
End Sub
・オートフィルタ設定
・フィルタ抽出(B列で「a」を抽出)
・フィルタ追加抽出(A列で「1」を抽出)
・オートフィルタを解除
・ソートを実行する(昇順・降順、複数設定)
これを順番に実行したマクロ(VBA)コードがこちらです
Sub Macro3()
'
' Macro3 Macro
' マクロの説明を記録実行前に記入しておくとここにコメントが入ります
'
'オートフィルタテスト
Selection.AutoFilter 'オートフィルタを設定
'AからE列の2番目のフィールド=B列で「a」を抽出
ActiveSheet.Range("$A$1:$E$11").AutoFilter Field:=2, Criteria1:=Array("aaa" _
, "aab", "aad", "abc", "cba"), Operator:=xlFilterValues
'1番目のフィールド=A列で「1」を抽出
ActiveSheet.Range("$A$1:$E$11").AutoFilter Field:=1, Criteria1:="1"
Selection.AutoFilter 'オートフィルタを解除
'ここからソートテスト
'B列で昇順ソート
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add2 Key:=Range("B2:B11") _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Sheet1").Sort
.SetRange Range("A1:E11")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
'B列で降順ソート
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add2 Key:=Range("B2:B11") _
, SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Sheet1").Sort
.SetRange Range("A1:E11")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
'A列を昇順。B列を降順でソート
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add2 Key:=Range("A2:A11") _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add2 Key:=Range("B2:B11") _
, SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Sheet1").Sort
.SetRange Range("A1:E11")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
・印刷実行
・文字の色を設定する
・セルの色を設定する
・各種罫線の設定
・ボタンを押す
これを順番に実行したマクロ(VBA)コードがこちらです
ただし、罫線の部分はあまりのボリュームなので省略していますm(_ _)m
Sub Macro4()
'
' Macro4 Macro
'
'
'印刷を実行
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
IgnorePrintAreas:=False
Range("A1:E1").Select 'フォントにセルに色を付ける
With Selection.Font
.Color = -16776961
.TintAndShade = 0
End With
With Selection.Font 'フォントの色を元に戻す
.ColorIndex = xlAutomatic
.TintAndShade = 0
End With
With Selection.Interior 'セルの背景色設定
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 65535
.TintAndShade = 0
.PatternTintAndShade = 0
End With
With Selection.Interior 'セルの背景色を元に戻す
.Pattern = xlNone
.TintAndShade = 0
.PatternTintAndShade = 0
End With
'ここから罫線の設定
'右下がり斜め線なし
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
'右あがり斜め線なし
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft) '左辺の設定
.LineStyle = xlContinuous '直線
.ColorIndex = 0 '黒色
.TintAndShade = 0 '影無
.Weight = xlThin '細線
End With
'罫線の設定は膨大になるので以下省略します
With Selection.Borders(xlEdgeTop) '上部
With Selection.Borders(xlEdgeBottom) '下辺
With Selection.Borders(xlEdgeRight) '右辺
With Selection.Borders(xlInsideVertical) '内側の垂直線
With Selection.Borders(xlInsideHorizontal) '内側の水平線
・
・
'罫線なしにする場合 LineStyle = xlNone に設定する
Selection.Borders(xlInsideVertical).LineStyle = xlNone
Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
'ここでボタンを押そうとしましたが押せませんでした
End Sub
・セルの挿入・削除
・行の挿入・削除
・列の挿入・削除
・セルをコピーして挿入・削除
・行をコピーして挿入・削除
・列をコピーして挿入・削除
これを順番に実行したマクロ(VBA)コードがこちらです
Sub Macro5()
'
' Macro5 Macro
'
'
Range("B3").Select 'B3セルにセルを挿入
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Selection.Delete Shift:=xlUp '挿入したセルを削除
Rows("5:5").Select '5行目を選択して挿入
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Selection.Delete Shift:=xlUp '挿入した行を削除
Columns("B:B").Select 'B列を選択して列を挿入
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Selection.Delete Shift:=xlToLeft '挿入した列を削除
Range("C1").Select
Selection.Copy 'C1セルを選択してコピー
Range("B5").Select 'B5セルを選択
Selection.Insert Shift:=xlDown 'コピーしたセルを挿入(下にシフト)
Application.CutCopyMode = False
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Rows("5:5").Select '5番目の行を選択
Selection.Copy '選択した行をコピー
Rows("6:6").Select '6番目の行を選択
Selection.Insert Shift:=xlDown 'コピーした行を挿入
Rows("5:5").Select '5番目の行を選択
Application.CutCopyMode = False
Selection.Delete Shift:=xlUp '選択した行を削除
Columns("B:B").Select 'B列を選択
Selection.Copy '選択列をコピー
Columns("C:C").Select 'C列選択
Selection.Insert Shift:=xlToRight 'コピーした列を挿入
Columns("B:B").Select 'B列を選択
Application.CutCopyMode = False
Selection.Delete Shift:=xlToLeft '選択した列を削除
End Sub
すごい量のマクロデータが記録されて書き出されるんですね!
びっくりしすぎて頭が混乱しています!
そうだよね!この自動記録されたコードを見たらどうしていいかわからなくなってしまうのが普通ですね(^^ゞ
コードにコメントを入れておいたのであとで確認してくださいね(^^)
・今回はここまでで終了です!
・この続きは次回記事まで少しお待ちください・・・・ご期待くださいね~(^^)/
まとめ(おわりに)
まとめと感想など
・「マクロの記録」で作ったマクロの便利な実行方法がわかりました
「ボタン」から実行するのが簡単そうです
・「マクロ」を使うために必要な「開発」タブを表示する方法がわかりました
「開発」タブは今後「マクロ」を使う上で必ず必要となります
・「マクロの記録」でいろいろな操作をテストしてみました
記録されたコードの量と種類にびっくりしました
最後に実行してみて「ボタン」を操作できないことがわかりました
・マクロ(VBA)を実行する際は必ずバックアップを取ってから行ってください!
・マクロ(VBA)は実行後にファイルを保存すると元に戻すことはできません!
・実行後にファイルを保存せず終了すれば、実行前に戻すことができます!
★★★ ランキング参加中! クリックしてね(^^)/ ★★★
今後の記事について
今回の記事はいかがだったでしょうか。皆さまのお役に立てたなら幸いです(^^;
是非!サンプルファイルをダウンロード出来ますのでそのまま使ってみてください(^^)/
当面は今回の記事に続き「初心者向けマクロ」の記事を継続して書いていきます
【検討中の今後の記事内容は・・・・・】
・実務に役立つものを提供できるよう現在検討中です
・その他雑記的に「小ネタなどいろいろ」・・・・・
・今後の記事にご期待ください(^^)/