2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

VBA学習備忘録_02_個人的Excel マクロ チートシート①

2
Last updated at Posted at 2024-01-22

※このQiitaは、『今すぐ使えるかんたん Excel マクロ&VBA 技術評論社 門脇香奈子 著』を主参考書として、VBAの学習を進めたときの備忘録です。※今後、仕事で利用するにあたり、社外秘でないもので尚且つ有用性高そうなものは更新します

Amazonリンク

https://www.amazon.co.jp/%E4%BB%8A%E3%81%99%E3%81%90%E4%BD%BF%E3%81%88%E3%82%8B%E3%81%8B%E3%82%93%E3%81%9F%E3%82%93-Excel%E3%83%9E%E3%82%AF%E3%83%AD-Office-Microsoft-365%E5%AF%BE%E5%BF%9C%E7%89%88/dp/4297129701/ref=sr_1_3?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=87AM31OPUPGU&keywords=%E4%BB%8A%E3%81%99%E3%81%90%E4%BD%BF%E3%81%88%E3%82%8B%E3%81%8B%E3%82%93%E3%81%9F%E3%82%93+excel+%E3%83%9E%E3%82%AF%E3%83%AD%26vba+%E6%8A%80%E8%A1%93%E8%A9%95%E8%AB%96%E7%A4%BE+%E9%96%80%E8%84%87%E9%A6%99%E5%A5%88%E5%AD%90+%E8%91%97&qid=1705239199&sprefix=%E4%BB%8A%E3%81%99%E3%81%90%E4%BD%BF%E3%81%88%E3%82%8B%E3%81%8B%E3%82%93%E3%81%9F%E3%82%93+excel+%E3%83%9E%E3%82%AF%E3%83%AD+vba+%E6%8A%80%E8%A1%93%E8%A9%95%E8%AB%96%E7%A4%BE+%E9%96%80%E8%84%87%E9%A6%99%E5%A5%88%E5%AD%90+%E8%91%97%2Caps%2C281&sr=8-3

そもそもVBA(Visual Basic for Application)とは

とりあえず、ベテラン勢からすると基本的な物かもしれないが使用頻度が自分が勝手に高そうと思ったオブジェクト、プロパティ、メソッド、イベントを挙げていってみる

※注意1:VBAでは、引数のところに()をつけないことに注意。

※注意2:名前の通りVBAはVBから派生した物らしいです

※注意3:アクティブ「~」は開いている Excel において何らかの部分が選択されている状態を指す。

※注意4:VBA&マクロにおけるオブジェクト:Python等におけるオブジェクトと同義、ここでは大きい順に(~オブジェクトは省略)

Application \supset Workbook(ブック)\supset Worksheet(シート)\supset Range(「セル」)\\\
\supset \lbrace Font(フォント),Interior(塗りつぶし),Border(罫線),・・・ \rbrace

※少し勉強した感覚としては、Python のGUI化のための標準ライブラリー(pip や poetry でインストールしなくても import できるライブラリー)の tkinter にコードの書き方が似ているように感じました。

Subプロシージャで使うもの

※Subプロシージャ:指定した操作を実行する基本的なマクロ(Subから始まり、End Subで終わるもの)

01_Range("取得したいセルの座標(A1等)") :どのオブジェクトを「アクティブ」とするかの指定

A1セルの情報を取得して、Valueプロパティにおはようの文字を入力

    Range("A1").Value = "おはよう"

B4×C8の長方形部分のセル情報を取得

    Range("B4:C8")

A1セルをC1セルにコピーする

    Range("A1").Copy Range("C1")   
'   後者のRangeは Copyの引数(ここではコピー先)


02_.Select(メソッド):Rangeでアクティブにしたオブジェクトの「選択」

アクティブセル(※選択中のセル)が別である状態から、(同一)C2セルを選択されている状態にする。

    Range("C2").Select

基本的に長方形領域を以下のように.Selectで選択した場合、長方形の一番左上に来るセルがアクティブセルになる

