【Excel】VBAを書くための前準備4項目9手順

Excel
スポンサーリンク

Excelでプログラミングする前の基本設定「4項目9手順」

4つの前準備をしてから、VBEを開く

  1. Excelクイックアクセスツールバーのユーザー設定
    • カメラ
    • 印刷プレビュー
    • コントロールの挿入
    • マクロの表示
    • ペースト時にマウス右クリック→「貼り付け先の書式を適用して貼り付ける」
  2. DesktopにExcelマクロ有効ブックを作成しておく
    • マクロ付きExcelブックの拡張子は.xlsm
  3. クリップボードの設定
    • Windowsマーク+v
  4. Excel「ALT+F11」VBEを開き「標準モジュール」で下記モジュールをコピペ
    • Sub A1RC1Display()
    • Function CHRCVT(r)
    • この記事の真ん中ぐらいに2つ連続で記載

Excelクイックアクセスツールバーのユーザー設定

カメラ

Excelの表を簡単に説明したい時に、よく使う機能。知っていると便利な機能。

印刷プレビュー

Excelが一番印刷するので、ツールバーに入れる。マクロうんぬんではない。

最近は紙ではなくPDF出力が多いかも。

コントロールの挿入

ボタンにマクロを登録して実行させるのに使う。あまり仕様しないが使う時にどこにあるか?ってなることが多いので、登録している。

マクロの表示

VBA作成時は絶対に必要なショートカット(必須)

ここから実行するマクロをSubプロシージャで記載し、他をFunction関数としてプログラミングすると、メニューを作らない仕様も可能になる。

貼り付け先の書式を適用して貼り付ける「ALT→H→V→M」

これはコピペではマストの項目。

そのままコピーすると画像などがそのままついてくるので重いし後で手動で消さないといけなくなる。

「ALT→H→V→M」と押してコピペすると「貼り付け先の書式を適用して貼り付ける」ことができる。

この機能をショートカットしておくと「ALT→設定番号」の2タッチで手動でコピペ可能だが、

通常はペースト時にマウス右クリック→「貼り付け先の書式を適用して貼り付ける」

ExcelVBAではこの機能をマクロ記憶すると下記のようになる。

ActiveSheet.PasteSpecial Format:="HTML", Link:=False, DisplayAsIcon:=False, NoHTMLFormatting:=True

DesktopにExcelマクロ有効ブックを作成しておく

通常のxlsxだとマクロ作成後に誤って消してしまうのを事前に防ぐ

慣れると後でも保存可能だが、初めて使うならこれ一つ作っておけばマクロ付きで保存するのでせっかく作ったマクロを消すというミスがなくなる。

マクロ付きExcelブックの拡張子は.xlsmとなり.xlsxとは別ファイル扱いとなる。

クリップボードの設定

Windowsマーク+v

Windows10なので大文字Vでも同じポップアップメニューが表示される。

これでコピペの履歴が見れるので、コピペ実行がどこまでちゃんと動作しているのか?が可視化できる。これはVBEデバッグ機能をわざわざ使わなくても見れば分かる簡単なデバッグ方法。コピペ作業にはクリップボードは必須アイテムなので、「Clipboard」でも検索できるようにするとVBA以外でも全てのプログラミングで役に立つ。コピペする内容によって判断する関数を自作することになるが使うのはほぼテキストになると思うので、私のサンプルをそのまま利用できるはずだ。

クリップボードの内容をクリアするVBAサンプル

'クリップボードをクリアする準備
Public Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long
Public Declare Function CloseClipboard Lib "user32" () As Long
Public Declare Function EmptyClipboard Lib "user32" () As Long

Sub CBClear()
'クリップボードをクリアする命令
	OpenClipboard (0&)
	EmptyClipboard
	CloseClipboard
End Sub

このままVBAとしてコピペして使える。CALL CBClear

クリップボードの内容がテキストなら-1を返すVBAサンプル

Function CBCheck() As Variant
    Dim CB As New DataObject
    CB.GetFromClipboard
    CBCheck = False
    If CB.GetFormat(1) Then     'textである
        CBCheck = True
    End If
