- ベストアンサー
エクセルVBAで一部のセルの結合をする方法
- エクセルの表で、一部の行を結合して表示する方法を知りたいです。特定の列のみ結合をせずにそのまま表示したいです。
- 社内システムからエクセルに抽出したデータを加工していますが、一部の行を見やすくするために結合したいです。結合するのは特定の列以外の部分です。
- VBAを使って特定の行を結合し、エクセルの表に表示する方法を教えてください。結合するのは特定の列以外の部分です。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 早速、回答No.1の補足、修正の件ですが、 結合しない列の数が増えることが予想されるならそれに合わせた書き方もありますが、 今回は差し当たり簡単で真っ当な修正を提示してみます。 修正は2箇所だけです。 Const IgnCol As Long = 6 の部分を1行加えながら以下のように Const IgnCol As Long = 15 Const IgnCol2 As Long = 16 If c <> IgnCol Then の部分を以下のように If c <> IgnCol And c <> IgnCol2 Then それぞれ変更して試してみて下さい。 それでは
その他の回答 (1)
- cj_mover
- ベストアンサー率76% (292/381)
Sub Re7563106okg_j() ' ' 結合しない列 が そのテーブルの中で 1列目から数えた相対位置で 何列目か 指定 Const IgnCol As Long = 6 Dim tmp As Variant Dim rngCur As Range, r As Range, r2 As Range Dim nMrgTop As Long, nMrgBtm As Long, c As Long ' ' 必ず 処理したいテーブル の 内側 にある セル (内側ならどこでも)を 選択してから実行 Set rngCur = ActiveCell.CurrentRegion ' テーブル全体。運用に合わせて適宜変更 Application.DisplayAlerts = False On Error GoTo Exit_ ' ' テーブルの1列目だけループして 値が変わるポイント を探して ' ' 結合するそれぞれの 先頭行 と 末尾行 の相対位置を 採りながら ' ' 単行でない場合だけ テーブル内の複数行範囲を捉えて 列毎にループ ' ' IgnCol列目でない場合だけ セルの結合をする nMrgTop = 1 tmp = rngCur(1).Value For Each r In rngCur.Columns(1).Offset(1).Cells nMrgBtm = nMrgBtm + 1 If r.Value <> tmp Then If nMrgBtm - nMrgTop > 0 Then c = 0 For Each r2 In rngCur.Rows(nMrgTop & ":" & nMrgBtm).Columns c = c + 1 If c <> IgnCol Then r2.Merge End If Next r2 End If tmp = r.Value nMrgTop = nMrgBtm + 1 End If Next r Exit_: If Err.Number <> 0 Then MsgBox Err.Description, 48 Application.DisplayAlerts = True Set rngCur = Nothing End Sub
補足
早々にありがとうございます! さきほど試したのですが、私の説明ミスで、結合しなくてよい列が2列あることに気づきました。 現段階では、15列目と16列目です。 1列のみだと作成していただいたもので完璧に理想通りのものができました!もしよければ、2列存在する場合の修正箇所を教えてください。 お手数をおかけして申し訳ございません。よろしくお願いします。
お礼
2度も回答ありがとうございました! 修正してみたところ、無事に思った通りの処理がおこなわれました! 今後、列が増える可能性はありますがその話はまだ先なのでこちらで進めさせていただきます。助かりました。 わたしはまだまだこのようなプログラムを組むことができずお力を借りましたが、いつか自分でできるように頑張りたいと思います。