ちょっとしたところで
「これはプログラム書いて処理した方が早い???」
と感じるが本当に早いかどうか、作った方が良いか、と思ったことはないでしょうか。
そんなときの考え方をご紹介したいと思います。
1.プログラムの必要性
結構考えるのがプログラムを作る必要があるのか、というところです。
手作業でやった方が早いのではないか、とも思うからです。
この時に考えるのが以下の3つです。
・何回も行う作業なのか
・作業自体に連続性があるものか
・手作業で行った場合に品質が確保されるかといったことを考えます。
2回、3回しか行わない作業や作業に連続性が無い作業はプログラムを書く時間の方がかかる場合が多いです。
また、品質を確保したい場合、プログラムで行うと間違っていた場合には見て間違えがわかる場合が多くなります。
そのため、品質が確保されやすいです。
2.プログラムの作成方法
では、どのようなことを考えてプログラムを作成すればよいでしょうか。
まず、「何のためにプログラムを作成するか」と考えます。
何のためでしょう?
・プログラムで作業を短縮させたい
・プログラムを使用して品質を確保したい
といったことですよね。
では、プログラム記述するためにはどうすればよいでしょうか。
重要なことは「単純処理にする」ということです。
では、どのように行うかを例を見ながら考えてみましょう。
3.プログラム作成例
先日、Excelの作業で手作業ですと時間がかかり、品質も確保されないのでVBAマクロを作成して作業を単純にして品質を確保しました。
どのような作業かというと、下記の表があります。
この表のなかで「address(bin)」「data(bin)」という項目の値を縦に下記のように並べ替えたい。
ただし、「read」項目が「1」のときは「rd」、それ以外は「wd」という内容です。
手作業でもできないことはないですが、結構間違えそうです。
これだけだったら良いのですが、これ以上のデータがあったり、値が変更されたりした場合、手作業ですと大変です。
そのようなときにはプログラムを書いてみましょう。
実際のプログラムは下記のように記述しました。
address(bin)の左から8番目の文字から1文字目:Mid(Cells(3,5), 8, 1)を記載する。
・bitcntを0~7にループさせて
a[0]~[7]:Cells(3 + bitcnt,10)、
address(bin)の左から8~1番目の文字から1文字目:Mid(Cells(3,5), 8 – bitcnt, 1)
とすることでa[0]~[7]への記載を実現する。
・wd[0]~[7]:Cells(11 + bitcnt,10)に対しても
data(bin)の左から8~1番目の文字から1文字目:Mid(Cells(3,6), 8 – bitcnt, 1)
とすることでa[0]~[7]への記載を実現する。・rd[0]~[7]:Cells(19 + bitcnt,10)に対しては
readが1の場合:if Cells(3, 7) = Then
rd[0]~[7]:Cells(19 + bitcnt,10)に対して
data(bin)の左から8~1番目の文字から1文字目:Mid(Cells(3,6), 8 – bitcnt, 1)
を記載することを実現する。・最後にregcntを0~3ループさせて
4項目を記載するように拡張する。
プログラムで記述すると並べ替えた結果が大きな間違いになるか、
無事並べ替え成功のどちらかになるため、品質が保たれやすくなります。
例えばプログラムを下記のように間違えた場合、
結果は下記のようにreadが1の行がwdに記載されてしまい、
readが1ではない箇所がrdに記載されてしまいます。
このように大きく間違えるため、間違えに気づきやすく
気づいたことにより修正することで品質が確保されやすいのです。
4.まとめ
このように単純作業でも手作業で行うのとプログラムを書いて行うのとでは後々、効率や品質に関わってきます。
手作業で終わらせたいと思うところも少しプログラムを書いて作業してみると効率的な作業ができるのではないでしょうか。
コメント