[[20120501103146]] 『A列に縦に同じ日付が並んだら同じ業の他の列を縦ax(けい) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『A列に縦に同じ日付が並んだら同じ業の他の列を縦に結合する』(けい)

 エクセルで日程の表を作っているのですが、元データ(日付)を
 縦に表示させると同じ日付が縦に並んでしまう場合があります。

 内容的にダブった行を削除することができないので、
 不要なセルだけ結合したいのです。

 具体的には、A列(A2以下)に同じ日付
(例えばA2とA3が「5/8(火)」)になったら、A2とA3、B2とB3、
 C2とC3、D2とD3、I2とI3、K2とK3を結合したいのです。

 A列は必ず行2と行3が同じ日付になるわけではなく、
 月によって変わりますし、縦に同じ日付が並ぶのが
 1日だけではなく、複数日の場合もあります。

 どなたか、自動的に縦に同じ日が並ぶのを探して、あったら
 横の列の同じ行を結合する方法を教えていただけませんでしょうか。

 VBAも初心者です。今回のは複雑すぎてわかりません。

 どうぞご指導お願いいたします。


 たとえば(アップ後、ちょっと変更)

 Sub Sample()
    Dim f As Range
    Dim c As Range
    Dim x As Long
    Dim y As Long
    Dim col As Variant

    Application.ScreenUpdating = False
    Application.DisplayAlerts = False

    With Sheets("Sheet1")
        .Cells.MergeCells = False       'いったん結合解除
        Set f = .Range("A2")
        For Each c In .Range("A2", .Range("A" & .Rows.Count).End(xlUp).Offset(1))
            If c.Value <> c.Offset(1).Value Then
                'f〜cまで結合
                x = f.Row
                y = c.Row
                If x <> y Then
                    For Each col In Array("A", "B", "C", "D", "I", "K")
                        With Range(col & x).Resize(y - x + 1)
                            .Merge
                            .HorizontalAlignment = xlLeft
                            .VerticalAlignment = xlCenter
                        End With
                    Next
                End If
                Set f = c.Offset(1)
            End If
        Next
    End With

    Set f = Nothing
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
    MsgBox "結合処理完了"

 End Sub

 (ぶらっと)


 ぶらっとさま、

 早速お返事をいただきありがとうございました。

 できました!
 他のコマンドと一緒にボタンに入れて全く問題なくできました。

 自分なら何か月もかかってしまうところです。
 本当にほんとうにありがとうございます。

 すごく難しいので解明に時間がかかりそうですが、
 教えていただきたいのですが、
 この場合"f"と"c"は何を指しているのでしょうか。
 また、"'一旦結合解除"はSheet1のセルの中で結合されている
 セルが何かあったら全て一旦解除ということですか?そうならば
 どうして一旦解除する必要があるのでしょうか?

 よく分らなくてすみません。

 お時間がありましたら、ご指導いただければ嬉しいです。

 取り急ぎ、ありがとうございました。

 けい


 >この場合"f"と"c"は何を指しているのでしょうか。

 たとえば A5 〜 A10 が同じ日付だった場合、5行目から10行目を結合させるわけだけど
 その、同じ日付のA列のセルの A5 が f (first のつもり) という変数に入っていて、
 A10 が c という変数(今チェックしているセル)に入っている。

 >また、"'一旦結合解除"はSheet1のセルの中で結合されているセルが何かあったら全て一旦解除ということですか?
 >そうならば どうして一旦解除する必要があるのでしょうか?

 う〜ん・・・気分的に?
 たとえば A5〜A10を結合しようとして、なぜか、処理前に、誰かが (意味無く)A10〜A12 を結合していると
 面白くないのでね。
 ただ、今回のケース、いったん処理すると、結合セルの最初のセルにしか値が無く、残りは空白なので
 解除して、処理をしたとしても、おかしな結果になるので、「部分的潔癖症」かな?
 このコードは削除しておいてもいいよ。

 (ぶらっと)


 ぶらっとさま、

 ご説明をありがとうございます!

 fがfirst、cが今見ているセルということですね。
 すごく分りやすいです。

 確かにセルを結合すると上のセルのデータが残るためか
 途中でデバッグになったのでこのsubは最後に入れました。

 まだ難しくて完全に理解できてないですが、ゆっくり
 勉強してみます。

 本当に助かりました。ありがとうございました。

 けい

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.