fork download
  1. Option Explicit
  2.  
  3. Public Sub 段落番号付加()
  4. Dim ws As Worksheet '段落番号付加対象ワークシート
  5. Dim wrow As Long '作業用行番号
  6. Dim maxrow As Long '段落番号付加対象となる最大行番号
  7. Dim LVNO(1 To 5) As Long 'レベル毎の段落番号テーブル(レベル1:C列~レベル5:G列)
  8. Dim lv As Long 'レベル番号(作業用)
  9. Dim lvstr As String '段落番号
  10. Set ws = ActiveSheet 'アクティブシートを段落番号付加対象とする
  11. maxrow = 0
  12. 'C列を12行~終端まで繰り返す
  13. For wrow = 12 To Rows.Count
  14. '当該行のセルが、結合セルでないなら繰り返し終了
  15. If ws.Cells(wrow, "C").MergeCells = False Then Exit For
  16. '当該行番号を記憶する
  17. maxrow = wrow
  18. Next
  19. '結合セルがない場合は、終了する
  20. If maxrow = 0 Then
  21. MsgBox ("段落不正")
  22. Exit Sub
  23. End If
  24. '段落番号テーブル初期化
  25. Call init_lvno(1, LVNO)
  26. '12行~結合セル最大行まで繰り返す
  27. For wrow = 12 To maxrow
  28. 'レベル1~レベル最大まで繰り返す
  29. For lv = 1 To UBound(LVNO)
  30. '該当セルに文字が記入されている場合
  31. If ws.Cells(wrow, 2 + lv) <> "" Then
  32. '該当セルに対応する段落番号を取得する
  33. lvstr = set_lvno(lv, LVNO)
  34. '取得した段落番号をB列に設定する
  35. ws.Cells(wrow, "B").Value = lvstr
  36. Exit For
  37. End If
  38. Next
  39. Next
  40. End Sub
  41. '段落番号取得
  42. 'lv:レベル番号
  43. 'LVNO():段落番号テーブル
  44. Private Function set_lvno(ByVal lv As Long, ByRef LVNO() As Long) As String
  45. Dim wstr As String: wstr = ""
  46. Dim i As Long
  47. '指定レベルの番号に1加算する
  48. LVNO(lv) = LVNO(lv) + 1
  49. '指定レベルの次のレベル以降を0クリアする
  50. Call init_lvno(lv + 1, LVNO)
  51. '段落番号を文字にする
  52. For i = 1 To UBound(LVNO)
  53. '番号が0の場合、終了する
  54. If LVNO(i) = 0 Then Exit For
  55. '最初以外は.をつける
  56. If wstr <> "" Then wstr = wstr & "."
  57. '番号を連結する
  58. wstr = wstr & LVNO(i)
  59. Next
  60. set_lvno = wstr
  61. End Function
  62. '段落番号テーブル初期化
  63. 'lv:初期化を行うレベル番号
  64. 'LVNO():段落番号テーブル
  65. Private Sub init_lvno(ByVal lv As Long, ByRef LVNO() As Long)
  66. Dim i As Long
  67. '指定レベル番号以降を0でクリアする
  68. For i = lv To UBound(LVNO)
  69. LVNO(i) = 0
  70. Next
  71. End Sub
  72.  
Not running #stdin #stdout 0s 0KB
stdin
Standard input is empty
stdout
Standard output is empty