5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

なんか布教したいエンジニアAdvent Calendar 2019

Day 12

IT未経験者がVBAに手を出した話

Last updated at Posted at 2019-12-11

はじめまして、わだいこと申します。
文章を書くのが苦手なのでまとまりがなく読みにくいかもしれませんがご了承ください。

私の状況

スーパーでお肉を切る仕事から一転IT業界に入り現在は某センターで働いています。
そもそもパソコンなんて学生時代にネットサーフィンしていたのとレポートやらでエクセルやワードを使う程度で初歩的なものしかできません。

IT業界といっても業務はほとんど対人対応で実質サービス業と言ってもおかしくはありません。しかも夜勤もあるのですが夜勤は対人対応すらないので待機するだけに・・・
そんな中配属から四か月、先輩からVBAに興味ありませんかと言われ、最初はやんわりと断っていたがしばらく勤務が一緒になるとVBAをゴリ押されていたのに加え職場の個人用フォルダにVBAの教材が置かれていたので諦めて勉強を始めることに。

VBA開始

最初はセルやブック、シートの指定方法から
Range(“A1”)、Cells(1,1)、Workbooks(“ファイル名”).Worksheets(“シート名”)
Offsetの使い方などからスタート
最初の方はセル指定してるのに何でうまくいかねえんだよ!ってなりましたがシート指定してなくて別ブックがアクティブになっていたという小ミスでした。

その後は変数の置き方やIfやCase、比較演算子、ユーザーフォームの使い方等基礎的なものを学んだところで課題を出されました。
問題は全部で3個

  1. 作られている表をもとに行、列ごとの合計の算出、項目ごとの割合を算出し20%以下の場合セルの色を変更

  2. ユーザーフォームを用いて電卓の作成

  3. ユーザーフォームを作成し情報の取り込みと変更の反映

このうち2つやればいいと言われた自分はその日から課題に取り組む。
GWだったので業務もほとんどなく課題をやっていて躓いたのは合計の算出
SUMみたいに書けばええやろとドヤ顔して次の勤務で見せたところなんでこんな方法を・・・と言われる。
そして教えられたのは

For n = 1 to 4
Cells(5,1) = Cells(5,1) + Cells(n,1)
Next n
という方法、説明を受けてようやく理解する。
Cells(5,1)が初期値0だとしてCells(1,1)を足してそこにCells(2,1)・・・と続いていくわけですね。
完全に理解したわ

一応二回の勤務で完成はさせて次の課題は電卓を選択し四則演算は難しいことないやろ~~とへらへらしていたら足し算だけ文字列判定されてしまい、1+1が11になってしまうくらいでしたね。いや本当ですよ。

だいたい課題終わらせるまで2週間くらいでしたかね、すると言われるわけですよ。
「今使ってるツールの改修をお願いします」
毎日使うツールで気に食わない、仕様上どうしても不具合が起こってしまうため気に食わないということでやることになりました。
最初の一か月はひたすらコードを読み解く。
作成者があまりコメントを残してくれなかったせいで調べながら夜勤の時に少しずつ進めていきました。
Left Right Mid Instrだなんだと知らねえよ!!なんだよこれって怒りながらやりました。
大まかには理解したのでいざ新規で作成し始めると意外と順調。

ツールを使う際の動きとしては
デスクトップに用意した情報を取り込み、手入力で番号を割り振る
割り振った番号で印刷用のSheet2に情報を書き写し印刷する。

これもうすぐ完成するなーなんて考えていたら甘かったです、機能として他のエクセルファイルから情報の取り込み、作成しているマクロのファイルの別シートに情報の反映、印刷、大きく分けてこの3個を作っていたのですが別シートへの反映のマクロ作成時に問題が起きました。

別ファイルの情報を取り込んだのがSheet1
Sheet1の情報を反映するのがSheet2ですがSheet1とSheet2で割り振った数字は同じなのにどうして反映されないのか
For n = 1 to 55
For l = 1 to 4
Set rFno = Worksheets(“Sheet1”).Range(“A:A”).Find(n)
If Not rFno Is Nothing Then
Worksheets(“Sheet2”).Range(“A:A”).Find(n).Offset(0,l).value = rFno.offset(0,l).value
End If
Next l
Next n
なんて見づらそうだなーって書いていた部分がうまくいっていない、なぜなのか何回もやり直したけれど家のパソコンではうまくいく。諦めかけたところで気が付きました。
書式設定が違うじゃないか。そのせいでFindに引っかからなかった。なので調べてマクロを動かしたら最初に書式を変更するようにしました。誰かがいじってしまってもいいように。

それからは順調で、調べながら印刷設定や条件付きでセルの一部を引用するようにしてようやく完成。大体二か月くらいでしょうか、夜勤の際にコツコツ進めて完成させましたが上司のチェックもありリリースされたのは一か月後でした。まあ社内用なのでそんなに細かく見られはしませんが上司のタスクが多く遅くなりました。

これで夜勤も落ち着けるなんて思っていたら現場のPCをWindows10にアップデートをする。その際にツールが動かなくなるかもしれないのでチェックと必要があれば改修してくれと指令が下りる。先輩曰くInsert(挿入)を使っていると不具合が起こる、ということなのでInsert部分を全部置き換えていた。
そして追加機能を付けてくれと言われる。Insertだけだから楽だと思っていたのに結局また読み解くことになりとりあえずマクロを読み解きノートにまとめたところ言われた機能を追加する部分が決定する。ここまで2週間、残りは一か月、間に合うか?と思いながらトライアンドエラーを繰り返し完成。

ツールの動作で必要なファイルの引用するディレクトリの変更、保存するファイルの保存先の変更、追加で条件を設定して結果として表示される要素の追加。

なんとか期日には間に合い業務の簡略化もでき評価されました(派遣先なので派遣元にはその評価はきっといっていない)
あとWin10で動かない理由はInsertじゃなくて参照設定の参照ツールに互換性のない物があっただけでした。

##最後に

今では自分用にマクロを組んでいたりしますが次はSQLに手を出してみようと思います。
会社から指定されているCCNAとかLPICもやらないといけないですが、何から手を付けていけばいいか全くわからないIT業界入ってようやく一年の初心者のお話でした。

なにかおすすめなどあれば教えてくださいお願いしますなんでも

5
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?