• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:条件によってセルの結合を実行)

条件によってセルの結合を実行する方法

このQ&Aのポイント
  • セル結合を行う際に条件を設けることで、特定の階層のみの結合や、階層ごとに条件を設けて結合することが可能です。
  • 同じビジネステーマであっても、一つ上の階層の名称が異なる場合は別々に結合されるように条件を設定することが重要です。
  • セル結合を実行する際には注意が必要であり、正しい条件を設けることで最適な結果が得られます。

質問者が選んだベストアンサー

  • ベストアンサー
  • watabe007
  • ベストアンサー率62% (476/760)
回答No.11

Sub FinalAnswer()   Dim c As Long, r As Long   Dim LevelName As String, pLevelName As String   Dim 始 As Long, 終 As Long   Application.ScreenUpdating = False   For c = 1 To 6 '1列から最終列の6列までループ     始 = 2     LevelName = Cells(2, c).MergeArea.Item(1).Value     If c = 1 Then       For r = 2 To 23 '2行~最終行の23行までループ         If Cells(r, c).MergeArea.Item(1).Value <> LevelName Then           終 = r - 1           LevelName = Cells(r, c).MergeArea.Item(1).Value           Application.DisplayAlerts = False           Range(Cells(始, c), Cells(終, c)).Merge           Application.DisplayAlerts = True           始 = r         ElseIf r = 23 Then '※23は最終行の数字           終 = r           Application.DisplayAlerts = False           Range(Cells(始, c), Cells(終, c)).Merge           Application.DisplayAlerts = True         End If       Next     Else       pLevelName = Cells(2, c - 1).MergeArea.Item(1).Value       For r = 2 To 23         If Cells(r, c).MergeArea.Item(1).Value <> LevelName Or _           Cells(r, c - 1).MergeArea.Item(1).Value <> pLevelName Then           終 = r - 1           Application.DisplayAlerts = False           Range(Cells(始, c), Cells(終, c)).Merge           Application.DisplayAlerts = True           pLevelName = Cells(r, c - 1).MergeArea.Item(1).Value           LevelName = Cells(r, c).MergeArea.Item(1).Value           始 = r         ElseIf r = 23 Then '※23は最終行の数字           終 = r           Application.DisplayAlerts = False           Range(Cells(始, c), Cells(終, c)).Merge           Application.DisplayAlerts = True         End If       Next     End If   Next   Application.ScreenUpdating = True End Sub

すると、全ての回答が全文表示されます。

その他の回答 (12)

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.2

一部修正 Sub Test2() Dim c As Long, r As Long Dim LevelName As String, pLevelName As String Dim 始 As Long, 終 As Long Application.ScreenUpdating = False For c = 1 To 6 '1列から最終列の6列までループ 始 = 2 LevelName = Cells(2, c).MergeArea.Item(1).Value If c = 1 Then For r = 2 To 23 '2行~最終行の23行までループ If Cells(r, c).MergeArea.Item(1).Value <> LevelName Then 終 = r - 1 LevelName = Cells(r, c).MergeArea.Item(1).Value Application.DisplayAlerts = False Range(Cells(始, c), Cells(終, c)).Merge Application.DisplayAlerts = True 始 = r End If Next Else 始 = 2 pLevelName = Cells(2, c - 1).MergeArea.Item(1).Value For r = 2 To 23 If Cells(r, c).MergeArea.Item(1).Value = LevelName And _ Cells(r, c - 1).MergeArea.Item(1).Value = pLevelName Then Application.DisplayAlerts = False Range(Cells(始, c), Cells(r, c)).Merge Application.DisplayAlerts = True pLevelName = Cells(r, c - 1).MergeArea.Item(1).Value LevelName = Cells(r, c).MergeArea.Item(1).Value Else 始 = r pLevelName = Cells(r, c - 1).MergeArea.Item(1).Value LevelName = Cells(r, c).MergeArea.Item(1).Value End If Next End If Next Application.ScreenUpdating = True End Sub

すると、全ての回答が全文表示されます。
  • watabe007
  • ベストアンサー率62% (476/760)
回答No.1

どうでしょか? Sub Test()   Dim c As Long, r As Long   Dim LevelName As String, pLevelName As String   Dim 始 As Long, 終 As Long   For c = 1 To 6 '1列から最終列の6列までループ     始 = 2     LevelName = Cells(2, c).Value     If c = 1 Then       For r = 2 To 23 '2行~最終行の23行までループ         If Cells(r, c).MergeArea.Item(1).Value <> LevelName Then           終 = r - 1           LevelName = Cells(r, c).MergeArea.Item(1).Value           Application.DisplayAlerts = False           Range(Cells(始, c), Cells(終, c)).Merge           Application.DisplayAlerts = True           始 = r         End If       Next     Else       pLevelName = Cells(2, c - 1).MergeArea.Item(1).Value       For r = 2 To 23         If Cells(r, c).MergeArea.Item(1).Value <> LevelName And _           Cells(r, c - 1).MergeArea.Item(1).Value = pLevelName Then           終 = r - 1           LevelName = Cells(r, c).MergeArea.Item(1).Value           pLevelName = Cells(r, c - 1).MergeArea.Item(1).Value           Application.DisplayAlerts = False           Range(Cells(始, c), Cells(終, c)).Merge           Application.DisplayAlerts = True           始 = r         End If       Next     End If   Next End Sub

73sho
質問者

お礼

今回も回答をありがとうございます。 マクロ実行してみましたところ、成功していますが、試しに名称を変えてみましたら、うまくいきませんでした。 青い枠が名称を変えた箇所です。赤い枠が本来ならセル結合するはずです。 それが結合していませんでした。

すると、全ての回答が全文表示されます。

関連するQ&A