Excel VBA事始め その1

仕事猫
©いらすとや.

「がとらぼ」では5年ほど前にExcel&Access VBAの記事をホンの幾つか書いたことがあるけど、忙しくなってその後が続けられず取り下げた。今回改めてExcelやAccessでのVBAの触りから何か実用的なものを作るというのをやっていきたいかなと思っている。個々の細かいことは他所の詳しいサイトを見て貰うとして「がとらぼ」ではコツみたいなのを主にやりたい。のんびりとね。

個人でたとえば家計簿や趣味のことでデータを一覧や表にするというのをやっている人はいるとは思う。でも、データ集計というのはあまり個人でやることはないかな。
一方で会社の業務ではとにかくデータを集めて集計というのをずっとやっている人もいるでしょう。Excelはデータ集計では非常に便利というか必須のツールです。
業務といえど新卒で雇われてから定年で退職までずっと異動もなく同じ集計をやり続けるということはない筈で、異動もあれば中途退職、逆に中途採用で入ってくることもあるでしょう。「この集計は俺でないとダメだぁ」とかじりついたままで居られても困ります。集計という仕事も次々に別の人に引き継いでいくことでしょう。また、集計自体も変わっていく筈で「勤続30年ですが毎日/毎週/毎月/毎年、何一つ変わりません」ということはないでしょう。
そこで、集計を誰でもできるようにレシピ化するというのが必要になります。

で、日本の会社だと「では誰でもできるように手順書を作りましょう」とやってしまうところが多いかな?そんなおバカな会社は今後は淘汰されていくと思うけど。
ホンの数分の手順でできる程度の集計ならともかく数百のデータソースファイルやデータベースからデータを集めて手作業で数日かかるようなのは注意しても間違いもあるし正確にできるにしてもそもそも時間の盛大な無駄。人間のために「手順書」というレシピを作るくらいならコンピューターにやらせるレシピを作って更新していってね。ExcelやAccessならVBAでどうぞ。

でも、小さな会社であっても会社の誰か1人だけがExcel VBAを触れますというのはダメよ。ホント難しいものではないので何人かができるように。ワークシート関数ウィザードには相当スキルが高くて才能がある人でないとなれないけどVBAで何か書ける/読める/データの振り分け/データの集計程度ならPC触るの初めての人でも1週間も研修すればほぼ誰でもなんとかなりそうなレベルになるかと。
エクセレントなコードにこだわって他人が理解できないようなのじゃなくて泥臭くても良いので何をしたいのかが判るように書くのが大事と思う。でないと、後から何か変更の要があったときに、かつて自分で書いたものであってもじっくり読まないと丸っきり解らないなんてことも。まして他人の書いたのなんて小難しいことがしてあるとメモがあってもチンプンカンプン。これじゃダメ。

以下はWindows 11とExcel 2021の画面での説明になりますがやってること/やること/できることはほぼ20年以上前のExcelから大して変わりません。(Excel 2007から拡張された部分を除く)

Excelの起動から

Excel VBA事始め 1
Excelはスタートメニューから起動します。またはExcelのファイルをダブルクリックすれば起動しますね。

Excel VBA事始め 2
Excelのホーム画面です。今回、Windows 11のダークテーマが有効のPCでExcelを起動したところExcelもダークテーマで起動したのでこれを変更します。
左下の「オプション」をクリック。

Excel VBA事始め 3
「Excelのオプション」画面の左列で「全般」を選択した状態で、右列の「Officeテーマ」を変更します。このページの以下の画像では「カラフル」のテーマを有効にした画面になっています。
右下の[OK]をクリックして変更を確定させてからホーム画面に戻ります。

Excel VBA事始め 4
今回は新規ワークブックを使って操作してみるので「空白のブック」をクリックします。
ExcelではExcelの1つのファイルをワークブック(Workbook)といいます。(次の画像でも)

