行列関係のエクセルVBA作成をお願いします。



あるエクセルシートがあり、

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列が下に検索していき、空白になった時にマクロ停止でお願いします。

よろしくお願いいたします。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2012/09/08 12:01:49
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:ku__ra__ge No.1

回答回数118ベストアンサー獲得回数40

ポイント150pt

以下のマクロでご希望の操作ができると思います。
お客様名、商品名の位置を変更したい場合、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
id:naranara19

大変すばやく、かつ完璧なご対応誠にありがとうございまいした。エラー0で完璧に動作いたしました。感謝します。これからもどうぞよろしくお願いいたします。

2012/09/08 12:01:24
  • id:naranara19
    G,AEの指定が変わるかもしれませんので、Hとか、ACとかになっても動作できるように変数を簡単に書き換えられるようにお願いできますでしょうか?G,AEをそのまま表示しておいていただけると助かります。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません