[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『複数行データを一行に』(インテグラ)
マクロ初心者です。エクセル マクロ(VBA)に関して悩んでいます。助けてください。お願いいたします。
以下のようにある複数行あるデータを一行にまとめたいのですが、どうしたらよろしいでしょうか?
また、親識別ID 0をスタート値とし、次の0の手前でマクロが終了し、その後、次の親識別ID 0にセルを移し、空欄でなければ再度マクロを実行するようにしたいんです。
親識別ID 自己ID コメント発言時刻 住所 コメント
0(親) 1 6:00:00 東京 c2 1(ID1の子) 10 6:01:00 東京 c2 1(ID1の子) 11 6:02:00 神奈川 c2 1(ID1の子) 12 6:03:00 神奈川 c2 0(親) 4 6:04:00 群馬 c2 2(ID2の子) 21 6:05:00 群馬 c2 2(ID2の子) 22 6:08:00 群馬 c2 0(親) 7 6:10:00 埼玉 c3 3(ID3の子) 31 6:13:00 埼玉 c3 3(ID3の子) 32 6:23:00 埼玉 c6
以上のデータを以下の様に違うシートに置き換えたいと考えています。
親識別ID数(No) 子の数 親ID 時刻差 名前・コメント分類
1 3 1 0:03:00 複数住所・単一コメント 2 2 4 0:04:00 単一住所・単一コメント 3 2 7 0:13:00 単一住所・複数コメント
VBAをどのように書いたら、このようにまとめることができますか?教えてください。宜しくお願いいたします。
名前・コメント分類とは
東京−c2、神奈川−c2 東京と神奈川・・・複数の住所があるので複数住所
c2 ・・・単一コメントなので、単一コメント
∴(複数住所・単一コメント)
群馬−c2 群馬・・・単一の住所なので単一住所
c2 ・・・単一コメントなので、単一コメント
∴(単一住所・単一コメント)
埼玉−c3 埼玉・・・単一の住所なので単一住所 埼玉−c6 c3,c6・・・複数のコメントなので、複数コメント ∴(単一住所・複数コメント)
すみません… 内容の全てにおいて 自分には難しくて意味が分かりません! 時刻差?
親Aは名前ですか?で、名前の欄のt1とt2の親は同じってこと ですかね?やっぱりよく分からないです。。。
(プレリュード)
Pivotでもできそうな気が・・・
(黒バラ)
配列で処理すると、もっとシンプルなコードになるのでしょう・・ まだまだ初心者なので、数少ないツールを組み合わせただけの下手なコードになっちゃいました。。^^; たたき台程度です。。
<Sheet1> A B C D E F 1 親 親識別ID 自己ID 時刻 名前 コメント 2 A 0 1 6:00:00 t1 c2 3 A 1 10 6:01:00 t1 c2 4 A 1 11 6:02:00 t2 c2 5 A 1 12 6:03:00 t2 c2 6 A 0 4 6:04:00 t3 c2 7 A 2 21 6:05:00 t3 c2 8 A 2 22 6:08:00 t3 c2 9 B 0 7 6:10:00 t4 c3 10 B 3 31 6:13:00 t4 c3 11 B 3 32 6:23:00 t4 c6
<Sheet2> A B C D E F 1 親 親識別ID数(No) 子の数 親ID 時刻差 名前・コメント分類 2 A 1 3 1 0:03:00 複数名前・同一コメント 3 A 2 2 4 0:04:00 同一名前・同一コメント 4 B 1 2 7 0:13:00 同一名前・複数コメント
上記図表のシート配列で作成しました。。
<考え方> 1.Sheet1のB列の親識別IDが"0"で、かつ空白でない「行」を For〜Next でH列に列記し、最後に最下行の一つ下の行を取り出す。。 2.Sheet2のデータの置き換え範囲をクリアする。 3.1で取り出した「行データ」を For Each Next で上から順に「行データ」を利用して、Sheet2の置き換えデータを作り上げる。。 4.必要のない作業セルをクリアする。
標準モジュールに貼り付けて実行してみて。。 ↓ Sub test() Dim i As Long Dim c As Range, myR As Range
For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row If Cells(i, 2).Value = 0 And Cells(i, 2).Value <> "" Then Cells(Rows.Count, 8).End(xlUp).Offset(1).Value = i End If Next i Cells(Rows.Count, 8).End(xlUp).Offset(1).Value = Cells(Rows.Count, 1).End(xlUp).Row + 1 With Sheets("Sheet2") Range(.Range("A2"), .Cells(Rows.Count, 1).End(xlUp)).Resize(, 6).Value = "" .Range("A1:F1").Value = [{"親","親識別ID数(No)","子の数","親ID","時刻差","名前・コメント分類"}] Set myR = Range(Range("H2"), Cells(Rows.Count, 8).End(xlUp)) For Each c In myR .Cells(Rows.Count, 1).End(xlUp).Offset(1).Value = Cells(c.Value, 1).Value .Cells(Rows.Count, 2).End(xlUp).Offset(1).Value = Cells(c.Value, 2).Offset(1).Value If c.Offset(1).Value <> "" Then .Cells(Rows.Count, 3).End(xlUp).Offset(1).Value = c.Offset(1).Value - c.Value - 1 .Cells(Rows.Count, 5).End(xlUp).Offset(1).Value = Cells(c.Offset(1).Value - 1, 4).Value - Cells(c.Value, 4).Value If WorksheetFunction.CountIf(Range(Cells(c.Value, 5), Cells(c.Offset(1).Value - 1, 5)), Cells(c.Value, 5)) = _ c.Offset(1).Value - c.Value Then .Cells(Rows.Count, 6).End(xlUp).Offset(1).Value = "同一氏名" Else .Cells(Rows.Count, 6).End(xlUp).Offset(1).Value = "複数氏名" End If If WorksheetFunction.CountIf(Range(Cells(c.Value, 6), Cells(c.Offset(1).Value - 1, 6)), Cells(c.Value, 6)) = _ c.Offset(1).Value - c.Value Then .Cells(Rows.Count, 7).End(xlUp).Offset(1).Value = "同一コメント" Else .Cells(Rows.Count, 7).End(xlUp).Offset(1).Value = "複数コメント" End If .Cells(Rows.Count, 6).End(xlUp).Value = _ .Cells(Rows.Count, 6).End(xlUp).Value & "・" & .Cells(Rows.Count, 7).End(xlUp).Value End If .Cells(Rows.Count, 4).End(xlUp).Offset(1).Value = Cells(c.Value, 3).Value Next c .Range("E:E").NumberFormatLocal = "h:mm:ss" Range(Range("H2"), Cells(Rows.Count, 8).End(xlUp)).Value = "" Range(.Range("G2"), .Cells(Rows.Count, 7).End(xlUp)).Value = "" End With End Sub (kei)
今頃になって気が付いたのですが、、 わたしのマクロは、インテグラさんが最初に出された質問に対応したものでした。 質問自体を編集されたので、、このマクロはちゃんと動きません。>< (kei)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.