例えば以下の場合、アクティブセルは
『C4 ⇒ C2(長方形領域の左上)⇒ D4(2つ下がって1つ右に)』と遷移

Sub sample()
  Cells(4,3).Activate
  Range(Cells(2,3),Cells(4,5)).Select
  ActiveCell.Offset(2,1).Activate
End Sub

03_Selection・ActiveCell:選択されているセル・セル範囲をオブジェクトとして取得するときに使用

プロパティ 何を取得するか
ActiveCell. Excelが操作対象と認識している単一セル(選択範囲の白抜き部分)
Selection 選択されているセルまたはセル範囲
Sub sample()
    Dim a As String
    a = Selection.Address
    MsgBox a
End Sub

ActiveCellsプロパティはない

04_.Addressプロパティ:オブジェクトとして認識されているセル範囲の参照範囲を文字列型として取得する

デフォルトの状態では値を取得したときに以下のようにドルマーク「$」がつく

$行を表すアルファベット$列番号 : $B$4、$A$3:$B$7のような感じ

.Addressプロパティには以下のようにドルマーク(絶対参照)を付けるかどうかを指定する引数がある。

.Address(RowAbsolute, ColumnAbsolute)

RowAbsolute:行に\$をつけるか(Falseなら付けない、なしもしくはTrueなら付ける)
ColumnAbsolute:列に\$をつけるか(Falseなら付けない、なしもしくはTrueなら付ける)
そのため、ドルをつけずに参照範囲を取得したいときには以下のように書く

Sub sample()
    Dim a As String
    a = Selection.Address(False,False)
    MsgBox a
End Sub

05_.Add(メソッド):引数に従いワークシートを追加する。※最大4つの引数があるが、必要ない物は省略可能(そこはおそらくデフォルト値になる)

    Worksheets.Add 第1引数(Before),第2引数(After),第3引数(Count),第4引数(Type)

① Before シートの追加先を指定。指定した場所の前にシートを追加する
② After シートの追加先を指定。指定した場所のあとにシートを追加する
③ Count 追加するシートの数を指定。省略時は、1とみなされる
④ Type  追加するシートの種類を指定

※オブジェクトとしてWorksheets以外の指定も参考資料①によるとありうる。
※追加するシートの場所は、Before または After で指定。Before と After の両方を省略すると、アクティブシートの前にシートが追加される

アクティブなシートのブック内に $n$ 枚シートを追加する。( Worksheetsは全てのワークシートを示す。)Addメソッドを使用して「Sheet1」の前にワークシートを $n$ 枚追加

    Worksheets.Add Worksheets("Sheet1"), , n

「テスト」シートの前にシートを $n$ 枚追加する

    Worksheets.Add Before:=Worksheets("テスト"),Count:=n
    または
    Worksheets.Add ,Worksheets("テスト"),n

※下はAdd のすぐ後ろに 「,」があることに注意 ※これは第1引数を省略することを表す。


06_Msgboxメソッド(メソッドというよりは関数?)

※メッセージウィンドウモーダルを出現させる。Pythonでいうところの
import tkinter.messagebox as msg

response = msg.メッセージダイアログメソッド
#メッセージダイアログメソッド例 askokcancel('メッセージタイトル(枠端に表示)','メッセージ内容')

で出てくるメッセージボックスに近い(※↑はPythonです)


「こんにちは」と書かれたメッセージボックスを出す

    MsgBox "こんにちは"

A1セルを示すオブジェクトのValueプロパティに設定した値をMsgBox関数を使ってメッセージを表示

    MsgBox Range("A1").Value

07_.Interior:Rangeでアクティブにしたセルの塗りつぶしに関する書式の変更に用いるオブジェクト

Rangeで情報を取得したセルの「(背景の)塗りつぶしの色」を「塗りつぶしなし」にする

    With Range("~").Interior
        .Pattern = xlNone
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With

