<p>プログラミングで仕事ができるようにするためには、プログラミング言語の知識はもちろん、それ以外にも何らかのノウハウが必要だと思われます。</p>
<p>&nbsp;</p>
<p>それと同様に経理の仕事をするためには最低限簿記2級の知識に加えて、いかに「ミスをしないための方法やテクニック又はミスしそうな場所」を理解できるようになるかも重要です。</p>
<p>&nbsp;</p>
<p>なぜそのような方法やテクニックが必要になってくるかというと、日々膨大な量の情報を処理しなければいけないので、ただ単純に仕事に取り組んでいるだけだとどうしてもどこかでミスが出てしまうからです。</p>
<p>&nbsp;</p>
<p>最近『続ExcelVBAのプログラミングのツボとコツがゼッタイにわかる本』を読みながら本の内容を実際にプログラミングしていたのですが、経理業務で「ミスをしないための方法やテクニック又はミスしそうな場所」に当たる部分ではないかと思うところがありました。</p>
<p>&nbsp;</p>
<p>今回はそのことについて、忘れず整理するために備忘録という意味でも書いていこうかと思います。</p>
<p>&nbsp;</p>
<h2>通常の変数の型とオブジェクト変数の型の違いについて</h2>
<p>「あれ、なんで動かないんだ？」</p>
<p>&nbsp;</p>
<p>『続ExcelVBAのプログラミングのツボとコツがゼッタイにわかる本』を見ながらコードを入力していて、なぜか動かないという時がありました。どこが間違っているのか画面上のコードと本に書かれているコードを何度も見比べながら順番にチェックしていったのですが、どうしても間違っている箇所が見つかりません。</p>
<p>&nbsp;</p>
<p>VBAを勉強していると「変数」とか「型」といった概念が出てきます。VBAにおける通常の変数や型というのは『VBAエキスパート公式テキスト Excel VBA ベーシック』には次のように書かれています。</p>
<blockquote>
<p>p.62</p>
<p>変数とは、値を一時的に保存しておき、いつでも好きなときに取り出せる一時的な記憶領域です。しばしば変数は「箱のようなもの」と喩えられます。</p>
<p>（中略）</p>
<p>変数には型という概念があります。これは、変数に入れる値によって、専用の変数を使うという仕組みです。たとえば、文字を入れる変数なら文字列型として宣言し、整数を入れる変数であれば長整数型として宣言するようなやり方です。</p>
</blockquote>
<p>&nbsp;</p>
<p>わかりやすく言えば「丸い箱」とか「四角い箱」があって、丸い箱には「数値」しか入れられないけど、四角い箱には「文字」が入れられるみたいなイメージです。</p>
<p>&nbsp;</p>
<p>もう少し詳しく書くと、例えば「i」という変数を宣言して、その型をInteger型にすると、iには－32,768から32,767までの数値が入れられるようになります。</p>
<p>&nbsp;</p>
<p>変数と型について以上が「通常」の形なのですが、この言葉を使った理由はVBAにおいてこの範囲に含まれない変数や型も出てくるからです。それが「オブジェクト型変数」というものです。</p>
<p>&nbsp;</p>
<p>『続ExcelVBAのプログラミングのツボとコツがゼッタイにわかる本』という本で次のような部分で躓きました。</p>
<p>&nbsp;</p>
<h2>参照渡しと値渡しの違いは「ありか」を理解できるかどうかが重要</h2>
<p>VBAを勉強していると「参照渡し」とか「値渡し」といった言葉が出てきます。自分も何度もこの部分は読んではみたのですが、正直いまいち理解できませんでした。「『参照』と『値』って何？」といった感じです。</p>
<p>&nbsp;</p>
<p>しかし『Excel VBAでIEを思いのままに操作できるプログラミング術』という本を読んでみて理解できたので、その部分について引用してみます。</p>
<pre>p295
Const TMP_CELL As  String = "A1"

Private Sub fmHoliColorChange_Click()     
    Dim tmpRange As Range   '指定した色の取得に使うセル
 
    Set tmpRange = Range(TMP_CELL)   '指定した色の取得に使うセルを用意
    tmpRange.Activate   '同セルをアクティブ化</pre>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2>ステートメントや関数を使う時は大文字や小文字に注意する</h2>
