(11) プログラミングとは(VBA編)
プログラミングというと、難しそうとか、自分には関係ないと思われるかも知れません。しかし、プログラミングは、AI等による変化に対応するのに役立つそうです。コンピュータが論理的に処理する仕組みを理解することで、主体的に課題解決や価値創造する論理的思考力を養えると言われています。
私は、SEをしていた時にプログラミングを学んでシステム開発もしました。現在でも、身近に役立つプログラムを作っていますが、プログラミングは論理的な思考に役立つと感じています。
今回は、プログラミングってどんなものかを、EXCELがあれば利用できるVBA(Visual Basic for Applications)を使ってお話しするとともに、汎用的なプログラムのサンプルもご紹介したいと思います。
※プログラム等、文字が細かい場合は、文字を拡大いただくか、パソコン等からご覧いただくと読み易くなります。

プログラミングとは
はじめに
〇プログラミングとは、プログラミング言語(VBA等)を使ってプログラムを作成することです。
〇プログラムとは、コンピュータに何をどのように実行するかを指示する命令を順番に書いたものです。命令のリストを「コード」と呼びます。ページの後半にプログラム(コード)の例も載せていますのでご覧ください。
プログラムの基本

Excel VBAを使う準備


汎用的なプログラムのサンプル
それでは、実際にVBAのプログラムを見てみましょう。今回は、私が色々な業務で使ってきたプログラムをシンプルにしたものをご紹介します。簡単に言うと、蓄積したデータ(QA、議事録、事例集等)から、キーワードが含まれているもの(行)を抽出して、表にまとめるプログラムです。
皆さんも、ここで示すようにEXCELのブックとVBAに入力すれば、ご自分の業務で使っていただけますので、是非、お試しください。
プログラムを利用する業務用の画面
それでは、EXCELで下のような、プログラムを利用する業務用の画面を作ってください。


プログラムの主な流れ
次に、プログラムコードを書いていくのですが、主には下図のような流れで処理するイメージです。

1.変数に初期値をセット
検索シート、データシートで行、列を示すカウンタの初期値、検索文字列を変数にセットします。
2.データシートに検索文字列が含まれるか確認
データシートに検索文字列が含まれているかどうか1行ずつ確認します。(DOループでデータがある間は繰り返し)
※条件分岐(IF分で、検索文字列の有無を判定)
3.(含まれている場合) 検索シートにコピー
データシートの3項目を、順番に検索シートの下の部分にコピーします。(DOループで列数分を繰り返し)
4.(含まれていない場合) データシートの次行へ移動
2へ戻ります。
データの例
次に、EXCELで下のようなデータシートを作ってください。
・シート名は「データ」にしてください。
・1行目には、自分の業務に合わせて項目の名前をつけてください。データは2行目から3列で入力してください。

