Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1446 / 13645 ツリー ←次へ | 前へ→

【74436】マクロでソートができない たくまよ 13/6/13(木) 16:11 質問[未読]
【74438】Re:マクロでソートができない UO3 13/6/13(木) 18:14 発言[未読]
【74439】Re:マクロでソートができない たくまよ 13/6/13(木) 22:50 質問[未読]
【74440】Re:マクロでソートができない UO3 13/6/14(金) 9:16 発言[未読]
【74441】Re:マクロでソートができない たくまよ 13/6/14(金) 14:06 お礼[未読]

【74436】マクロでソートができない
質問  たくまよ  - 13/6/13(木) 16:11 -

引用なし
パスワード
   集計表から日ごとの請求明細書を作成するマクロを作っております。
マクロは初心者ですが、調べながら作りました。

今現在のマクロであれば、下記の様な結果になります。
問題は納品日がダブって表示されるのがスマートでないので
ソートして昇順にしたいと思っているのですが、
どこの部分を修正すればよいのか困っています。

C列    D列    E列    F列    G列    H列
納品日    種類    品名    値段    個数    金額
2013/4/20    くだもの    りんご    200    1      200
2013/4/20    くだもの    みかん    580    28    16,240
2013/4/20    野菜    にんじん    580    1      580
2013/4/21    くだもの    りんご    580    1      580
2013/4/21    くだもの    バナナ    520    1      520
2013/4/23    野菜    大根    300    1      300
2013/4/23    くだもの    パイン    150    1      150
    合計                18,570

以下、コードを表示しております。

Sub 2.転記()
  Dim v As Variant
  Dim z As Long
  Dim i As Long
  Dim k As Long
  Dim dic As Object
  Dim dKey As String
  Dim c As Range
  Dim w As Variant
  Dim y As Long                      
  Set dic = CreateObject("Scripting.Dictionary")

  With Sheets("集計")
    z = .Range("A1").CurrentRegion.Rows.Count - 1
    ReDim v(1 To z, 1 To 6)
    For Each c In .Range("A2", .Range("A" & .Rows.Count).End(xlUp))
      dKey = Join(WorksheetFunction.Index(c.Resize(, 4).Value, 1, 0), vbTab)
      If Not dic.exists(dKey) Then
        dic(dKey) = dic.Count + 1
        i = dic(dKey)
        v(i, 1) = c.Value
        v(i, 2) = c.Offset(, 1).Value
        v(i, 3) = c.Offset(, 2).Value
        v(i, 4) = c.Offset(, 3).Value
      End If
      i = dic(dKey)
      v(i, 5) = v(i, 5) + c.Offset(, 4).Value
      v(i, 6) = v(i, 6) + c.Offset(, 5).Value
    Next
  End With

  With Sheets("請求書")
    '請求書シートの使用済みの最終行 取得
    y = .UsedRange.Cells(.UsedRange.Cells.Count).Row 
    If y > 9 Then .Rows("10:" & y).ClearContents   
  
    .Range("C10:H10").Value = Sheets("集計").Range("A1:F1").Value
    .Range("C11").Resize(dic.Count, 6).Value = v
    
    .Rows(11).Resize(dic.Count).Sort key1:=.Range("D11"), Order1:=xlAscending, Header:=xlNo
    .Range("D10").Offset(dic.Count + 1).Value = "合計"
    .Range("H10").Offset(dic.Count + 1).FormulaR1C1 = "=SUM(R2C:R[-1]C)"

    
    .Cells.Borders.LineStyle = xlNone 
    '1行目 タイトル行 
    With .Range("C10:H10")
      .HorizontalAlignment = xlCenter
      .VerticalAlignment = xlCenter
    End With
    '合計行
    With .Range("C10").Offset(dic.Count + 1)

      .Resize(, 5).HorizontalAlignment = xlCenterAcrossSelection
      .Offset(, 5).HorizontalAlignment = xlRight
      .Resize(, 6).VerticalAlignment = xlCenter
    End With
    'データ領域
    With .Range("C11").Resize(dic.Count, 3)
      .HorizontalAlignment = xlCenter
      .VerticalAlignment = xlCenter
    End With
    With .Range("F11").Resize(dic.Count, 3)
      .HorizontalAlignment = xlRight
      .VerticalAlignment = xlCenter
    End With
    
    '桁区切りカンマ
    With .Range("C10:H10")
    Selection.Style = "Comma [0]"
    End With
    
    '罫線
    With .Range("C10:H10").Resize(dic.Count + 2).Borders  
        .LineStyle = xlContinuous
        .Weight = xlThin
    End With
    '★あらかじめ書式設定しておけばコード処理は不要
    '.Columns("C:H").EntireColumn.AutoFit

    '============ 罫線他の書式設定 終了
    .Select
    End With

    Application.ScreenUpdating = True
    'ActiveWorkbook.Save


    Set dic = Nothing
    MsgBox "合計処理完了"

End Sub

【74438】Re:マクロでソートができない
発言  UO3  - 13/6/13(木) 18:14 -

引用なし
パスワード
   ▼たくまよ さん:

>問題は納品日がダブって表示されるのがスマートでないので
>ソートして昇順にしたいと思っているのですが、

納品日がダブって表示されると言うことと、昇順ということは別々のことでは?
ちょっと意味不明なんですが、もし、できあがりの請求書シートの表の中を
納品日昇順にするということなら、最後のほうの .Select の上あたりに

.Range("C10:H10").Resize(dic.Count + 2).Sort Key1:=.Columns("E"), Order1:=xlAscending, Header:=xlYes

こんなコードを1行いれてはいかがでしょうか。

【74439】Re:マクロでソートができない
質問  たくまよ  - 13/6/13(木) 22:50 -

引用なし
パスワード
   ▼UO3 さん:
>▼たくまよ さん:
>
>>問題は納品日がダブって表示されるのがスマートでないので
>>ソートして昇順にしたいと思っているのですが、
>
>納品日がダブって表示されると言うことと、昇順ということは別々のことでは?
>ちょっと意味不明なんですが、もし、できあがりの請求書シートの表の中を
>納品日昇順にするということなら、最後のほうの .Select の上あたりに
>
>.Range("C10:H10").Resize(dic.Count + 2).Sort Key1:=.Columns("E"), Order1:=xlAscending, Header:=xlYes
>
>こんなコードを1行いれてはいかがでしょうか。


早々に教えていただきありがとうございます。
説明が上手くなくてすみません。
納品日がだぶるという表現がおかしかったのだと思います。

4月21日 りんご……
4月21日 バナナ……
4月21日 パイン……
    ↓
改善↓
    ↓
4月21日 りんご
         バナナ
         パイン

上記のような表示にしたいという質問です。
引き続き宜しくお願いします。

【74440】Re:マクロでソートができない
発言  UO3  - 13/6/14(金) 9:16 -

引用なし
パスワード
   ▼たくまよ さん:

それでは、With Sheets("請求書") の上に

  For i = LBound(v, 1) + 1 To UBound(v, 1)
    If v(i - 1, 1) = v(i, 1) Then v(i, 1) = ""
  Next

こんなコードを書いておけばいかがですか。

【74441】Re:マクロでソートができない
お礼  たくまよ  - 13/6/14(金) 14:06 -

引用なし
パスワード
   ありがとうございます。
明日、さっそく動作確認してみます!

1446 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free