アプリ版:「スタンプのみでお礼する」機能のリリースについて

(1) C列に顧客番号を表示しその時の販売金額をH列に表示しております。
    顧客番号はC6からC1000に発生順に表示しているため顧客番号は順不同です。
    販売金額はH6からH1000に発生順に表示していますす。
        列番号 C    列番号 H
行番号    顧客番号      金額
  6        100        2000
  7         30        3000
 ~         500         10
 100        30        20000
 ~         100       25000
 700        30        5000
 ~         200        500
1000        100       10000

(2) 上記(1)の表を顧客別・金額順に並べ替えた表を作成したい。
顧客番号はP6からP1000に昇順に表示したい。
販売金額はQ6からZ6に高額順に表示したい。
      列番号P   列番号Q   列番号R   列番号S   ~ 列番号Z
行番号  顧客番号   金額1   金額2   金額3   金額10
  6      30   20000 5000 3000
7 100 25000 10000 2000
8 200 500
9 500 10
~1000

●ご教示のほど宜しくお願い致します。

A 回答 (2件)

一個一個マクロでデータを拾っていっても構いませんが,まぁ折角ですからエクセルにやらせてみましょう。




Sub macro1()
 Dim r As Long, h As Long, p As Long
’準備
 Range("P6:Z65536").ClearContents
 Range("C:C").Copy
 Range("P:P").Insert shift:=xlShiftToRight
 Range("H:H").Copy
 Range("Q:Q").Insert shift:=xlShiftToRight

’並べ替え
 Range("P6:Q" & Range("Q65536").End(xlUp).Row).Sort _
  key1:=Range("P6"), order1:=xlAscending, _
  key2:=Range("Q6"), order2:=xlDescending, _
  header:=xlNo

’転記
 r = 6
 p = 6
 Do Until Cells(r, "P") = ""
  h = Application.CountIf(Range("P:P"), Cells(r, "P"))
  Cells(p, "R") = Cells(r, "P")
  Cells(p, "S").Resize(1, h).Value = Application.Transpose(Cells(r, "Q").Resize(h, 1).Value)
  r = r + h
  p = p + 1
 Loop

’片付け
 Range("P:Q").Delete shift:=xlShiftToLeft
 Cells.EntireColumn.AutoFit
End Sub
    • good
    • 0
この回答へのお礼

keithin様

ご教示ありがとうございました。

ご教示により思い通りの処理が出来ました。

御礼が遅れました事お詫びいたします。

今後とも宜しくお願い致します。



oguno

お礼日時:2011/11/09 23:29

こんばんは!


一例です。

必ず1000行目までデータがあるとしてのコードです。
画面左下にある操作したいSheet見出し上で右クリック → コードの表示 → VBE画面が出ますので
↓のコードをコピー&ペーストしてマクロを実行してみてください。

Sub test()
Dim i, j As Long
Cells(5, 16) = "顧客番号"
Application.ScreenUpdating = False
For i = 6 To 1000
If WorksheetFunction.CountIf(Columns(16), Cells(i, 3)) = 0 Then
Cells(Rows.Count, 16).End(xlUp).Offset(1) = Cells(i, 3)
End If
Next i
j = Cells(Rows.Count, 16).End(xlUp).Row
Range(Cells(6, 16), Cells(j, 16)).Sort key1:=Cells(5, 16), order1:=xlAscending
For j = 6 To Cells(Rows.Count, 16).End(xlUp).Row
For i = 6 To 1000
If Cells(i, 3) = Cells(j, 16) Then
Cells(j, Columns.Count).End(xlToLeft).Offset(, 1) = Cells(i, 8)
End If
Next i
Next j
For j = 17 To ActiveSheet.UsedRange.Columns.Count
If WorksheetFunction.Count(Columns(j)) Then
Cells(5, Columns.Count).End(xlToLeft).Offset(, 1) = "金額" & j - 16
End If
Next j
Application.ScreenUpdating = True
End Sub

こんな感じではどうでしょうか?m(_ _)m
    • good
    • 0
この回答へのお礼

tom04様

ご教示ありがとうございました。

今後とも宜しくお願い致します。

お礼日時:2011/11/09 23:30

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!