プロが教える店舗&オフィスのセキュリティ対策術

お世話になります。拙い説明になりますが、よろしくお願いします。
Excel2007で、↓のような表があります。

列A | 列B     | 列C      | 列D   | 列E
0か1|40種類重複あり|10種類重複あり|ユニーク|ユニーク
(100行くらい)

この表に対して、列A, B, Cの値が同じである行を列ごとに結合するマクロを書きたいです。
例…
0|a|x|名前1|日付1
0|a|x| 名前2|日付2

これがA1から始まっていたとしたら、A1とA2、B1とB2、C1とC2を結合していきます。
結合する行は3行以上のこともありえます。

最初、変数 i 行目と i + 1 行目のA~C列が同じだったら、i 行目と i + 1 行目を結合する作業をループ…という風に書いたのですが、
i + 2 行目も結合すべき行だった時、前の行が結合された時点で i + 1 行目がEmptyになっているため、うまくいきませんでした。

どのように書いたら上手くいきますでしょうか。
よろしくご教授ください。

A 回答 (2件)

こんばんは!



最終行から上に遡ってループさせた方が簡単だと思います。

Sub Sample1()
Dim i As Long
For i = Cells(Rows.Count, "A").End(xlUp).Row To 2 Step -1
If Cells(i, "A") = Cells(i - 1, "A") And _
Cells(i, "B") = Cells(i - 1, "B") And _
Cells(i, "C") = Cells(i - 1, "C") Then
Application.DisplayAlerts = False
Range(Cells(i - 1, "A"), Cells(i, "A")).Merge
Range(Cells(i - 1, "B"), Cells(i, "B")).Merge
Range(Cells(i - 1, "C"), Cells(i, "C")).Merge
Application.DisplayAlerts = True
End If
Next i
End Sub

こんな感じではどうでしょうか?m(_ _)m
    • good
    • 0
この回答へのお礼

こんばんは!お返事をありがとうございます。
教えていただいたコードを試したら、意図した通りに動きました!
勉強になりました。ありがとうございました。

お礼日時:2017/05/10 18:27

こんにちは



普通に考えると、重複データが必ず連続しているとは限らなそうなので、例えば、
 1)A列、B列、C列をキーにデータをソート
 2)各列で、同じデータが並ぶセルを結合
といった手順になりそうですが、並べ替えなどは必要ないのでしょうか?

また、一度この処理を行ったデータで、もう一度同じ処理にかけたいなどという場合は、上記のままではうまくいきません。(データが追加されたりして、もう一度整理したい(?)場合など)

何度でも、同じ処理ができるようにするには、上記に加えて
 0)列内の結合を解除し、各セルに値をセット
  ( 2)の逆処理のようなもの)
といった処理も加えておく必要があるのかも知れませんね。
    • good
    • 0
この回答へのお礼

こんにちは!お返事ありがとうございます。
今回のデータでは、並べ替えはできないのです><
結合の処理をしてから、データが追加されることもないので、大丈夫でした。
細やかなご指摘をありがとうございます。

お礼日時:2017/05/10 18:30

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています