[[20140717155651]] 『縦列に入っているデータの集約』(お母さん) ページの最後に飛ぶ

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

 

『縦列に入っているデータの集約』(お母さん)

下記のようなデータがあります。

企業名   営業所名   氏名
A      東京     田中
A      大阪     佐藤
A      大阪     中村
B      東京     入江

このデータを企業名、営業所名ごとに氏名が横列に並べられるように下記のような集計をしたいのですが、できますでしょうか?

企業名   営業所名   氏名
A      東京     田中
A      大阪     佐藤 中村
B      東京     入江

できそうで、できなくて、できるのかできないのかもわからないのですが、わかる方がおられましたらよろしくお願いします。

< 使用 Excel:Excel2010、使用 OS:Windows7 >


 A 大阪 の 佐藤 中村 は同一セルに表示ということで

 Sub test()
    Dim a, i As Long, ii As Long, txt As String, n As Long
    With Range("a1").CurrentRegion
        a = .Value
        With CreateObject("Scripting.Dictionary")
            .CompareMode = 1
            For i = 1 To UBound(a, 1)
                txt = Join(Array(a(i, 1), a(i, 2)), Chr(2))
                If Not .exists(txt) Then
                    n = n + 1: .Item(txt) = n
                    For ii = 1 To UBound(a, 2)
                        a(n, ii) = a(i, ii)
                    Next
                Else
                    a(.Item(txt), 3) = a(.Item(txt), 3) & " " & a(i, 3)
                End If
            Next
        End With
        .Offset(, .Columns.Count + 1).Resize(n).Value = a
    End With
End Sub
(seiya ) 2014/07/17(木) 18:43

できました!
ありがとうございます。
お礼のコメントが遅くなってすみませんでした。
とても、助かりました。

(お母さん) 2014/07/26(土) 16:09


教えてもらったコードを今後は自分で書けるようになろうと思い、勉強中です。
上の2行目までは、わかったのですが、3行目のA=.Valueは、どういった内容になるか教えてもらってもいいでしょうか?
初歩的な質問ですみません・・・。

(お母さん) 2014/07/29(火) 10:47


 ポイントは2点あります。

 1点目はWithステートメントです。
 Withステートメントの中では、Withで書かれた「Range("a1").CurrentRegion」
 を省略して記入することが出来ます。

 この場合
 a = Range("a1").CurrentRegion.Value
 の意味です。

 参考
http://kabu-macro.com/vba_apply/vba_with.html

 2点目はセルの配列です。
 セルの値を配列に取り込むことで、配列の要素を指定することで値を取り出すことが出来ます。
 a = Range("a1").CurrentRegion.Value
 これの場合、aという配列変数の中に、Range("A1")を基点とした空白で囲まれた表範囲の値を配列
 として取り込んでいます。

 取り出す時は
 a(1,1)・・・この場合A1の値
 a(3,1)・・・この場合A3の値
 a(1,3)・・・この場合C1の値
 このように値を取り出すことが出来ます。

 参考
http://officetanaka.net/excel/vba/speed/s11.htm

(稲葉) 2014/07/29(火) 11:00


 そこは
 a = Range("a1").CurrentRegion.Value
 ということで、処理対象データを配列変数に代入しています。(処理の高速化のため)

 VBE で [表示] - [ローカルウィンド]
 ローカルウィンド内にすべての変数が表示されその内容が確認できます。

 変数 a に + が付いて表示されるので、それをクリックして確認してください。
(seiya) 2014/07/29(火) 11:03

解説ありがとうございました。
変数に格納されるということと、Withで文章が簡略化されることがなんとなくですが、わかってきました。後のコードもがんばって調べてみたいと思います。
また、どうしてもつまづいたときは、助言をいただけると幸いです。

(お母さん) 2014/07/29(火) 13:45


 > Withで文章が簡略化されることがなんとなくですが、わかってきました。
 この場合のWith Statementはコードの省略が目的ではありません。
 最後の処理済みデータを配列変数から排出する際のセル範囲を指定しやすく
 するのが目的で使用しています。
(seiya) 2014/07/29(火) 13:58

コメント返信:

[ 一覧(最新更新順) ]


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