Excel VBA質問箱 IV

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

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


54373 / 76732 ←次へ | 前へ→

【27153】Re:Subtotalについて
発言  ichinose  - 05/7/30(土) 15:32 -

引用なし
パスワード
   ▼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

とするのが好きですけど、確認してください。
1 hits

【27150】Subtotalについて YN62 05/7/30(土) 11:17 質問
【27153】Re:Subtotalについて ichinose 05/7/30(土) 15:32 発言
【27161】Re:Subtotalについて YN62 05/7/30(土) 22:20 お礼

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