Excel VBA質問箱 IV

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

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


19 / 13331 ツリー ←次へ | 前へ→

【80956】vbaの行の取得について 名無しの権兵衛 19/6/25(火) 17:16 質問[未読]

【80961】Re:vbaの行の取得について マナ 19/6/25(火) 22:09 発言[未読]
【80964】Re:vbaの行の取得について 名無しの権兵衛 19/6/26(水) 14:51 お礼[未読]

【80961】Re:vbaの行の取得について
発言  マナ  - 19/6/25(火) 22:09 -

引用なし
パスワード
   ▼名無しの権兵衛 さん:

こんな感じでしょうか。


Function func(集計項目 As Range) As Double
  Dim f As Range
  Dim r As Range
  Dim c As Range
  
  Application.Volatile
  
  With Range(集計項目, 集計項目.End(xlDown))
    Set f = .Find(集計項目.Value, 集計項目, , xlWhole)
    If f.Row = 集計項目.Row Then
       Set r = Range(集計項目.Offset(1), .Cells(.Count))
    Else
      Set r = Range(集計項目.Offset(1), f.Offset(-1))
    End If
  End With
    
  For Each c In r.Offset(, Application.Caller.Column - 集計項目.Column)
    If Not c.HasFormula Then
      func = func + c.Value
    End If
  Next

End Function

でも、func2がよいと思います。

Function func2(集計項目 As Range, データ範囲 As Range, 列番号 As Long) As Double
  Dim f As Range
  Dim r As Range
  Dim c As Range
  
  With データ範囲.Columns(1).Cells
    Set f = .Find(集計項目.Value, 集計項目, , xlWhole)
    If f.Row <= 集計項目.Row Then
       Set r = Range(集計項目.Offset(1), .Cells(.Count))
    Else
      Set r = Range(集計項目.Offset(1), f.Offset(-1))
    End If
  End With
  
  For Each c In r.Columns(列番号).Cells
    If Not c.HasFormula Then
      func2 = func2 + c.Value
    End If
  Next

End Function

【80964】Re:vbaの行の取得について
お礼  名無しの権兵衛  - 19/6/26(水) 14:51 -

引用なし
パスワード
   ありがとうございました。

色々調べたところ、thiscellで実装できました。

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