Excel VBA事始め 5
Excelの基礎の基礎ですが、今後VBAで何かしようと思ったら幾つかの用語を認識することが非常に重要です。
Excelのファイルがワークブック、Workbook(s)です。
1つのワークブックには罫線のページであるワークシート(Worksheet)が1つ以上含まれます。ワークシートは追加や削除や並べ替えが可能です。罫線のページ以外にグラフなどのシートもあります。VBAでは罫線のページであるWorksheet(s)と、ワークシート&の他のシートを区別しないSheetsがあります。
罫線のワークシートの罫線の1マスをセル Cell(セル)といいます。Excel VBAではCells(アドレス)として指定すると1つのセルのことを指し、Cells だけを指定するとワークシート内の全てのセル(1つのワークシート全体)を指します。

Excel VBA事始め 6
横に端から端までが「行」(Row ロー/ロウ)。上から1行目,2行目と上下に並ぶ。Excel 2003までは最大で65535行。(xlsファイル)
Excel 2007以降は拡張されて100万行(1048576行)。(xlsx, xlsmファイル)
6万5千行というのはかなり厳しい制限だったので拡張されたことは喜ばしいけどExcelが重く不安定になったのでそれが凄いデメリット。(Excel 2021でも変わらず)
xlsxファイルがVBAマクロ無し、xlsmファイルがVBAマクロ有りのファイルの拡張子です。

Excel VBA事始め 7
縦に端から端までが「列」(Column カラム/コラム)。左から1列目2列目と左右に並ぶ。Excel 2003までは最大256列。(xlsファイル)
Excel 2007以降は拡張されて16384列。(xlsx, xlsmファイル)
Excelでは標準状態でA列,B列のようにアルファベットの列名になっています。行との混同を防ぐために判りやすいですがアルファベットの列名というのはプログラムでは使いにくいかも。(VBAでは多くは数字の列番号を使うと思います)

Excel VBA事始め 8
範囲は(基本的には)ワークシート内で任意で選択できます。Range (レンジ)。
VBAでは単純な計算時にはあまり使わないかもしれませんが、コピーや集計や装飾等では意外とよく使用します。

Excel VBA事始め 9
ワークシートのセルに埋める計算式がワークシート関数です。VBAを使わなくても自動計算できて大変便利なので好きな人は多用します。「宣言」等を使うことで他のワークブックも参照して計算できます。
しかし、自身の不注意や他人の無知によって破壊されやすく破壊されたことが判りにくく、メンテナンス性が良くないという問題があるため「がとらぼ」の中の人は嫌いです。(特定のセルをロックしたりワークシートの保護をしていても何故か壊されるよね、会社のExcelあるある)
VBAからワークシート関数を変更することが可能です。

VBEで何か書いてみる

Excel VBA事始め 10
Visual Basic Editor (VBE)を開きます。[Alt]+[F11]です。
おそらくVBEを開く前にアクティブになっていたワークシートのコード窓が開きます。上の画像ではSheet1のコード窓が開いています。

Excel VBA事始め 11
今回はあえてsheet1のコード窓にコードを書く。
ワークシートのコード窓にコードを書くとワークシートの指定を省略してもそのワークシートであると認識されます。
ただし、ワークシートというのは削除されることがあり、ワークシートが削除されるとそこに書かれたコードも失われるため、ワークシートにコードを書くのはあまりオススメはしません。
コードを書いたら[F5]で実行。

1
2
3
Sub test()
    Cells(1,1).Value = "Hello Excel VBA!"
End Sub

「サブルーチン」プロシージャを使用し、プロシージャ名はtest。 (1行目)
セル(1行目,1列目)の値(Value)に「Hello Excel VBA!」を指定。(2行目)
testサブルーチンプロシージャを終了。(3行目)。

VBAでは戻り値のない関数をサブルーチン(Sub)に、戻り値のある関数をファンクション(Function)というプロシージャに書きます。

