エクセル2007で、表(1)のようなレコードがあります。
B列とC列の両列をキー列として、両列が次の行と同じ場合、表(2)のように一行にまとめるVBAをどなたかご教示お願いします。
過去ログ等で重複データの行削除は理解できたのですが、キー列が2列の場合や、表(2)のように右の列にデータをどんどん増やす方法がわかりません。
条件は、レコードは1000行以上、市idと社idは昇順に並んでいるため重複データは必ず上下に連続している、商品の種類は50以上あり、どれ位右に列が増えるか不明、などです。
VBA初心者です。よろしくお願いします。
表(1)(sheet1)
県名|市id | 社id|社名|商品|空白|空白・・
秋田|0001|0001|A株|青大|空白
秋田|0001|0001|A株|赤小|空白
東京|0002|0003|B株|黒中|空白
大阪|0004|0001|C有|赤中|空白
大阪|0004|0001|C有|白大|空白
大阪|0004|0002|D株|赤大|空白
大阪|0004|0002|D株|黄中|空白
大阪|0004|0002|D株|緑小|空白
・
・
表(2)(sheet2)
県名|市id| 社id|社名|商品|商品|商品・・
秋田|0001|0001|A株|青大|赤小|空白
東京|0002|0003|B株|黒中|空白|空白
大阪|0004|0001|C有|赤中|白大|空白
大阪|0004|0002|D株|赤大|黄中|緑小
・
・
No.1
- 回答日時:
こんばんは!
一例です。
Alt+F11キー → メニュー → 挿入 → 標準モジュール → VBE画面に
↓のコードをコピー&ペーストしてマクロを実行してみてください。
(Alt+F8キー → マクロ → マクロ実行です)
Sub Sample1() 'この行から
Dim i As Long, k As Long, c As Range, wS1 As Worksheet, wS2 As Worksheet
Set wS1 = Worksheets("Sheet1")
Set wS2 = Worksheets("Sheet2")
Application.ScreenUpdating = False
wS2.Cells.Clear
With wS1
i = .Cells(Rows.Count, 1).End(xlUp).Row
.Range("A:A").Insert
.Rows(1).Copy wS2.Cells(1, 1)
With Range(wS1.Cells(2, 1), wS1.Cells(i, 1))
.Formula = "=C2&""_""&D2"
.Value = .Value
End With
Range(.Cells(1, 1), .Cells(i, 1)).AdvancedFilter Action:=xlFilterInPlace, unique:=True
.Range("A:A").Copy wS2.Cells(1, 1)
.Range("A:A").AutoFilter
.AutoFilterMode = False
For i = 2 To wS2.Cells(Rows.Count, 1).End(xlUp).Row
Set c = .Range("A:A").Find(what:=wS2.Cells(i, 1), LookIn:=xlValues, lookat:=xlWhole)
c.Offset(, 1).Resize(1, 4).Copy wS2.Cells(i, 2)
Next i
For i = 2 To wS2.Cells(Rows.Count, 1).End(xlUp).Row
For k = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
If .Cells(k, 1) = wS2.Cells(i, 1) Then
.Cells(k, 6).Copy wS2.Cells(i, Columns.Count).End(xlToLeft).Offset(, 1)
End If
Next k
Next i
.Range("A:A").Delete
wS2.Range("A:A").Delete
End With
k = wS2.UsedRange.Columns.Count
Range(wS2.Cells(1, 5), wS2.Cells(1, k)) = "商品"
wS2.Cells(1, 1).CurrentRegion.Borders.LineStyle = xlContinuous
Application.ScreenUpdating = True
MsgBox "処理完了"
End Sub 'この行まで
こんなんではどうでしょうか?m(_ _)m
No.2ベストアンサー
- 回答日時:
一例です。
Sheet1のシートタブ上で右クリック→コードの表示→サンプルコード貼り付け→シート上でAlt+F8キー押下、sample実行
因みにデータは昇順でなくても問題ありません。(但し、集約はデータ発生順になります)
Sub sample()
Dim i As Long, db, wk, wk1
Set db = CreateObject("Scripting.Dictionary")
For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row
wk = Cells(i, "A") & " ," & Cells(i, "B") & _
"," & Cells(i, "C") & "," & Cells(i, "D")
db(wk) = db(wk) & " " & Cells(i, "E")
Next
wk = db.keys
With Sheets("sheet2")
.Cells.ClearContents
.Cells(1, 1).Resize(, 4) = Cells(1, 1).Resize(, 4).Value
For i = 0 To UBound(wk)
.Cells(i + 2, "A").Resize(, 4) = Split(wk(i), ",")
wk1 = Split(Trim(db(wk(i))), " ")
.Cells(i + 2, "E").Resize(, UBound(wk1) + 1) = wk1
Next
wk1 = .Cells(1, 1).CurrentRegion.Columns.Count
.Cells(1, "E").Resize(, wk1 - 4) = "商品"
End With
Set db = Nothing
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) スプレットシートでA1~G1にデータが入っていて、 それを1列ずつ空けて表示する関数がわかる方いまし 4 2022/08/25 09:39
- Visual Basic(VBA) エクセルVBAについて 2 2023/01/31 16:21
- Excel(エクセル) 【条件付き書式】countifsで複数条件を満たしたセルを赤くする方法 2 2023/02/09 23:53
- Visual Basic(VBA) VBA 「,」・空白・カタカナ等の複数条件のマクロ 2 2023/08/23 11:57
- Excel(エクセル) エクセルでフィルタ後の列の重複を回避したい 6 2022/10/13 12:50
- Excel(エクセル) 特定文字(数字)で行挿入、挿入された行で合計したい 2 2023/03/13 14:30
- Excel(エクセル) Excel関数 情報引用する方法 4 2022/07/31 20:59
- Visual Basic(VBA) 【ExcelVBA】Powerクエリーでいうピボット解除と同じ処理をVBAで 4 2022/07/06 17:09
- Excel(エクセル) capeofdragonと申します Excel2016を使っておりまして 半角又は全角の任意文字列が 2 2022/10/31 13:51
- Visual Basic(VBA) EXCEL VBAでA列にある空白行より下の行すべてを削除する方法を教えてください。 3 2023/02/17 07:02
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
くら寿司WiFiパスワード分から...
-
関西弁はなぜ人を不快にさせる...
-
日本へ架ける国際電話のcountry...
-
キャバ嬢です。 お客様が好きに...
-
JRで神戸駅から大阪まで 快...
-
今(大阪)花火の音が聞こえま...
-
大阪人ですが、大阪人が嫌いで...
-
関西人の気質
-
複数列の平均を出したい
-
風俗の大阪のアポロビルみたい...
-
電信棒という表現は方言ですか?
-
「ばびる」の使い方
-
「自~至~」について
-
友達(東京人)が大阪が合わな...
-
大阪に合わない
-
話してる時に『〇〇〇〇じゃな...
-
「無理しないでね」って意味だ...
-
【関西の方限定】 関西弁につ...
-
『あんた』と呼ぶ心理
-
大阪弁の「かんにんなー」の意味
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
関西弁はなぜ人を不快にさせる...
-
くら寿司WiFiパスワード分から...
-
日本へ架ける国際電話のcountry...
-
キャバ嬢です。 お客様が好きに...
-
大阪に合わない
-
大阪人ってどうして威圧的なん...
-
JRで神戸駅から大阪まで 快...
-
「無理しないでね」って意味だ...
-
大阪人ですが、大阪人が嫌いで...
-
贈呈式の司会進行の原稿につて
-
友達(東京人)が大阪が合わな...
-
大阪が嫌いになりだした
-
「○○さんの家」という意味で「...
-
複数列の平均を出したい
-
関西のノリがほんとにしんどいです
-
電信棒という表現は方言ですか?
-
関西弁で言う「ええしの子」の...
-
電話番号の最初の3桁や4桁って...
-
風俗の大阪のアポロビルみたい...
-
呼び出しの「元」と「先」って...
おすすめ情報