エクセル操作を自動化する(入力&グラフ作成を自動化)

Excel

 RPAという用語が広まってから、かなり経ちますが、RPAツールを使うよりもエクセルマクロやバッチ、VBSなどを好む方も多いのではないでしょうか。

 特に、様々な局面でエクセルを多用している業務の場合、エクセルマクロやVBSはとても有用です。ただ、「プログラムって難しいのでは?」と思う方もいるかと思います。しかし、エクセルマクロやVBSはプログラミング言語の中では簡単な部類に入ります。

 次の動画のように、エクセル入力からグラフ作成まで、いろいろな作業を自動化することができます。

 上記のような作業は、次のようなソースコードのVBSで実装されています。

Option Explicit

'<<<Include>>>
Dim objFso
Set objFso = CreateObject("Scripting.FileSystemObject")
Function Include(ByVal strFileName)
    Include = objFso.OpenTextFile(strFileName, 1, False).ReadAll()
End Function
Execute Include(".\Common.vbs")
Set objFso = Nothing

Randomize

Dim xl
Set xl = CreateObject("Excel.Application")

xl.WindowState = -4137
xl.Visible = True
xl.DisplayAlerts = False

Dim wb
Set wb = xl.Workbooks.Add()

CreateObject("WScript.Shell").AppActivate xl.Caption

Dim ws
Set ws = wb.Worksheets("Sheet1")

WScript.Sleep 5000

Call SendKeysEx(ws.Range("A1"), "班")
Call SendKeysEx(ws.Range("B1"), "氏名")
Call SendKeysEx(ws.Range("C1"), "国語")
Call SendKeysEx(ws.Range("D1"), "算数")
Call SendKeysEx(ws.Range("E1"), "理科")
Call SendKeysEx(ws.Range("F1"), "社会")

WScript.Sleep 5000

Call SendKeysEx(ws.Range("A2"), "1"): Call SendKeysEx(ws.Range("B2"), "鈴木")
Call SendKeysEx(ws.Range("A3"), "1"): Call SendKeysEx(ws.Range("B3"), "佐藤")
Call SendKeysEx(ws.Range("A4"), "2"): Call SendKeysEx(ws.Range("B4"), "田中")
Call SendKeysEx(ws.Range("A5"), "2"): Call SendKeysEx(ws.Range("B5"), "山田")

WScript.Sleep 5000

Dim iRow
For iRow = 2 To 5
    Call SendKeysEx(ws.Range("C" & CStr(iRow)), GetValue())
    Call SendKeysEx(ws.Range("D" & CStr(iRow)), GetValue())
    Call SendKeysEx(ws.Range("E" & CStr(iRow)), GetValue())
    Call SendKeysEx(ws.Range("F" & CStr(iRow)), GetValue())
    WScript.Sleep 1000
Next

WScript.Sleep 5000

Call SendKeysEx(ws.Range("G1"), "合計")

WScript.Sleep 5000

For iRow = 2 To 5
    Call SendKeysEx(ws.Range("G" & CStr(iRow)), "SUM(C" & CStr(iRow) & ":F" & CStr(iRow) & ")")
    ws.Range("G" & CStr(iRow)).Value = "=" & ws.Range("G" & CStr(iRow)).Value
Next

WScript.Sleep 5000

xl.ActiveWindow.DisplayGridLines = False

WScript.Sleep 1000

With ws.Range("A1:G5")
    .Borders(7).LineStyle = 1   '7=xlEdgeLeft           '1=xlContinuous
    .Borders(8).LineStyle = 1   '8=xlEdgeTop            '1=xlContinuous
    .Borders(9).LineStyle = 1   '9=xlEdgeBottom         '1=xlContinuous
    .Borders(10).LineStyle = 1  '10=xlEdgeRight         '1=xlContinuous

    WScript.Sleep 1000

    .Borders(11).LineStyle = 1  '11=xlInsideVertical    '1=xlContinuous
    .Borders(12).LineStyle = 1  '12=xlInsideHorizontal  '1=xlContinuous
End With

WScript.Sleep 1000

ws.Range("A1:G1").Interior.ColorIndex = 36

WScript.Sleep 1000

ws.Range("A2:A5").Interior.ColorIndex = 31

WScript.Sleep 1000

ws.Range("B2:B5").Interior.ColorIndex = 23

WScript.Sleep 1000

ws.Range("A2:A5").Font.ColorIndex = 2

WScript.Sleep 1000

ws.Range("B2:B5").Font.ColorIndex = 2

WScript.Sleep 5000

Dim gr
Set gr = ws.ChartObjects.Add(0, 110, 500, 300)
gr.Chart.ChartType = 52
gr.Chart.SetSourceData ws.Range("A1:F5")

Function GetValue()
    Dim intUpper, intLower
    intUpper = 100
    intLower = 1

    GetValue = Int((intUpper - intLower + 1) * Rnd + intLower)
End Function

 演出のために、キー入力と同時にキーボードを押下したようなサウンドを鳴らしています。このソースコードは、以下からダウンロードできます。

ダウンロード

コメント

タイトルとURLをコピーしました