Excel VBA質問箱 IV

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

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


23 / 13057 ツリー ←次へ | 前へ→

【79421】Findステートメントからsumで合計金額をだす。 ノンボ 17/10/17(火) 20:36 質問[未読]
【79422】Re:Findステートメントからsumで合計金額を... マナ 17/10/17(火) 22:58 発言[未読]
【79426】Re:Findステートメントからsumで合計金額を... ノンボ 17/10/18(水) 20:45 お礼[未読]
【79423】Re:Findステートメントからsumで合計金額を... まっつわん 17/10/18(水) 13:55 回答[未読]
【79425】Re:Findステートメントからsumで合計金額を... ノンボ 17/10/18(水) 20:22 お礼[未読]

【79421】Findステートメントからsumで合計金額を...
質問  ノンボ E-MAIL  - 17/10/17(火) 20:36 -

引用なし
パスワード
    はじめまして、VBA初心者です。
 worksheetに複数の店舗データーがあり、店舗(A列)ごとに品目(B列)と金額(C列)があります。店舗ごとに金額の合計をだすため下記コードをかきました。
 sub Test()
  dim rng as range
  set rng=cells.find(what:="A店",lookin:=xlValues, lookat:=xlWhole)
  if not rng is nothing then
   with rng.cells(3,3)
   .End(xlDown).offset(1,0)= _
   "=sum(" & range(.address, .End(xlDown)).address(False,False) & ")"
  End With
  End if
End sub
複数行データーがある場合は問題なく合計金額がでますが、データーが1行だけの場合、
エラーになります。xlUPなどいろいろためしてみましたが、うまくいきません。どのようにコードをなおしたらいいか、ご教授ください。よろしくお願いします。

【79422】Re:Findステートメントからsumで合計金額...
発言  マナ  - 17/10/17(火) 22:58 -

引用なし
パスワード
   ▼ノンボ さん:

>   with rng.cells(3,3)

このセルの一つ下が空白かどうかで場合分けしてはどうでしょうか。

【79423】Re:Findステートメントからsumで合計金額...
回答  まっつわん  - 17/10/18(水) 13:55 -

引用なし
パスワード
   この例題でEndプロパティでセル範囲を特定するのは難しいのではないでしょうか?
ついでに検索を繰り返すのも煩雑でしょう。

今回の場合はジャンプ機能でセル範囲を検索する方法が良いと思います。

Sub test()
  Dim Rng As Range
  Dim a As Range
  
  On Error Resume Next
  With ActiveSheet.UsedRange
    Set Rng = .Columns(3).SpecialCells(xlCellTypeConstants)
  End With
  On Error GoTo 0
  If Rng Is Nothing Then Exit Sub
  
  For Each a In Rng.Areas
    With a
      .Cells(1).Offset(.Rows.Count).Value = WorksheetFunction.Sum(.Cells)
    End With
  Next
End Sub

また、標準機能で小計行は挿入できますが、
そちらを使わないのはなぜでしょうか?

【79425】Re:Findステートメントからsumで合計金額...
お礼  ノンボ E-MAIL  - 17/10/18(水) 20:22 -

引用なし
パスワード
   ▼まっつわん さん:
>この例題でEndプロパティでセル範囲を特定するのは難しいのではないでしょうか?
>ついでに検索を繰り返すのも煩雑でしょう。
>
>今回の場合はジャンプ機能でセル範囲を検索する方法が良いと思います。
>
>Sub test()
>  Dim Rng As Range
>  Dim a As Range
>  
>  On Error Resume Next
>  With ActiveSheet.UsedRange
>    Set Rng = .Columns(3).SpecialCells(xlCellTypeConstants)
>  End With
>  On Error GoTo 0
>  If Rng Is Nothing Then Exit Sub
>  
>  For Each a In Rng.Areas
>    With a
>      .Cells(1).Offset(.Rows.Count).Value = WorksheetFunction.Sum(.Cells)
>    End With
>  Next
>End Sub
>
>また、標準機能で小計行は挿入できますが、
>そちらを使わないのはなぜでしょうか?
ご返答いただきまして、ありがとうございます。編集しまして、作成してみます。
大変ありがとうございました。

【79426】Re:Findステートメントからsumで合計金額...
お礼  ノンボ E-MAIL  - 17/10/18(水) 20:45 -

引用なし
パスワード
   ご返答いただきまして、ありがとうございます。参考にさせていただきます。
大変ありがとうございました。

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