部品/要素(オブジェクト)には階層があります。「事務所」の「3番目の机」の「右の1番上の引き出し」の「ボールペン」のように「book1.xlsmワークブック」の「Sheet1ワークシート」の「A1セル(1行目/1列目)」。
そして「プロパティ」とその「内容」があります。
〜の「ボールペン(オブジェクト)」の「インクの色(プロパティ)」は「赤(内容)」というのはありますが、〜の「ボールペン」の「芯の濃さ(プロパティ)」は「2B(内容)」というのがありえないように、〜の「A1セル(オブジェクト)」の「値(プロパティ)」は「ホニャララ(内容)」というのはありますが、〜の「A1セル」の「高さ(プロパティ)」は「16ポイント(内容)」というのはありません。Excelでセルが個別に高さを持つことはできません。ワークシートで「高さ」プロパティを持つのは「行(Row)」です。

今回はSheet1のコード窓に書いたので Thisworkbook.Worksheets("Sheet1").Cells(1,1).Value = "〜" のようにワークブックやワークシートの指定を行うことをせず、いきなり Cells(1,1).Value = "〜" のように省いて書くことができるが、複数のワークブック、ワークシートを扱うときはワークブックやワークシートを明示するようにする方が無難。(次回以降はワークブックやワークシートを明示する書き方をします)

Excel VBA事始め 12
VBAに書いたコードを実行したらSheet1ワークシートを確認する。
A1セルに「Hello Excel VBA!」が入っているので成功。

次回以降、業務に使えそうなことを少しずついろいろやっていこうと思います。

2021年11月28日: 記事題名に「その1」を追加

Androidでアドレス帳/カレンダーの切り替え (DAVx5 CalDAV/CardDAV同期アプリを使って)

連絡帳
©いらすとや.

前回、AndroidでCardDAV/CalDAVを使うためにDAVx5をインストールしてCardDAV/CalDAV用アカウントをAndroid端末内に登録した。
このアカウントがどういうものなのかというのはAndroidで標準メーラーともいえるGmailアプリで考えてみると簡単。

Gmailアプリとアカウント

AndroidでCardDAV/CalDAV 1
AndroidのGmailアプリはGoogleアカウントを使ってGoogleのメールサービスであるGmailのメールを読み書きするもの。
でも、GoogleのGmailのメールだけでなく他のメールサービスのアカウントでそのメールの読み書きもできる。その外部メールアカウントの登録はAndroidの設定の「アカウント」から登録することもできるが、Gmailアプリの「設定」からもできる。
Gmailアプリのメニューから「設定」「アカウントを追加する」をタップする。
もしくは、Gmailアプリのメイン画面右上のアカウントの丸アイコンをタップする。(上の画像はこちら)
「別のアカウントを追加」をタップ。

AndroidでCardDAV/CalDAV 2
Googleの他のアカウントやMicrosoft系、Yahooアカウントの他に「その他」で一般的なメールの接続方法のPOP3やIMAP4も選べる。

このようにGoogle以外のアカウントをGmailアプリで利用するにはそのアカウントを(Androidに)登録することになる。
同じように「連絡先」(アドレス帳)やカレンダーもGoogle以外のサービスのアカウントを登録すればAndroidで使えるのだが、CardDAV/CalDAVのアカウントを登録する仕組みがAndroid側に用意されていない。先程のAndroidのアカウントの追加でいえば「その他」が用意されていなければPOP3/IMAPが使えないのと同じようなもの。
そこでインストールしたのが、DAVx5

Gmailアプリでメールを見るとき/メールを送信するときにはメールのアカウントを切り替えることになる。(Gmailアプリで読む方は統合モードみたいなのもあるけど逆にややこしくなるので嫌い)
同様に「連絡帳」アプリや「カレンダー」アプリでも新しいアドレスや予定を登録するときにアカウントを切り替えたり、表示する連絡帳やカレンダーを切り替えたりする。

連絡帳アプリとアカウント切り替え

