EXCEL、VBAプログラミング入門10~文字列操作(len,left,right)~第1回目

今回は、EXCEL VBAの文字列操作について説明をします。今回は、以下のような内容です。
1)前回までの復習
2)コメントの重要性について
3)Len関数について
4)Left関数について
5)条件式について
Right関数については、次回にご説明をします。

1)前回までの復習
今回は、前回に説明を行った関数内のプログラムについて説明を行います。サンプルプログラムのボタン「1」がクリックされた場合の処理の流れを辿ってみます。

下図の通り、上部「開発」タグを選択して「デザインモード」を選択してから、ボタン「1」を選択して、マウスの右クリックでメニューを表示して「コードの表示」を選択します。

図1.サンプルシステム

「デザインモード」を選択していないと、ボタン「1」をクリックした時点で処理が実行されてしまいます。デザインモードを解除するには、再度、「デザインモード」をクリックします。

つまり、「デザインモード」をクリックすることで、デザインモードのONとOFFを切り分けています。

「コードの表示」を選択すると、上図の右側の通りコードエディターが起動して、
Private Sub cmd1_Click()
内にマウスのカーソルが移動します。

これは、ボタン「1」をクリックした際の処理が、
Private Sub cmd1_Click()

End Sub
であることを示しています。

また、Private Sub cmd1_Click()内のプログラムは大部分が緑色になっており、行の先頭に「’」がついていますが、これはコメントであることを示しています。

つまり、Private Sub cmd1_Click()内の処理は、
Call 数値の表示(“1”)
の部分だけです。

「Call 数値の表示(“1”)」の行を選択している状態でマウスの右クリックで「定義」を選択すると、下図の通り「数値の表示」関数にカーソルが移動します。今回は、下図の矢印の部分から説明を行います。

図2.「数値の表示」関数

2)コメントの重要性について
図2の矢印の部分でどのような処理を行っているかを説明します。図2の矢印部分の処理の1行上はコメントとなっており、そこには以下のように記述されています。
‘先頭の文字が0の時は最初の文字をカットする

このようにプログラム中に処理の内容に対するコメントを記載しておくと、プログラムの可読性が向上します。プログラムを制作してから数年後にシステムの変更が必要になることがありますが、その際には自分自身もすっかり処理の内容を忘れてしまっていることがありますので、自分しか使わないプログラムであってもプログラム中に丁寧なコメントを記載することをお勧めします。

また、他者が制作したプログラムを改変する必要がある場合には、まずは、大きな流れをつかむためにコメント欄に注目するとよいでしょう。

他者が制作したプログラムを解析していくのにあたり何をしているか分からないコードの1行1行を解読していくよりは、どのような処理をしているのか、ある程度でも概要が分かっているのとでは理解力に随分と差が出ます。

そのため、いきなりプログラムの細かい部分を見ていくのではなく、まずはコメントの内容を確認して、概ねの処理の概要をつかみながら細かいプログラムを見ていくとよいでしょう。

ただコメントそのものが間違っていることもあるかもしれません。プログラムを制作していく時には全く何もないところから、プログラムを記載するのは稀で、ある程度、お決まりのプログラムブロックを他から引用してきて、自身の処理に改変していくといった方法でプログラムを制作していくことも多いと思いますが、その場合にコメントをついついそのままにしてしまっているといった場合や、そもそも実際のプログラム処理とコメントの内容が少しずれているということがあります。

自身でプログラムを記載する場合にも、如何にうまくコメントの内容を記載できるかで、プログラムの可読性が大きく変わってきますので、コメントの書き方にもぜひ、注力していただければと思います。

「数値の表示」関数の図2の矢印部分に話を戻すと、処理の趣旨としては本システムは計算機を模倣したものです。最上部の「図1.サンプルシステム」のセル番地「B3」は計算機の表示部分ですがここに「0」が表示されている状態で「1」を入力した場合に「01」と表示するのは変ですので「0」をカットして「1」と表示するということです。

3)Len関数について
Len(ワーク)
の部分ですが、これは、与えられた引数の文字列の長さをカウントする関数です。

「ワーク」変数はPrivate Sub cmd1_Click()の上部で
Dim ワーク As String
と宣言されていることから、「ワーク」変数は文字列として定義されています。この「ワーク」変数に例えば、「241」という文字が入っていた場合には、
Len(ワーク)
は「3」となります。

4)Left関数について
Left(ワーク, 1)
の部分についてですが、第1引数に与えられた値に対して左から第2引数に与えられた文字だけを取得する関数です。

例えば、「ワーク」変数に「241」という文字が入っていた場合には、左から「1」桁を取得するわけですので結果は「2」となります。

