[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『縦列に入っているデータの集約』(お母さん)
下記のようなデータがあります。
企業名 営業所名 氏名
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
(お母さん) 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
(お母さん) 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.