AndroidでCardDAV/CalDAV 3
「連絡帳」(アドレス帳)アプリを表示する。(Google版)
Gmailアプリと同じく右上の丸アイコンで表示するアカウントを切り替える。初期値ではGoogleコンタクトに登録されている連絡先を含め、その他のアカウントのアドレス帳に登録されているすべての連絡先が表示される。大抵はそれでも良いかもしれないし、仕事用とプライベート用でアカウントを分けることで切り替えて表示するという使い方も良いかもしれない。DAVx5のアドレス帳を選択してCardDAVに登録されている連絡先だけを表示するという使い方もあるかもしれないということ。
連絡帳アプリでは右下に新しい連絡先の登録用アイコンがある。(次の次で)

AndroidでCardDAV/CalDAV 4
上の画面でGoogleアカウントだけを表示するようにしてみた。個人的に連絡先をGoogleコンタクトに登録していないので「連絡先はありません」になる。「他のアカウントに○件の連絡先」というおせっかいな情報の表示は正直要らない。

AndroidでCardDAV/CalDAV 5
初めて連絡先を連絡帳アプリで登録するときには登録先のデフォルトを選択するように上の画像のようなサブ窓が表示されるかと。ここでデフォルトとしてGoogleアカウントを選択すれば次回以降は特に尋ねられることなくGoogleコンタクトに登録されるし、DAVx5を選択すれば連携しているCardDAVのアドレス帳に登録される。
ここでの選択はあくまでデフォルトの選択であって、今後の全ての連絡先がデフォルトとして選択したアカウントだけにしか登録できないというものではない。新しい連絡先を登録する毎に任意のアカウントのアドレス帳に切り替えて登録することは可能。(次)

AndroidでCardDAV/CalDAV 6
新しい連絡先を登録する画面。上部に「保存先」のドロップダウンメニューがあるので登録先を変更したいときは選べばその選択したアカウントのアドレス帳に登録される。初期値はデフォルトとして選択したアカウントのアドレス帳。

Googleカレンダーアプリとアカウント切り替え

AndroidでCardDAV/CalDAV 7
今度はGoogleカレンダーの登録画面。
新しい予定を登録する画面で「タイトルを追加」の下にあるアカウントをタップする。
Googleアカウントを選択すればGoogleカレンダーに登録されることになるし、DAVx5に登録したアカウントを選択すればその連携先のCalDAVサーバのカレンダーに登録されることになる。先の連絡帳アプリと違い「DAVx5」であることは示されずDAVx5に登録したアカウント名がそっけなく表示されるのでちょっと判りにくいかも。

AndroidでCardDAV/CalDAV 8
保存先アカウントの選択画面。ここでも「DAVx5」であることは示されない。Googleもアカウント名だけが表示される。

AndroidでCardDAV/CalDAV 9
Googleカレンダーアプリでは初期値は連携しているアカウントの全てのカレンダーの予定が表示される状態。表示する予定をアカウントごとに切り替えるならメイン画面左上の「」(ハンバーガーメニューアイコン)をタップすると上の画像のような画面。
その画面で表示したいカレンダーのチェックを付けた状態にする。(初期値は全てチェックなので)つまり表示したくないカレンダーのチェックを外す。
上の画像では「個人」というカレンダーになっているが、複数のカレンダーを持つことやカレンダーを違う名前にすることもできるので必ず「個人」になるというわけではない。アカウント名とカレンダー名で判断してください。

こんな感じで、アカウントを切り替えて表示する、連絡先や予定を保存先アカウントをしっかり選んで登録する、というのをアタマの片隅にでも置いておいてください。GoogleコンタクトやGoogleカレンダーしか使ってないと意識しないところなので。

最近はカレンダーアプリは「Googleカレンダー」しか使っていないのでAndroid用の他のカレンダー系アプリの状況を知らないが、数年前はGoogleカレンダーと同様にカレンダー用のアカウントを切り替えて利用できるアプリもあることはあったが多いというほどではなく、Googleカレンダー或いはそのアプリの専用カレンダーしか利用できないものが多かった。そのようなアカウント切り替えのできないカレンダーアプリではDAVx5は使えません。
連絡帳アプリも同様なのでDAVx5を使うならアドレス帳アカウントの切り替えの可能なアプリを利用しましょう。

関連記事:
Up