End Function

これはサンプルプログラムがSubプロシージャーでつぎのような例になっていることが多い。

サンプルはMsgBox表示なので自分でカスタマイズする

Sub CBCheck()
    Dim CB As New DataObject
    CB.GetFromClipboard
    If CB.GetFormat(1) Then
        MsgBox CB.GetText
    Else
        MsgBox "クリップボードにテキストがありません"
    End If
End Sub

これを上のFunctionに変更するぐらいのプログラミング力はこのブログでマスターできる。

「Function CBCheck() As Variant」 が 「Boolean」 でないのは、個人的な好き嫌い?ではなく、Excelだと戻り値に暗黙でVariantが指定されるので、こっちの方が標準なのだ。つまり As Variant は省略可能なので、ちょっと昔のサンプルだと 「Function CBCheck() 」と書いてあるモノが多いので知っておく必要がある。またExcelだとセル値を代入することが多いので、「Boolean」を指定するより「Variant」または省略がベター。

Excel「ALT+F11」VBEを開き「標準モジュール」でコードを書く

便利なVBAサンプル「A1RC1Display」

Sub A1RC1Display()
    If Application.ReferenceStyle = xlA1 Then
        Application.ReferenceStyle = xlR1C1
    Else
        Application.ReferenceStyle = xlA1
    End If
End Sub

これはExcel VBAを作成する場合、このまま標準モジュールにコピペしておけば良い。

このモジュールを実行するとExcelの列見出しがAから数字の1になる「A1表示↔R1C1表示切替」

いちいち設定から変更せずにマクロ実行一発で切替ができるという優れもので使用頻度は高い。

不必要な空白を””に統一して比較演算に使うことでコードが綺麗に書ける工夫

=IF文でよく使う

Function CHRCVT(r) As String
     If IsNull(r) Then
         CHRCVT = ""
     Else
         CHRCVT = Trim(r)
     End If
End Function

上記のVBAサンプルは、Fuction関数以外は全て、そのまま使えるので利用機会があれば試してもらえればと思う。モジュールの説明はFunction CBCheck()の使い方ぐらいで、後はそのまま使ってそのうちに内容を理解していくぐらいで丁度良いと思う。

クリップボードのテストで動きをチェックするエクセルマクロのサンプル

Sub CBCheck_test1
Dim RET As variant
'戻り値は0:false -1:true
    RET=CBCheck()
  MsgBox RET
End Sub

Sub CBCheck_test2
Dim RET As variant
'戻り値は0:false -1:true
    MsgBox CBCheck()
End Sub

Sub CBCheck_test3
Dim RET As variant
'戻り値は0:false -1:true
    if CBCheck then
        Msgbox "クリップボードはテキストです"
    Else
        Msgbox "クリップボードにテキストがありません"
    End if
End Sub

Function CBCheck() As Variant
    Dim CB As New DataObject
    CB.GetFromClipboard
    CBCheck = False
    If CB.GetFormat(1) Then     'textである
        CBCheck = True
    End If
End Function

Functionの使い方の例をサンプルしてみた

大事なのは、使うときに直ぐ取り出せること!

私も良くあるけど、使う時に探す時間の方が長い!場合が多く。見つからないとイライラして本当に効率が悪くなる。。。そもそもそんなに急ぐことなんてないんだけども…

何事も整理整頓って大切なんだよwホント。

編集後記

実際に作るには準備の方が案外手間だったりする

これは全てに言える事かもねぇ~大概準備に時間が掛かるもんねぇw

その手間が楽しいなぁ~とか!カネカネカネ~とかね!テンション上がる感じだと、続くんだよね。

まぁプログラムは一度作って通常稼働しだすと、メチャンコ便利になるからねぇ~

それを感じられるってのは、自作した人にしか分からない境地なのかなぁ?とも思う。

私はモノグサなので本来プログラムを作成したりするのは面倒なんだけど、「楽」になる感じはするので、最近は必要最低限、自分のためのプログラミングを実践しているって事になるかな~🐸

それでは、またね~😎

タイトルとURLをコピーしました