|
▼YN62 さん:
こんにちは。
>下のような表があります。
>test2を実行すると→A列の文字の数12個を算出できます
> ~~~~~~~~~~
>test1のSubtotal(B列の合計)を実行後に、test2を実行すると13を算出します。
> ~~~~~~~~~~~~~~
>何が災いしているのでしょうか。
>兎に角B18に数字が入っているtest2がA5:A17のカウントをします。
> ~~~~~~~~~~~~~~~~~~~~~~~
>test1とtest2のSubtotalを支障なく実行したいのですが、その方法を教えてください。
>
> A B
>1
>:
>5 項目1 項目2
>6 111 111
>7 112 112
>8 113 113
>9 114 114
>10 115 115
>11 116 116
>12 117 116
>13 118 118
>14 119 119
>15 120 120
>16 121 121
>17 122 122
>
>
>Sub test1() '合計はB列18で1397になります
>Dim lon_Limirow As Range
>
>Set lon_Limirow = Worksheets(1).Cells(65536, 2).End(xlUp)
>lon_Limirow.Offset(1).FormulaR1C1 = "=SUBTOTAL(9,R[-" & lon_Limirow.Row & "]C:R[-1]C)"
>End Sub
>
>
>Sub test2() ’数は12ですがtest1実行後は13になります
>Dim 行 As Integer
>Dim lastC As Range
> On Error Resume Next
> Sheets(1).Columns("A").SpecialCells(xlCellTypeFormulas, 23).ClearContents
> On Error GoTo 0
> Set lastC = Range("A65536").End(xlUp)
> 行 = Range("A5").CurrentRegion.Rows.Count
'これは、test1実行前と後で ↑このCurrentRegionの結果の違いが原因です
' 投稿するまでもなく既に気が付かれましたか?
> lastC.Offset(1).FormulaR1C1 = "=SUBTOTAL(3,R[-" & (行 - 1) & "]C:R[-1]C)"
>
>End Sub
私は、
'=====================================================================
Sub test1() '合計はB列18で1397になります
Dim rng As Range
With Worksheets(1)
Set rng = .Range(.Cells(6, 2), .Cells(.Rows.Count, 2).End(xlUp))
With rng
If .Row > 5 Then .Cells(.Count + 1).Formula = "=SUBTOTAL(9," & .Address & ")"
End With
End With
End Sub
'=======================================================================
Sub test2() '数は12ですがtest1実行後は13になります
Dim rng As Range
On Error Resume Next
Sheets(1).Columns("A").SpecialCells(xlCellTypeFormulas).ClearContents
On Error GoTo 0
With Worksheets(1)
Set rng = .Range(.Cells(6, 1), .Cells(.Rows.Count, 1).End(xlUp))
With rng
If .Row > 5 Then .Cells(.Count + 1).Formula = "=SUBTOTAL(3," & .Address & ")"
End With
End With
End Sub
とするのが好きですけど、確認してください。
|
|