同様に
Left(ワーク, 2)
となっている場合に、例えば、「ワーク」変数に「241」という文字が入っていた場合には、左から「2」桁を取得するわけですので結果は「24」となります。

5)条件式について
図2のプログラム中の
If Len(ワーク) > 1 And Left(ワーク, 1) = “0” And Left(ワーク, 2) <> “0.” Then
処理
End If
の部分ですが、条件は
ワーク変数が1桁よりも大きい文字列であり かつ
ワーク変数の左から1桁の数値が”0”かつ
ワーク変数の左から2桁の数値が”0.”ではない場合には
IFの条件が真となるのでIF文内が処理されることになります。

Left(ワーク, 2) <> “0.” は条件が合致しない場合という意味になります。

IF文内の処理は、左の文字を1桁削除する処理です。具体的に何をしようとしているかというと図2のプログラム内のコメントの通り
「先頭の文字が0の時は最初の文字をカットする」
という処理です。

例えば、図1のサンプルシステムのセル番号「B3」に「9」が表示されていた場合に、ボタン「1」を押すと表示は「91」となります。つまり、ボタン「1」~「9」が押された場合には、通常は、現在、表示されている数値の右側に押されたボタンの数値を追加すればよいわけです。

セル番号「B3」にて「0」が表示されていた場合に、ボタン「1」を押すと上記のルールでは表示は「01」となりますが、ここでは先頭の「0」をカットして「1」と表示したいのです。この条件が
Left(ワーク, 1) = “0”
に該当します。

ところが、先頭に「0」が表示されていると必ずカットするというわけではなく、セル番号「B3」に「0.」が表示されていた場合に、ボタン「1」を押すとゼロをカットした「.1」ではなく、「0.1」と表示したいのです。この条件が
Left(ワーク, 2) <> “0.”
に該当します。

先頭が「0」の場合には「0」をカットするのですが、そもそもセル番地に「0」としか表示去れていない時に「0」をカットすると何も表示されなくなるので、その場合には「0」をカットしないようにします。この条件が
Len(ワーク) > 1
に該当します。

 


ニコニコチャンネル(月額固定で見放題)
http://ch.nicovideo.jp/ai-light
本記事に関連する動画講座を閲覧できます。一部の動画は無料でも閲覧できます。

YouTubeチャンネル(無料動画配信中)
https://www.youtube.com/user/ailightcom
ITと経営に関する動画を配信しております。
よろしければ、チャンネル登録をお願い致します。

無料から学べる講座
https://www.ai-light.com/itkeiei/
本記事に関連する動画講座をセット販売しております。
その他、ITと経営に関する動画もセット販売しております。

格安ホームページ制作所
https://www.ai-light.com/hp2
インターネットマーケティングに関する記事が無料で閲覧可能です。

株式会社アイライト公式HP
https://www.ai-light.com/
(Access・Excelでシステム開発会社を探されている法人様はこちら)

ITでお困りのことがございましたら、まずはご相談(コンサルティング)
https://www.ai-light.com/itconsulting.html


弊社は、主に中小企業様向けの業務システム開発ホームページ制作パソコンサポートコンサルティングなど、ITに関する様々なサービスを格安で提供しております。
特に小規模な業務システム開発の分野では、主にAccess(アクセス)を利用した柔軟で効率的な開発を得意としており、関西でダントツの実績があります。

業務システム開発に関しては、以下のような内容で対応しております。
・顧客管理などの単機能なシステムは20万円~50万円が多い。
・受注から入金まで業務全体システムで100万円~350万円ぐらいが多い。
・Access(アクセス)-SQLserverで大規模システム開発は350万円~1500万円が多い。

詳細は、Access(アクセス)、Excel(エクセル)、WEBサイト製作による小規模システム開発のページをご参考ください。

大阪商工会議所からの推薦を受けて、中小企業庁運営の中小企業支援事業に専門家として登録されました。
通称ミラサポ。3回まで無料でのコンサルティングが可能です。ご興味がある方はご連絡ください。
https://www.mirasapo.jp/


(近畿大学にて非常勤講師も務めたバリバリの技術屋が経営する会社)

Access(アクセス)Excel(エクセル)SQL server バーコード Webシステムを使った業務システムのシステム開発の無料相談を受付中

株式会社 アイライト 担当:内藤 響(Naito Ko)
〒550-0005 大阪市西区西本町1丁目5番9号 日清ビル 5F
(四つ橋線 本町駅 24番出口すぐ)
まずは、メール・電話でご相談ください。
TEL : (06) 6599-8890 E-mail : info@ai-light.com
お電話が混んでいる場合が多いので、つながりにくい場合は
TEL : (06) 6535-5117までお願いします。