Excelの様式4-2(急傾斜)、4-7・4-8(土石流)で断面図が罫線を隠す問題をVBAで一括修正

砂防フロンティア管理型調書の様式4-2・4-7・4-8で断面図が罫線を隠す問題をVBAで一括修正

砂防フロンティア管理型調書の様式4-2・4-7・4-8で
断面図が罫線を隠す問題をVBAで一括修正

砂防フロンティアの「土砂災害警戒区域支援システム」から、区域調書を 管理型調書作成ツールに出力し、Excel で様式を出力すると、 次のような現象がよく起きます。

  • 急傾斜の様式4-2の断面図が、行列の罫線を隠してしまう
  • 土石流の様式4-7 / 4-8の断面図も、同様に罫線を隠してしまう
補足:
急傾斜は、QGIS出力に対応したものです。

毎シート・毎図形を手作業で調整するのはかなりの手間なので、 ここでは VBA マクロで一括修正する方法をまとめておきます。


1. 急傾斜:様式4-2の余分な図形削除&断面図の縮小+微調整

まずは急傾斜の様式4-2から。Excel 版/QGIS 版どちらから出力した管理型調書でも、 基本的な構造は同じなので、以下のマクロで共通に処理できます。

1-1. 何をやっているマクロか

  • 開いているすべてのブックを対象にする
  • シート名に「様式4-2」を含むシート(例:様式4-2, 様式4-2(2)…)をすべて処理
  • 図形のうち、Picture 5 / 7 / 14 / 16(図5 / 図7 / 図14 / 図16) を削除
  • 断面本体と思われるPicture 3 / Picture 12(図3 / 図12)
    • 96%に縮小
    • そのあと1.5pt(0.75pt × 2回)だけ下に移動

これにより、断面図が罫線を完全に覆ってしまう状態を解消し、罫線が見えるように整えます。

1-2. VBAコード(様式4-2 用)

<pre><code>Sub 急傾斜様式42の図形削除と断面移動書式を整える()

    Dim wb As Workbook
    Dim ws As Worksheet
    Dim shp As Shape
    Dim nm As Variant

    Const SCALE_42 As Double = 0.96   '縮小率 96%
    Const MOVE_STEP As Single = 0.75  '自動記録と同じ移動量(これを2回)

    '★ 開いているすべてのブックを対象
    For Each wb In Application.Workbooks
        
        'マクロを入れているブックはスキップ
        If Not wb Is ThisWorkbook Then
        
            For Each ws In wb.Worksheets

                'シート名に「様式4-2」を含むもの全部(様式4-2, 様式4-2(2)…)
                If InStr(ws.Name, "様式4-2") > 0 Then

                    '―― ① 余分な枠などを削除(5 / 7 / 14 / 16 系) ――
                    For Each nm In Array( _
                            "Picture 5", "Picture5", "図 5", "図5", _
                            "Picture 7", "Picture7", "図 7", "図7", _
                            "Picture 14", "Picture14", "図 14", "図14", _
                            "Picture 16", "Picture16", "図 16", "図16")
                        On Error Resume Next
                        ws.Shapes(nm).Delete
                        On Error GoTo 0
                    Next nm

                    '―― ② グラフ本体を 96%縮小+1.5pt 下へ ――
                    '    図3/図12 どちらでも対象
                    For Each nm In Array( _
                            "Picture 3", "Picture3", "図 3", "図3", _
                            "Picture 12", "Picture12", "図 12", "図12")

                        On Error Resume Next
                        Set shp = ws.Shapes(nm)
                        If Err.Number = 0 Then
                            With shp
                                .LockAspectRatio = msoTrue
                                .ScaleWidth SCALE_42, msoTrue, msoScaleFromTopLeft
                                .ScaleHeight SCALE_42, msoTrue, msoScaleFromTopLeft
                                .IncrementTop MOVE_STEP   '0.75 下へ
                                .IncrementTop MOVE_STEP   'もう一回 0.75 下へ(合計1.5)
                            End With
                        End If
                        Err.Clear
                        On Error GoTo 0

                    Next nm

                End If
            Next ws
        
        End If
    Next wb

    MsgBox "すべてのブックの様式4-2 系シートのグラフを 96%縮小+少し下げました。"

