Going my way

いいなと思ったことをメモしていきます。

単純作業に屈してはならない。エンジニアでいたいから。


Advertisements


初めて部署に配属されたときにオフィスの中を見ていて、素朴な疑問を抱いた。

「なんでこの人達はこんなに電話ばっかりしてるんだろう」
「なんでこの人達はこんなに会議ばっかりしてるんだろう」
「なんでこの人達は会議で何も発言せずにパソコンばっかり見てるんだろう」

配属されてから4ヶ月が経ち、新たな疑問を抱いた。

「なんでアルバイトがやるような単純作業をエンジニアがやるんだろう」
「自分がやってる『作業』に意味はあるんだろうか」

SIerに勤務している社員が電話ばかりしているのは、協力会社との調整があるからだ。
協力会社に指示を出し、進捗を管理しなければならない。
そして、その進捗をさらに上の上司に報告する。
SIerの社員の日中はほとんどが会議と報告、そのための資料作りに費やされる。

そして、必要と思えない会議まで定例化され、資料に書いてあることを読み上げるだけの会議が日にいくつも設定される。

これはSIerの仕組みであり、権力を持つ人間が仕組みを作る。
年功序列がまかり通る大企業で、若手がどうこう言ってもなかなか変わらない仕組みでもある。仕組みを変えるには力をつけなれけばならない。
でも、それには時間がかかる。ならば力がつくまでじいっと我慢せねばならない。

しかし、エンジニアなら。
単純作業を許容してはいけない。

「これがSIの仕事だから」

などといって、Excelの単純集計を延々とやって時間を無駄にしてはいけないのだ。
単純な繰り返しは『作業』だが、作業を自動化する仕組みを作るのは『仕事』である。
技術を身に付けて、仕事をしよう。

例えば。
僕は社会人1年目10月に、こんな指示が与えられた。

「1,000ファイルあるexcelを一つ一つ開いて、正しいフォーマットで記載されているかチェックしてくれ」

いま思い出すと、これはエンジニアの仕事だとは思えない。
大学生のアルバイトの仕事である。
ひたすら、一日中やっていた作業は

・Excelファイルを開いて、所定の位置に文字列がちゃんと記載されているか。
・Excelファイルを開いて、条件付き書式が設定されているか。

の確認だった。

繰り返しになるが、
こんな単純作業は、エンジニアがやる仕事ではない。
アルバイトがやる仕事ですらない。
コンピュータがやる作業である。

今こそ俺は、新人時代の情けない自分にリベンジしたい。

まず、かつての調査資料のサンプルを作成した。
f:id:go_my_own_way:20120616165214p:plain
これは、2行目から4行目まで条件付き書式が設定してある。
セルが空白だった場合、セルを赤くする条件だ。

条件付き書式は以下のように設定した。
f:id:go_my_own_way:20120616165423p:plain
「ホーム」の「条件付き書式」の「新しいルール」を選ぶ。

f:id:go_my_own_way:20120616165528p:plain
次に「数式を使用して、書式設定するセルを決定」で

=isblank(D2)

と入力する。

セルの右下の十字のところをビョーンとD4セルまで伸ばすと、
f:id:go_my_own_way:20120616165736p:plain
このようにセルごとに条件が設定される。

こうやって作った調査資料を4つ、フォルダにまとめた。
f:id:go_my_own_way:20120616165931p:plain


新人のときは本当に何もできなかった。
こんな単純作業に疑問を抱きながらも、泣きそうな顔をしながら、一つ一つのファイルを開いた。
罰ゲームでもこなすかのように。

でも今なら泣かない。VBAがあるから。

'定数はSubプロシージャの外で定義しておく
Const 調査結果シート As String = "調査結果"
Const 調査シート As String = "Sheet1"


Sub シートの条件チェック()
    Dim 結果 As String
    Dim 調査シート行 As Long
    Dim 対象シート行 As Long
    Dim ファイル名一覧 As Variant
    Dim 調査対象ブック As Workbook
    Dim 対象行 As Long
    
    'ファイル名を配列にして取得する
    ファイル名一覧 = Application.GetOpenFilename("調査対象シート,*.xlsx", MultiSelect:=True)
    
    'ファイルが選択されなかったらSubプロシージャ終了
    If VarType(ファイル名一覧) = vbBoolean Then Exit Sub
    
    'UBoundは配列の大きさを取得する関数。選ばれたファイルの数だけ順に開く
    For i = 1 To UBound(ファイル名一覧)
        
        '調査対象の開始行
        Set 調査対象ブック = Workbooks.Open(ファイル名一覧(i))
        With ThisWorkbook.Worksheets(調査結果シート)
            '調査対象ブック名を書き込む
            .Cells(i + 1, 1) = 調査対象ブック.Name
            
            結果 = "無"
            '対象の列に空白がないかチェックする
            For 対象行 = 2 To 4
                '空白がある場合「有」を設定
                If 調査対象ブック.Worksheets(調査シート).Range("D" & 対象行).Value = "" Then
                    結果 = "有"
                End If
            Next
            .Cells(i + 1, 3) = 結果
            
            '調査対象列のセルに条件付き書式が設定されいているか調べる
            結果 = "○"
            For 対象行 = 2 To 4
                '条件付き書式が設定されていない場合に出るエラーを無視する
                On Error Resume Next
                
                '条件付き書式が設定されていない場合「×」をつける
                If 調査対象ブック.Worksheets(調査シート).Range("D" & 対象行).FormatConditions(1).Formula1 = "" Then
                    結果 = "×"
                End If
            Next
            .Cells(i + 1, 2) = 結果

        End With
        '調査対象のブックを保存しないで閉じる
        調査対象ブック.Close SaveChanges:=False
    
    Next
    
End Sub

上のVBAを実行すると、
f:id:go_my_own_way:20120616170518p:plain
このような結果が出力される。

これは想定通りで、
4つあった資料はそれぞれ以下のようになっていた。
調査資料1:
・条件付き書式は全てに設定
・空白なし
f:id:go_my_own_way:20120616170613p:plain

調査資料2:
・条件付き書式は全てに設定
・空白あり
f:id:go_my_own_way:20120616170704p:plain

調査資料3:
・条件付き書式一部無し
・空白あり
f:id:go_my_own_way:20120616170736p:plain

調査資料4:
・条件付き書式一部無し
・空白なし
f:id:go_my_own_way:20120616170918p:plain


で、再度掲載。結果はこの通り。
f:id:go_my_own_way:20120616170935p:plain

業務でやる場合、何行目におかしな部分があるかも出力するべきだけど、
書いているうちに気が済んできた(笑)

だが、課せられた単純作業はこれだけではない。
ときどき思い出すたびにかつての自分に復讐したいと思う。

そう。
恨むべくは単純作業を課したボスではなく、単純作業をコンピュータにやらせる技術がなかった自分なのだ。

無駄に気付くたびに単純作業は自動化し、チームに貢献したいと思っている。

そして、VBAを勉強するのにものっすごく役に立ったのが
「やさしくわかる Excel VBA
だ。この一冊があれば、たいていの単純作業は自動化できると思うし、わからないところをGoogleで検索するときも、ものすごく効率が良くなると思う。