|
▼ゆうか さん:
こんにちは
>タイトル行(C10:H10)がおかしな位置に移動してしまって
ではなく、「合計行が」ではないですか?
それと、罫線がひかれなくなっていません?
少しわかりにくかったかもしれませんが、たとえば集約したデータ件数が7件だったとします。
この7という数字は、Dictionaryデータの件数としてdic.Countというところに格納されています。
もともとがA1から始まっていましたので、データが7件だとするとデータ領域は A2:A8 ですよね。
なので、A2:F & dic.count+1 でしたし、"合計"という文字をセットする場所は A9 ですから
A & dic.count+2 という場所の指定になっていました。
今回、開始はC列、10行目ということですから、このあたりを全て変更しておく必要があります。
訂正箇所のみを連絡してもいいのですが、かえってわかりにくくなりますので、コードを全て。
訂正箇所には★印をつけてあります。
ところで、.Columns("C:H").EntireColumn.AutoFit
これは、あらかじめ"請求書"シートのC〜H列の列幅を"集約"シートのA〜F列とと同じにしておけば
コードはいらないと思いますが?
Sub 請求書作成()
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
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("請求書")
.Cells.ClearContents
.Range("C10:H10").Value = Sheets("集計").Range("A1:F1").Value
.Range("C11").Resize(dic.Count, 6).Value = v
.Rows(2).Resize(dic.Count).sort key1:=.Range("C11"), Order1:=xlAscending, Header:=xlNo
.Range("C10").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").CurrentRegion.Borders '★訂正
.LineStyle = xlContinuous
.Weight = xlThin
End With
.Columns("C:H").EntireColumn.AutoFit '★これは、あらかじめ書式設定しておけばコード処理は不要
'============ 罫線他の書式設定 終了
.Select
End With
Application.ScreenUpdating = True
Set dic = Nothing
MsgBox "合計処理完了"
End Sub
|
|