AOKI's copy&paste archive

高専から駅弁大学から東工大を経て大企業へ 浅く広い趣味とかキャリアの日記を

懐かしのVBA

会社で専らVBAを使っている。
恥ずかしい話かもしれないが、割とDX途上な印象もあったりで、力技で解決を図る場面もしばしば。



せっかくなので会社としてクリティカルな部分は避けつつ、どんなものを作って運用しているか紹介する。
まあ早い話、いわゆるこのブルシットジョブも強力なツールを導入してしまえば、ダッシュボードで済む話なのだが、経営陣は契約料より私らの人件費が安いという判断なのか、しょぼい契約でお茶を濁されているらしい。
なのでエクセルマスターにならざるを得ない。

正味、パートナーの各社にも迷惑だと思うのだが笑

そんな環境もあり、エクセルの延長でVBAが環境上使い勝手がいいという実情がある。
ちなみにタイトルにも示した通り、VBA自体はひどく久しぶりで高専の3年か4年に課題で少し触って以来だ。
それ以降は、R、MatlabPythonJavaでそちらのほうが基本的に優秀だったので。。

もちろん具体的な数理計算やグラフ出力は、諸々を明示に指定しやすい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のプライオリティの高さがあろうと、それとこれはちょっと別なんじゃないかとかとも思ったりしていたが。



ただ在宅だと下記動画的なところが、多少はあるのは否めない。
とはいえ、会社で真面目にしすぎなだけで、人間である以上、ある程度余裕を持って働くべきだと思う。
下手に配属後に出社をしばらく強制されただけで、日本社会の伝統に洗脳されかかっていたのかもしれない。


www.youtube.com


彼の動画はここのところ、自分に重なるように思うところもあって、過去動画含めハマリ気味だ。
さすが世界企業で、うちも国内では良好な方とされるが、上には上だ。


www.youtube.com

www.youtube.com


最後に私の部署は、曲りなりにもデータサイエンスとついているが、上記動画も参考になる。
要は結局は特別で現場を仕切るスペシャリストというよりも、その役職としては所詮部課長陣への数理的補助に留まるといったところだ。
言われてみれば当然だが、昨今のブーム、風潮を正しく抑止する含蓄が、世界レベルとして含まれているようで感心する。

ただ現状では受注に徹してしまっているので、上記のように各種統計分析をサッと差し出して、改善策を提案することを裏の使命と認識している。