会社で専らVBAを使っている。
恥ずかしい話かもしれないが、割とDX途上な印象もあったりで、力技で解決を図る場面もしばしば。
要件定義がさだまらずに見切り発車とかマクロ人材でちやほやとか当てはまりすぎてて怖いねぇhttps://t.co/trTfhTq2xO
— AOKI Takashige (@aochan_0119) 2022年1月20日
せっかくなので会社としてクリティカルな部分は避けつつ、どんなものを作って運用しているか紹介する。
まあ早い話、いわゆるこのブルシットジョブも強力なツールを導入してしまえば、ダッシュボードで済む話なのだが、経営陣は契約料より私らの人件費が安いという判断なのか、しょぼい契約でお茶を濁されているらしい。
なのでエクセルマスターにならざるを得ない。
正味、パートナーの各社にも迷惑だと思うのだが笑
そんな環境もあり、エクセルの延長でVBAが環境上使い勝手がいいという実情がある。
ちなみにタイトルにも示した通り、VBA自体はひどく久しぶりで高専の3年か4年に課題で少し触って以来だ。
それ以降は、R、Matlab、Python、Javaでそちらのほうが基本的に優秀だったので。。
もちろん具体的な数理計算やグラフ出力は、諸々を明示に指定しやすいPythonなどのプログラミング言語が安パイである。
しかし部署として展開しにくく汎用性が低く、属人性が高まりすぎてしまったりで微妙な立ち位置だ。
とはいえ、文系の会社なので、所詮ゴミみたいなVBAであったも、かなりちやほやされてしまうのだが。
そんなゴミコードが下記だ。
ダッシュボードに代替できると書いたように、DBのサイトからファイルを落として、シート貼り付けやDoDを計算して指定フォルダに保存するだけだ。
もともとはこれを人力でやっていたのだから、正直呆れてしまう。
Option Explicit Sub togather() Call copypaste Call scrp End Sub Sub copypaste() Application.ScreenUpdating = False Application.DisplayAlerts = False Dim wb As Workbook Set wb = ThisWorkbook Dim i As Long Dim today As String today = Format(Date, "mmdd") 'DoD wb.Sheets("サマリ").Columns("B:R").Copy wb.Sheets("サマリ").Range("Z1").PasteSpecial xlPasteValues 'Clear SF Area Data wb.Sheets("案件").Range("a6:ac6").AutoFilter wb.Sheets("案件").Range("a7:ac100000").ClearContents End Sub Sub scrp() Application.ScreenUpdating = False Application.DisplayAlerts = False Dim Driver As New Selenium.WebDriver Dim FileTime, MaxTime As Date Dim FileName, MaxFileName As String Dim URL, pass, user, today As String today = Format(Date, "mmdd") URL = ThisWorkbook.Worksheets("更新方法").Range("C10") user = ThisWorkbook.Worksheets("更新方法").Range("C11") pass = ThisWorkbook.Worksheets("更新方法").Range("C12") If pass = "" Then MsgBox "Password:C12 is Empty" Exit Sub End If Driver.Start "Chrome" Driver.Get "https://*****.com" 'Driver.Close 'Set Driver = Nothing Driver.Get (URL) With Driver .FindElementByName("***").Click .FindElementById("***").AsSelect.SelectByIndex 3 .FindElementById("***").AsSelect.SelectByIndex 0 .FindElementByName("***").Click End With FileName = Dir("C:\Users\" & user & "\Downloads\" & "*.csv") 'Get Data as Latest CSV File Do While FileName <> "" FileTime = FileDateTime("C:\Users\" & user & "\Downloads\" & FileName) If FileTime > MaxTime Then MaxTime = FileTime MaxFileName = FileName End If FileName = Dir() Loop Workbooks.Open "C:\Users\" & user & "\Downloads\" & MaxFileName 'SF paste to Certain Area ActiveWorkbook.Worksheets(1).UsedRange.Copy ThisWorkbook.Worksheets("案件").Range("A7").PasteSpecial xlPasteValues ActiveWorkbook.Close SaveChanges:=False 'ReCalculate Application.CalculateFull 'Save ThisWorkbook.SaveAs "C:\Users\" & user & "\***.xlsm" MsgBox "Fin." End Sub
正直スクレイピングの部分は、ドライバ更新含む環境構築が厄介めなので、必要性が微妙である。
しかし規定の動作は、積極的にマクロ化すべきなのは言うまでもない。
個人的にはこんなことは、ダッシュボードで管理職が好きなときに好きなように見てほしい。
IT後進の新卒ソルジャーの辛いところだ。
とはいえ、労働環境や金払いはかなりいいので、転職即決ともならない微妙さ。
反して個人的には蓄積されたビジネスデータを、ヒートマップに可視化したり多変量解析やビジネス上のボトルネックを回帰分析や決定木分析して、課題解決に当たりたい。
しかしリソース的にそこまで回らない残念な実情がある。
恐らくこういうところがどうにかならないと、会社としてひいては国としても時代に取り残されていってしまう懸念がある。
正直こんなマクロをやっているのでは周回遅れで、そもそもデイリー作業ならRPAは最低条件だと思っていたのだが。
下記のようなテクノロジーにおいては、上記すらいわばコモディティ化してくる。
DeepMindのAI「AlphaCode」は競技プログラミングレベルのコードを書ける | TechCrunch Japan
ちなみに文句垂れ流しの論調だが、オミクロンの拡大の危機感もあって、ようやく私の部署も在宅の波が来た。
部署やPJTのプライオリティの高さがあろうと、それとこれはちょっと別なんじゃないかとかとも思ったりしていたが。
在宅の生産性ヤバし
— AOKI Takashige (@aochan_0119) 2022年1月28日
確かに現場の連携はしにくいけどメリットのほうが上
ただ在宅だと下記動画的なところが、多少はあるのは否めない。
とはいえ、会社で真面目にしすぎなだけで、人間である以上、ある程度余裕を持って働くべきだと思う。
下手に配属後に出社をしばらく強制されただけで、日本社会の伝統に洗脳されかかっていたのかもしれない。
彼の動画はここのところ、自分に重なるように思うところもあって、過去動画含めハマリ気味だ。
さすが世界企業で、うちも国内では良好な方とされるが、上には上だ。
最後に私の部署は、曲りなりにもデータサイエンスとついているが、上記動画も参考になる。
要は結局は特別で現場を仕切るスペシャリストというよりも、その役職としては所詮部課長陣への数理的補助に留まるといったところだ。
言われてみれば当然だが、昨今のブーム、風潮を正しく抑止する含蓄が、世界レベルとして含まれているようで感心する。
ただ現状では受注に徹してしまっているので、上記のように各種統計分析をサッと差し出して、改善策を提案することを裏の使命と認識している。