Excel VBA質問箱 IV

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

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


8917 / 13646 ツリー ←次へ | 前へ→

【30282】最終行の計算、条件付の行のみの計算 琴葉 05/10/24(月) 14:10 質問[未読]
【30312】Re:最終行の計算、条件付の行のみの計算 Jaka 05/10/25(火) 9:06 回答[未読]
【30322】Re:最終行の計算、条件付の行のみの計算 琴葉 05/10/25(火) 14:06 質問[未読]
【30330】Re:最終行の計算、条件付の行のみの計算 Jaka 05/10/25(火) 15:39 発言[未読]
【30334】Re:最終行の計算、条件付の行のみの計算 琴葉 05/10/25(火) 16:15 質問[未読]
【30340】Re:最終行の計算、条件付の行のみの計算 Jaka 05/10/25(火) 16:46 発言[未読]
【30371】Re:最終行の計算、条件付の行のみの計算 琴葉 05/10/26(水) 9:17 お礼[未読]

【30282】最終行の計算、条件付の行のみの計算
質問  琴葉  - 05/10/24(月) 14:10 -

引用なし
パスワード
   いつもお世話になります。
F列のオートフィルター後(たとえば”現金”)のシートを
  A....   F   G   H   I
1      科目  借方  貸方  残金
5      現金  100      
8      現金      300
9      現金  400 
11      現金  800
15      現金      700

下記のようにしたいのですが、End(xlUpとSUBTOTALをつかったりしたのですが
最終行(15)が空白だったりするとうまくできません。
I列の判別の仕方も、思いつかないのですがどのような方法がありますでしょうか
よろしくお願いいたします。
  A....   F   G   H   I
1      科目  借方  貸方  残金
5      現金  100    0   100
8      現金   0   300  -200
9      現金  400    0  200
11      現金  800    0  1000
15      現金   0   700  300
16         1300  1000  300

【30312】Re:最終行の計算、条件付の行のみの計算
回答  Jaka  - 05/10/25(火) 9:06 -

引用なし
パスワード
   オートフィルタしている範囲が、よく解りませんけど、A1からしてあるとし、かつ現金がオートフィルタしてある物として。
こんな感じに。
   A    B    C・・・・
1 XX ▼  XX ▼  XX ▼


Dim Cel As Range, SavAD As String, GK As Long, HK As Long
With ActiveSheet.AutoFilter.Range
  SavAD = "I1"
  On Error Resume Next
  For Each Cel In .Columns("F").SpecialCells(xlCellTypeVisible)
    If Cel.Row <> 1 Then
      Cel.Offset(, 1).Resize(, 2).SpecialCells(xlCellTypeBlanks).Value = 0
      GK = GK + Cel.Offset(, 1).Value
      HK = HK + Cel.Offset(, 2).Value
      Cel.Offset(, 3).Value = Val(Range(SavAD)) + Cel.Offset(, 1).Value - Cel.Offset(, 2).Value
      SavAD = Cel.Offset(, 3).Address(0, 0)
    End If
  Next
  Range("G1").Offset(.Rows.Count).Value = GK
  Range("H1").Offset(.Rows.Count).Value = HK
  Range("I1").Offset(.Rows.Count).Value = GK - HK
End With

【30322】Re:最終行の計算、条件付の行のみの計算
質問  琴葉  - 05/10/25(火) 14:06 -

引用なし
パスワード
   Jakaさん いつもありがとうございます。

ユーザーフォームのボタンに記述して、希望通りに作動しましたのですが、
コンボボックスの内容を、現金から当座預金などほかの物でオートフィルターを行い
再度集計すると、集計行が1行増えてしまいます。

Columns("F").SpecialCells(xlCellTypeVisible)を
("F65536").End(xlUp)としてもだめでした。
一度入力して削除した行でも保存するまではその位置が最終行になってしまうようで
どのように回避したらよろしいでしょうか 何度も申し訳ありません。

【30330】Re:最終行の計算、条件付の行のみの計算
発言  Jaka  - 05/10/25(火) 15:39 -

引用なし
パスワード
   ▼琴葉 さん:
>コンボボックスの内容を、現金から当座預金などほかの物でオートフィルターを行い
>再度集計すると、集計行が1行増えてしまいます。
>
>Columns("F").SpecialCells(xlCellTypeVisible)を
>("F65536").End(xlUp)としてもだめでした。
>一度入力して削除した行でも保存するまではその位置が最終行になってしまうようで
>どのように回避したらよろしいでしょうか 何度も申し訳ありません。

>15      現金      700
 を下のようにするんじゃないんですか?

>15      現金   0   700  300
>16         1300  1000  300

1行挿入するのもなんだと思い、1番下に合計値を書き込みました。

+1して1行あけてみるとか、これだとどうなりますか?
Range("I1").Offset(.Rows.Count+1).Value = GK - HK

実際、どうやって使うのかが、良く解っていません。

【30334】Re:最終行の計算、条件付の行のみの計算
質問  琴葉  - 05/10/25(火) 16:15 -

引用なし
パスワード
   ▼Jaka さん:
>▼琴葉 さん:
>>コンボボックスの内容を、現金から当座預金などほかの物でオートフィルターを行い
>>再度集計すると、集計行が1行増えてしまいます。
>>
>>Columns("F").SpecialCells(xlCellTypeVisible)を
>>("F65536").End(xlUp)としてもだめでした。
>>一度入力して削除した行でも保存するまではその位置が最終行になってしまうようで
>>どのように回避したらよろしいでしょうか 何度も申し訳ありません。
>
>>15      現金      700
> を下のようにするんじゃないんですか?
>
>>15      現金   0   700  300
>>16         1300  1000  300

>
>1行挿入するのもなんだと思い、1番下に合計値を書き込みました。
>
>+1して1行あけてみるとか、これだとどうなりますか?
>Range("I1").Offset(.Rows.Count+1).Value = GK - HK
>
>実際、どうやって使うのかが、良く解っていません。

Jakaさんお世話になります。^^
説明不足で申し訳ありません。
教えていただいた記述で上記のようになります。
このあとにほかの科目(当座預金など)でオートフィルターをかけて再度集計すると

15      当座預金      700


15      当座預金   0   700  300
16            0    0  300 
17           1300  1000  300
になってしまいます
さらにもう一回ほかの科目で行うと

15        手形   0   700  300
16            0    0  300 
17            0    0  300 
18           1300  1000  300

となってしまいます。今どこがいけないのか探しています^^

【30340】Re:最終行の計算、条件付の行のみの計算
発言  Jaka  - 05/10/25(火) 16:46 -

引用なし
パスワード
   ▼琴葉 さん:
  略
>となってしまいます。今どこがいけないのか探しています^^
何となく解りました。
これ仕様だかバグだかわかりませんが、オートフィルタ実行前に1度オートフィルタを解除してください。

ActiveSheet.AutoFilterMode = False

【30371】Re:最終行の計算、条件付の行のみの計算
お礼  琴葉  - 05/10/26(水) 9:17 -

引用なし
パスワード
   Jakaさんおはようございます。

  With .Range("F65536").End(xlUp)
    .Offset(1, 1).Value = GK
    .Offset(1, 2).Value = HK
    .Offset(1, 3).Value = GK - HK
  End With

何も追記されない行の最終行取得で、一行増えてしまうのを回避できました

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

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