あるエクセルシートがあり、
G11から下にお客様名、AE11から商品名が入っています。
その直前の10行目が見出しで、下に向かってずっとお客様名、商品名がはいっています。
マクロをかけると、もしG列内で同じ名前(値)があったときには、上の方の名前の行のAE列内に集中して商品名が入るようにしてほしいのです。
例
G,AE
11,お名前,商品名
12,佐藤一,りんご
13,鈴木二,みかん
14,田中四,お米
15,近藤五,スイカ
16,佐藤一,オレンジ
17,鈴木二,納豆
18,佐藤一,おくら
とあったとします。マクロをかけると、
G,AE
11,商品名,名前
12,佐藤一,りんご、オレンジ、おくら
13,鈴木二,みかん、納豆
14,田中四,お米
15,近藤五,スイカ
16,佐藤一,空白
17,鈴木二,空白
18,佐藤一,空白
となるようにしていただきたいのです。
同じ名前の一番上に商品名がすべて入る形です。商品名と商品名の間は、「、」(全角)で区切ります。
16,17,18にある空白というのはスペースも入らず、商品名を切り取って貼り付ける形の残りのイメージです。
AE列が下に検索していき、空白になった時にマクロ停止でお願いします。
よろしくお願いいたします。
以下のマクロでご希望の操作ができると思います。
お客様名、商品名の位置を変更したい場合、START_NAME、START_SHOHINの内容を変更してください。
Sub ReSummary() Const START_NAME = "G11" Const START_SHOHIN = "AE11" Set nameDic = CreateObject("Scripting.Dictionary") ' 情報収集 Set nameRange = Range(START_NAME) rowOffset = 0 Do While Not nameRange.Value = "" Set shohinRange = Range(START_SHOHIN).Offset(rowOffset, 0) If nameDic.exists(nameRange.Value) = False Then Call nameDic.Add(nameRange.Value, shohinRange.Value) Else nameDic(nameRange.Value) = nameDic(nameRange.Value) & "、" & shohinRange.Value End If Set nameRange = nameRange.Offset(1, 0) rowOffset = rowOffset + 1 Loop ' 書き換え Set nameRange = Range(START_NAME) rowOffset = 0 Do While Not nameRange.Value = "" Set shohinRange = Range(START_SHOHIN).Offset(rowOffset, 0) If nameDic.exists(nameRange.Value) Then shohinRange.Value = nameDic(nameRange.Value) Call nameDic.Remove(nameRange.Value) Else shohinRange.Value = "" End If Set nameRange = nameRange.Offset(1, 0) rowOffset = rowOffset + 1 Loop MsgBox "end" End Sub
大変すばやく、かつ完璧なご対応誠にありがとうございまいした。エラー0で完璧に動作いたしました。感謝します。これからもどうぞよろしくお願いいたします。
2012/09/08 12:01:24