Rangeでアクティブにして情報を取得しセルの「(背景の)塗りつぶしの色」をつける

    With Range("~").Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 1234567    '数字を変えると色が変わる
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With

なお、上のように「同じオブジェクト」についての指示をまとめて書くときは、With ~ End With で挟む(With Statement)と楽かつ、可読性が高い


08_.Font:その名の通り Range でアクティブにしたセルのサイズや太文字、罫線などを含むフォントの変更に用いるオブジェクト

A1セルをRangeで選択したあと、A1セルのフォントを「MSPゴシック、サイズを18、太文字、下二重罫線」に変更

    With Range("A1").Font
        '    フォントを変更する
        .Name = "MSPゴシック"

        '    サイズを「18」にする
        .Size = 18
            
        '    太字をオンにする
        .Bold = True

        '  下二重罫線を引く
        .Underline = _
            xlUnderlineStyleDoubleAccounting
        '    ↑xの隣は「エルの小文字」
    End With

09_.Clearcontents(メソッド):Rangeでアクティブにしたセルに入力してあるデータを消去する

Rangeで取得したA1セルのデータの消去

Range("A1")
    .ClearContents

RangeでB4×C8の長方形範囲を複数選択して、一括データ消去

Range("B4:C8").Select
    Selection.ClearContents

10_Offset(引数1,引数2):Range(セル)のプロパティ、指定したセルに対して相対的な位置で別のセルを指定するときに用いる

※注意:第1引数が「$y$ 軸方向の負の方向への「相対的な」移動」、第2引数が「$x$ 軸方向の正の方向への「相対的な」移動」

最初に選んだセルをA1とした場合に、右に1、下に2移動した位置に「実験」という文字列が入力されるようにする。

    ActiveCell.Offset(2, 1).Range("A1").Select
    ActiveCell.FormulaR1C1 = "実験"
    ActiveCell.Characters(1, 2).PhoneticCharacters = "ジッケン"
    ActiveCell.Offset(1, 0).Range("A1").Select

※PythonでExcel自動処理化するための外部ライブラリー「openpyxl」の使用感とかもまた追記します。

とりあえず、以下でインストール

※Anaconda使わずとも、VScodeのpowershellとかでも可能

pip openpyxl

主な参考資料

①今すぐ使えるかんたん Excel マクロ&VBA 技術評論社 門脇香奈子 著

Amazonリンク

https://www.amazon.co.jp/%E4%BB%8A%E3%81%99%E3%81%90%E4%BD%BF%E3%81%88%E3%82%8B%E3%81%8B%E3%82%93%E3%81%9F%E3%82%93-Excel%E3%83%9E%E3%82%AF%E3%83%AD-Office-Microsoft-365%E5%AF%BE%E5%BF%9C%E7%89%88/dp/4297129701/ref=sr_1_3?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=87AM31OPUPGU&keywords=%E4%BB%8A%E3%81%99%E3%81%90%E4%BD%BF%E3%81%88%E3%82%8B%E3%81%8B%E3%82%93%E3%81%9F%E3%82%93+excel+%E3%83%9E%E3%82%AF%E3%83%AD%26vba+%E6%8A%80%E8%A1%93%E8%A9%95%E8%AB%96%E7%A4%BE+%E9%96%80%E8%84%87%E9%A6%99%E5%A5%88%E5%AD%90+%E8%91%97&qid=1705239199&sprefix=%E4%BB%8A%E3%81%99%E3%81%90%E4%BD%BF%E3%81%88%E3%82%8B%E3%81%8B%E3%82%93%E3%81%9F%E3%82%93+excel+%E3%83%9E%E3%82%AF%E3%83%AD+vba+%E6%8A%80%E8%A1%93%E8%A9%95%E8%AB%96%E7%A4%BE+%E9%96%80%E8%84%87%E9%A6%99%E5%A5%88%E5%AD%90+%E8%91%97%2Caps%2C281&sr=8-3

