Excelの様式4-2(急傾斜)、4-7・4-8(土石流)で断面図が罫線を隠す問題をVBAで一括修正
砂防フロンティア管理型調書の様式4-2・4-7・4-8で
断面図が罫線を隠す問題をVBAで一括修正
砂防フロンティアの「土砂災害警戒区域支援システム」から、区域調書を 管理型調書作成ツールに出力し、Excel で様式を出力すると、 次のような現象がよく起きます。
- 急傾斜の様式4-2の断面図が、行列の罫線を隠してしまう
- 土石流の様式4-7 / 4-8の断面図も、同様に罫線を隠してしまう
補足:
急傾斜は、QGIS出力に対応したものです。
急傾斜は、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" の部分を書き換えて対応してください。
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. マクロの使い方(共通手順)
- 調書の Excel ファイル(様式4-2, 4-7, 4-8 が入っているブック)を開く
- 急傾斜(様式4-2)は、複数ブックをまとめて開いておくと一括処理できます。
- マクロ用の xlsm / PERSONAL.xlsb などを用意し、
Alt + F11で VBA エディタを開く - 「標準モジュール」を挿入して、本記事の 2つのマクロを貼り付けて保存
- Excel に戻って
Alt + F8を押し、- 急傾斜 →
急傾斜様式42の図形削除と断面移動書式を整える - 土石流 →
土石流_4_7_4_8_調整
- 急傾斜 →
注意:
縮小系のマクロは、同じブックに何度も実行するとそのたびに小さくなります。
原本をコピーしておくか、「縮小は1回だけ」+「位置調整だけ別マクロで微調整」 という運用にしておくと安心です。
縮小系のマクロは、同じブックに何度も実行するとそのたびに小さくなります。
原本をコピーしておくか、「縮小は1回だけ」+「位置調整だけ別マクロで微調整」 という運用にしておくと安心です。
コメント
コメントを投稿