まりふのひと

こんなセル結合は自動でやりたい

日経パソコン 2007.11.26 の「森本家のワークシート」の記事。
今、「住所録で知るExcelの基本操作」というのを執打*1 中なので、印刷時はこういうことが一発で出来ると便利だろうなぁ〜 とサイト(http://pc.nikkeibp.co.jp/npc/)をからダウンロードしてみた。

※ 縦連結のソースコード

私流に編集し直してある。(ソースは変更していない)

Sub 縦連結()
        '2列以上選択していたらエラーを出して終了
    If Selection.Columns.Count <> 1 Then
        MsgBox ("1列複数行の範囲を選択して実行してください")
        Exit Sub
    End If
    Set 元の選択範囲 = Selection    '選択された範囲を保存
    Selection.Cells(1, 1).Select        '選択範囲の左上のセルを選択
    Do
        Set 次セル = ActiveCell.Offset(1, 0)   'すぐ下のセルを得る
            '次セルが元の選択範囲からはみ出たら終了
        If Intersect(元の選択範囲, 次セル) Is Nothing Then Exit Do
            '現在のセルと次セルの値が同じなら次セルを連結
        If ActiveCell.Value = 次セル.Value Then
            次セル.ClearContents                '次セルの値をクリア
            Range(ActiveCell, 次セル).Merge     '現在のセルと次セルを連結
        Else
            次セル.Select      '次セルが違う値なら次セルを選択
        End If
    Loop
End Sub
※ 思ったこと

  1. [説明]シートの作り方,「こんな方法もあるんだぁ〜」とひどく新鮮だった。

    理解に苦しんだ。折角だから、今度やってみよう。

  2. ソースに "Option Explicit" を入れたら、次の変数の定義を求められた‥‥が、解らない。
    "Selection"のヘルプに「たとえば、セルを選択しているときは、Range オブジェクトが返されます」とあったので、とりあえず range で行ってみたところ、コンパイルエラーも実行時エラーも出なかった。
    • Dim 元の選択範囲 As Range
    • Dim 次セル As Range
  3. ダウンロードサイトは、「麻里府発 > 気になるページ」に登録しておいた。
  4. ダウンロードは「自動解凍形式」と「Excelファイル」の2つ用意してあった。最近のウィルス事情を考えると圧縮しないままのファイルを提供するのもいいのかなぁ〜 と思った。

*1:キーボードを叩いているのだから「執筆」とは言わないであろう。