金融ITニュース。時々雑ネタ。

Fintechからレガシーまで、金融IT業界のニュース

イナズマ線を簡単に引くExcelマクロを作りました

工程表やガントチャートにイナズマ線を引く際には、Excelのフリーフォームを使って引くことが多いですが、縦位置がずれたり、きれいに引けないので、簡単なマクロを作ってみました。

こういうの(↓)が簡単にきれいに作れます。

f:id:memoyashi:20150812024050p:plain


マクロのソースも載せておきますので、必要に応じてコピペしてお使いください

Sub イナズマ線描画()
    'FreeformBuilderオブジェクトを宣言
    Dim InazumaLine As FreeformBuilder
    
    '始点を設定
    Set InazumaLine = ActiveSheet.Shapes.BuildFreeform(msoEditingAuto, _
        Selection(1).Left, Selection(1).Top)
    
    '以降の点を結んでいく
    '繰り返し用変数i
    Dim i As Integer
    '列の位置固定用変数
    Dim leftCol As Integer: leftCol = Selection(1).Column
    
    '上から下にセルをなめていく。0以外の数値ならイナズマ線を引く
    For i = Selection(1).Row To Selection(Selection.Count).Row
        '数値以外はスキップ
        If Not IsNumeric(Cells(i, leftCol)) Then
        
        '0もスキップ
        ElseIf Val(Cells(i, leftCol)) = 0 Then
        
        'イナズマ線を引く(正の数なら>、負の数なら<)
        Else
            InazumaLine.AddNodes msoSegmentLine, msoEditingAuto, _
                Cells(i, leftCol).Left, _
                Cells(i, leftCol).Top
            InazumaLine.AddNodes msoSegmentLine, msoEditingAuto, _
                Cells(i, leftCol + Val(Cells(i, leftCol))).Left, _
                (Cells(i, leftCol).Top + Cells(i + 1, leftCol).Top) / 2
            InazumaLine.AddNodes msoSegmentLine, msoEditingAuto, _
                Cells(i, leftCol).Left, _
                Cells(i + 1, leftCol).Top
        End If
    Next i
    '終点を設定
    InazumaLine.AddNodes msoSegmentLine, msoEditingAuto, _
                Cells(i, leftCol).Left, _
                Cells(i, leftCol).Top
                
    'イナズマ線を描画
    InazumaLine.ConvertToShape.Select
    
    '見た目の編集(青の太線)
    With Selection.ShapeRange.Line
        .ForeColor.RGB = RGB(0, 0, 255)
        .Weight = 2
    End With
    
End Sub

ひと目でわかる Project 2013 (ひと目でわかるシリーズ)

ひと目でわかる Project 2013 (ひと目でわかるシリーズ)

関連記事