②スピードマスター エクセル自動化 VBAサンプル100 コピってイジってすぐ使える 技術評論社 今村ゆうこ

Amazonリンク

https://www.amazon.co.jp/%E3%82%B9%E3%83%94%E3%83%BC%E3%83%89%E3%83%9E%E3%82%B9%E3%82%BF%E3%83%BC-%E3%82%A8%E3%82%AF%E3%82%BB%E3%83%AB%E8%87%AA%E5%8B%95%E5%8C%96-VBA%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB100-%E3%82%B3%E3%83%94%E3%81%A3%E3%81%A6%E3%82%A4%E3%82%B8%E3%81%A3%E3%81%A6%E3%81%99%E3%81%90%E4%BD%BF%E3%81%88%E3%82%8B-%E4%BB%8A%E6%9D%91-%E3%82%86%E3%81%86%E3%81%93-ebook/dp/B0BTCM43GT/ref=sr_1_4?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=3ZNXZDE69UB9&keywords=%E4%BB%8A%E6%9D%91%E3%82%86%E3%81%86%E3%81%93&qid=1705481528&sprefix=%E4%BB%8A%E6%9D%91%E3%82%86%E3%81%86%E3%81%93%2Caps%2C232&sr=8-4

③HITACHI Inspire the Next RPA業務自動化ソリューション【コラム】VBAとマクロの違いとは?VBA・マクロができること、マクロの作り方を徹底解説!
https://www.hitachi-solutions.co.jp/rpa/sp/column/rpa_vol26/

④エクセルの神髄( ExcelとVBA の入門解説)
Excel および マクロ VBA 全般について入門解説から上級者に役立つ技術情報まで幅広く発信しているサイト。GAS、Python、SQLといった関連情報も載っている
https://excel-ubara.com/

⑤最初からそう教えてくればいいのに! PythonでExcelやメール操作を自動化する ツボとコツがゼッタイにわかる本 立山秀利 著 秀和システム社

Amazonリンク

https://www.amazon.co.jp/%E4%BB%8A%E3%81%99%E3%81%90%E4%BD%BF%E3%81%88%E3%82%8B%E3%81%8B%E3%82%93%E3%81%9F%E3%82%93-Excel%E3%83%9E%E3%82%AF%E3%83%AD-Office-Microsoft-365%E5%AF%BE%E5%BF%9C%E7%89%88/dp/4297129701/ref=sr_1_13?crid=MN161L425MW7&keywords=excel+%E3%83%9E%E3%82%AF%E3%83%AD+vba&qid=1705932478&sprefix=Excel+%E3%83%9E%E3%82%AF%E3%83%AD%2Caps%2C219&sr=8-13

⑥確かな力が身につくPython「超」入門 第2版 (確かな力が身につく「超」入門) 鎌田正浩 著 SB creative社 

Amazonリンク

https://www.amazon.co.jp/%E7%A2%BA%E3%81%8B%E3%81%AA%E5%8A%9B%E3%81%8C%E8%BA%AB%E3%81%AB%E3%81%A4%E3%81%8FPython%E3%80%8C%E8%B6%85%E3%80%8D%E5%85%A5%E9%96%80-%E7%AC%AC2%E7%89%88-%E7%A2%BA%E3%81%8B%E3%81%AA%E5%8A%9B%E3%81%8C%E8%BA%AB%E3%81%AB%E3%81%A4%E3%81%8F%E3%80%8C%E8%B6%85%E3%80%8D%E5%85%A5%E9%96%80-%E9%8E%8C%E7%94%B0-%E6%AD%A3%E6%B5%A9/dp/4815613729/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=2QWFRN76M4ZK9&keywords=python+%E8%B6%85%E5%85%A5%E9%96%80&qid=1705932839&sprefix=python%E8%B6%85%E5%85%A5%E9%96%80%2Caps%2C226&sr=8-1

⑦Microsoft公式 Selectionプロパティ
https://learn.microsoft.com/ja-jp/office/vba/api/excel.application.selection

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?