End Sub</code></pre>
ポイント:
QGIS 版で出力した急傾斜の様式4-2でも、シート名・図形名のパターンが同じであれば、 そのままこのマクロで一括処理できます。もし図形名が異なる場合は、 配列内の "Picture 3" や "Picture 12" の部分を書き換えて対応してください。

2. 土石流:様式4-7・4-8 の断面図が罫線を隠すのを直す

2-1. 様式4-8(「4-8」を含むシート)

  • シート名に「4-8」を含むシートを対象
  • Picture 2 / Picture 4
    • 右に 2pt だけ移動
    • 98%に縮小(縦横比固定)

これで、断面図の右側の罫線が隠れず、かつレイアウトも大きく崩さずに調整できます。

2-2. 様式4-7(「4-7」を含むシート)

  • シート名に「4-7」を含むシートを対象
  • Picture 2 に対して、
    • 自動記録したトリミングパラメータをそのまま適用
    • 上下を少しカットし、罫線が見えるように調整

2-3. VBAコード(土石流様式4-7・4-8 用)

<pre><code>Sub 土石流_4_7_4_8_調整()

    Dim wb As Workbook
    Dim ws As Worksheet
    Dim shp As Shape
    Dim nm As Variant

    '◆今アクティブなブックを対象にする
    Set wb = ActiveWorkbook

    '◆4-8 用:移動量/縮小率(必要ならここを調整)
    Const MOVE_RIGHT As Single = 2     '右にずらす量[ポイント]
    Const SCALE_RATE As Double = 0.98  '縮小率 98%

    For Each ws In wb.Worksheets

        '========================
        ' ① 「4-8」を含むシート
        '========================
        If InStr(ws.Name, "4-8") > 0 Then

            'Picture 2 と Picture 4 を処理
            For Each nm In Array("Picture 2", "Picture 4")
                On Error Resume Next
                Set shp = ws.Shapes(nm)
                If Err.Number = 0 Then
                    With shp
                        '右に少し移動
                        .Left = .Left + MOVE_RIGHT
                        '縦横比を固定して 98% に縮小
                        .LockAspectRatio = msoTrue
                        .ScaleWidth SCALE_RATE, msoTrue, msoScaleFromTopLeft
                        .ScaleHeight SCALE_RATE, msoTrue, msoScaleFromTopLeft
                    End With
                End If
                Err.Clear
                On Error GoTo 0
            Next nm

        End If

        '========================
        ' ② 「4-7」を含むシート
        '    Picture 2 をトリミング
        '========================
        If InStr(ws.Name, "4-7") > 0 Then

            On Error Resume Next
            Set shp = ws.Shapes("Picture 2")
            If Err.Number = 0 Then
                With shp
                    '自動記録どおりの設定
                    .LockAspectRatio = msoFalse
                    .Top = .Top + 11.5                     'IncrementTop 11.5
                    .ScaleHeight 0.9749318801, msoFalse, msoScaleFromTopLeft

                    With .PictureFormat.Crop
                        .PictureWidth = 739
                        .PictureHeight = 458
                        .PictureOffsetX = 0
                        .PictureOffsetY = -5
                    End With
                End With
            End If
            Err.Clear
            On Error GoTo 0

        End If

    Next ws

    MsgBox "4-8シートの画像移動・縮小と、4-7シートの画像トリミングが完了しました。"

End Sub</code></pre>

3. マクロの使い方(共通手順)

  1. 調書の Excel ファイル(様式4-2, 4-7, 4-8 が入っているブック)を開く
    • 急傾斜(様式4-2)は、複数ブックをまとめて開いておくと一括処理できます。
  2. マクロ用の xlsm / PERSONAL.xlsb などを用意し、
    Alt + F11 で VBA エディタを開く
  3. 「標準モジュール」を挿入して、本記事の 2つのマクロを貼り付けて保存
  4. Excel に戻って Alt + F8 を押し、
    • 急傾斜 → 急傾斜様式42の図形削除と断面移動書式を整える
    • 土石流 → 土石流_4_7_4_8_調整
    をそれぞれ実行
注意:
縮小系のマクロは、同じブックに何度も実行するとそのたびに小さくなります
原本をコピーしておくか、「縮小は1回だけ」+「位置調整だけ別マクロで微調整」 という運用にしておくと安心です。

コメント

このブログの人気の投稿

石川県:土砂災害(特別)警戒区域+CS立体図

日本でよく使う EPSG コード 一覧

設計定数を求めるための代表N値について