プログラム(コード)の例
本ページのはじめの方の「Excel VBAを使う準備」の2つ目で、「コードを入力する画面」の出し方を説明していますので、そちらを参照して画面を出し、下のコードを標準モジュールにコピーして貼り付けてください。
※このコードは、パソコンの画面からご覧、ご利用ください。
Sub CommandButton1_Click()
'カウンタの初期設定
igyou = 2 'データ検索用(行)
iretu = 1 ' 〃 (列)
ogyou = 8 '検索結果出力用(行)
oretu = 1 ' 〃 (列)
'検索文字列を変数に代入
kenmoji1 = Worksheets("検索").Cells(3, 2) '1つ目の検索文字(3行2列目)を代入
kenmoji2 = Worksheets("検索").Cells(4, 2) '1つ目の検索文字(4行2列目)を代入
kenmoji3 = Worksheets("検索").Cells(5, 2) '1つ目の検索文字(5行2列目)を代入
'「データ」シート内を検索しながら、条件にあう行を「検索」シートの下部に書き出し
Do
'項目欄、内容欄を文字列1~文字列3で検索
kentaicell1 = Worksheets("データ").Cells(igyou, 2) '項目欄(2列目)
kentaicell2 = Worksheets("データ").Cells(igyou, 3) '内容欄(3列目)
intpoint11 = InStr(kentaicell1, kenmoji1) '項目欄に文字列1があるか InStr関数は、文字がある場合は開始位置、無い場合は0を返す。
intpoint12 = InStr(kentaicell1, kenmoji2) '項目欄に文字列2があるか 〃
intpoint13 = InStr(kentaicell1, kenmoji3) '項目欄に文字列3があるか 〃
intpoint21 = InStr(kentaicell2, kenmoji1) '内容欄に文字列1があるか 〃
intpoint22 = InStr(kentaicell2, kenmoji2) '内容欄に文字列2があるか 〃
intpoint23 = InStr(kentaicell2, kenmoji3) '内容欄に文字列3があるか 〃
'質問欄または回答欄に、指定された検索文字列が、全て存在している場合に検索結果を編集する。
If (intpoint11 > 0 Or intpoint21 > 0) And (intpoint12 > 0 Or intpoint22 > 0) And (intpoint13 > 0 Or intpoint23 > 0) Then
Do
'「検索」シートのセルに「データ」シートの値を入力する。
Sheets("検索").Cells(ogyou, oretu) = Sheets("データ").Cells(igyou, iretu)
iretu = iretu + 1 '検索対象の「データ」シートの列を1つ右へずらす。
oretu = oretu + 1 '出力先の「検索」シートの列を1つ右へずらす。
Loop Until oretu = 4 '3項目を書き出して、カウンタが4になるまで繰り返す。※※項目数が増えた場合、「4」の値を修正する。
ogyou = ogyou + 1 '出力先の「検索」シートの行を1行下の次の入力行へずらす。
oretu = 1 '出力先の「検索」シートの列を1列目に移動する。
End If
igyou = igyou + 1 '検索対象の「データ」シートの行を1行下(次の検索対象行)へずらす
iretu = 1 '検索対象の「データ」シートの列を1列目に移動する。
Loop Until Worksheets("データ").Cells(igyou, iretu) = "" '検索対象の「データ」シートの行のデータが空白になるまで繰り返す。
'検索して条件にある行が無かった場合
If ogyou = 8 Then '出力用カウンタが初期値のままの時
MsgBox ("対象がありません。")
Else
'条件に合う行があった場合は、行の高さを自動調整
Sheets("検索").Range("A8:C" & ogyou - 1).EntireRow.AutoFit '※※項目数が増えた場合、「C」列までの部分を修正する。
'出力した行に罫線を追加
Sheets("検索").Range("A8:C" & ogyou - 1).Borders.LineStyle = True '※※項目数が増えた場合、「C」列までの部分を修正する。
End If
End Sub
<コードのご利用にあたっての注意事項>
※作業の途中で、適宜、ファイルの保存を行ってください。
※上のプログラムには「’(クォーテーション)」の後に、コメントで説明を加えています。この部分は無くてもプログラムは動きますが、それぞれの命令で何をしているのかを、作成者以外の方がプログラムを見た時に、分かり易くしています。
※コードを標準モジュールに貼り付けたら、「検索」シートに戻り、ボタン(「検索実行」等)を右クリックして「マクロの登録」から、作成したプログラム(「CommandButton1_Click」等:コードの1行目での名前)を登録してください。
※キーワードは3つまで入力可能で、これらの検索文字列をデータの2列目(「項目」等)または3列目(「内容」等)に全て含むものを検索します。全角、半角等まで完全に一致しているものを検索するので注意してください。
※自分の業務でデータの列数を変えたい場合、検索・データシートの修正に加えて、コードのコメントで※※印の箇所を変更してもらえば結構です。
※本記事に掲載しているサンプルコードの動作、結果については保証はできませんので、ご自分でしっかりとテスト、検証してからご利用ください。
補足説明
最後に、プログラミングに関して、少し補足説明をさせていただきます。

まとめ
〇プログラミングをすると、コンピュータが論理的に処理する仕組みを理解できるようになるので、主体的に課題解決や価値創造する論理的思考力を養えると言われています。
〇プログラムとは、コンピュータに何をどのように実行するかを指示する命令を順番に書いたものです。プログラムは、命令を順番に処理しますが、条件で処理を分岐したり、処理を繰り返すこともできます。
〇私が、色々な業務で使ってきた汎用的なプログラムも紹介しました。それは、蓄積したデータ(QA、議事録、事例集等)から、幾つかのキーワードが含まれているセルを抽出して、表にまとめるというプログラムでした。
・具体的には、利用される業務に合わせて、「検索」シートでは検索・結果表示用にシートを編集し、「データ」シートではデータを保管してください。プログラム(コード)は「開発」メニューから「標準モジュール」に貼り付けてください。
・ここで示したようにEXCELシートとVBAを準備すれば、自分の業務で使ってもらえると思いますので、是非、お試しください。