<p>これは当たり前といえば当たり前なのですが、VBAでコードを入力する時はアルファベットの大文字と小文字に注意しないといけない、ということです。なぜなら、コードの中で1文字でも間違っていると動作しないからです。</p>
<p>&nbsp;</p>
<p>プログラミングを長年経験してきている人にとっては当たり前のことだと思います。けれども初心者の自分にとってはなかなか意識しづらかった部分であり、「あぁ、こういう所も合ってないとエクセルって反応してくれないんだな」と気づいた点でもありました。</p>
<p>&nbsp;</p>
<p>その点に気づいたのは、『続ExcelVBAのプログラミングのツボとコツがゼッタイにわかる本』の中の次の部分です。</p>
<p>&nbsp;</p>
<pre>p.329
Public Sub ドロップダウン列幅調整()
   Dim myControl As Control

   For Each myControl In Me.Controls
       If TypeName(myControl) = <span class="bold">"ComboBox"</span> Then
           Debug.Print myControl.Name
       End If   
   Next myControl
End Sub</pre>
<p>&nbsp;</p>
<p>引用したコードの内容として、まずmyControlをコントロール型の変数として宣言。For Each...Nextステートメントでフォーム上のコントロールをmyControlに順番に格納していきます。</p>
<p>&nbsp;</p>
<p>次にTypeName関数でmyControlの中で「ComboBox」のコントロールの名前をイミディエイトウィンドウに出力していくというコードです。</p>
<p>&nbsp;</p>
<p>この 「If TypeName(myControl) = <span class="bold">"ComboBox"</span> Then」の行の「ComboBox」の部分で躓きました。というのは、ComboBoxとしなければいけない部分を「combobox」としていたからです。</p>
<p>&nbsp;</p>
<p>どこがおかしいのかというと、頭文字の大文字のCを小文字の「c」にしてしまっていたのと、次のBoxのBを小文字の「b」にしてしまっていました。</p>
<p>&nbsp;</p>
<p>この部分でエラーが出てしまい、これに気づくのに30分くらいずっと画面と本とを見比べていました。</p>
<p>&nbsp;</p>
<p>普通に入力していればVBEが自動的に調整してくれるのですが、ダブルクォーテーションで囲まれているので、VBEはcomboboxというコントロールの種類としてではなく、単純に「文字列」として認識してしまっていたのだと思います。</p>
<p>&nbsp;</p>
<p>コードを入力する時は以上のように、大文字と小文字の違いとか、VBEがどのようにコードを認識しているのか、といった部分にも注意していかなければならないんだということがわかりました。</p>
<h2>単純な誤字脱字でつまづく</h2>
<p>経理の仕事で数値の計算をしていると、桁数を間違えたり1と7を見間違えたりといったことがあるように、実際に仕事でコードを入力していると、たぶん何からのミスがあるんだろうなぁと思います。</p>
<p>&nbsp;</p>
<p>例えば具体的にどんなものが考えられるかというと、「単純な誤字脱字」ではないかなと。</p>
<p>&nbsp;</p>
<p>以前次のようなことがありました。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2>まとめ</h2>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2>あわせて読みたい</h2>
<ul>
	<li><strong><a href="https://www.chishikinosoukonoseiri.com/entry/2018/02/25/1129">VBAプログラミングで仕様変更にも動的に対応できるコードという発想について</a></strong></li>
	<li><strong><a href="https://www.chishikinosoukonoseiri.com/entry/2018/02/17/2712">経理業務でデバッグツールが使えたり会計ソフトが学習できたら便利なのに</a></strong></li>
	<li><strong><a href="https://www.chishikinosoukonoseiri.com/entry/2018/02/03/1303">VBAが使える範囲はエクセルの他にMicrosoft系列以外にも及ぶ</a></strong></li>
	<li><strong><a href="https://www.chishikinosoukonoseiri.com/entry/2017/11/02/2333">VBAで日次業務のマクロをつくって試してみた結果</a></strong></li>
	<li><strong><a href="https://www.chishikinosoukonoseiri.com/entry/2017/10/21/0431">単純なVBAのコードは書けるようになったが次なる課題は・・・</a></strong></li>
</ul>