表題の件で質問があります。
今、添付の図のようにデータが並んでおります。
このデータの中から、【P】を含むセル内を検索し、さらにハイフン(-)の後ろについている数字を抽出し、合計します。
そして合計した値を、そのセルがあった列の任意のセルに出す。
図の場合ですとB16ですね。
次の列の場合はC16といったように。
そのような処理を関数もしくはマクロで可能でしたら、お教えいただきたい次第です。
よろしくお願いします。
こんな感じのことでしょうか。
Option Explicit '//-------------------------------------------- Sub MainSample() '//-------------------------------------------- Range("B16").Value = StrSumIf(Range("B1:B15"), "【P】") Range("C16").Value = StrSumIf(Range("C1:C15"), "【P】") End Sub '//-------------------------------------------- Function StrSumIf(範囲 As Range, 文字列 As String) '//-------------------------------------------- StrSumIf = 0 Dim セル As Range Dim 分割結果 For Each セル In 範囲 If InStr(セル.Value, 文字列) Then 分割結果 = Split(セル.Value, "-") If UBound(分割結果) = 1 Then If IsNumeric(分割結果(1)) Then StrSumIf = StrSumIf + CDbl(分割結果(1)) End If End If Next End Function
コードを標準モジュールにおけば、B16 に直接下記のように書いても使えます。
=StrSumIf(B1:B15, "【P】")
こんな感じのことでしょうか。
Option Explicit '//-------------------------------------------- Sub MainSample() '//-------------------------------------------- Range("B16").Value = StrSumIf(Range("B1:B15"), "【P】") Range("C16").Value = StrSumIf(Range("C1:C15"), "【P】") End Sub '//-------------------------------------------- Function StrSumIf(範囲 As Range, 文字列 As String) '//-------------------------------------------- StrSumIf = 0 Dim セル As Range Dim 分割結果 For Each セル In 範囲 If InStr(セル.Value, 文字列) Then 分割結果 = Split(セル.Value, "-") If UBound(分割結果) = 1 Then If IsNumeric(分割結果(1)) Then StrSumIf = StrSumIf + CDbl(分割結果(1)) End If End If Next End Function
コードを標準モジュールにおけば、B16 に直接下記のように書いても使えます。
=StrSumIf(B1:B15, "【P】")
ありがとうございます、うまくいきました!
標準モジュールに以下のソースを貼りつけてください。
Function keykazan(ar As Range, st As String) Dim c As Range Dim kekka As Long kekka = 0 For Each c In ar d = c.Value If InStr(d, st) > 0 Then kekka = kekka + 数値取得(c) End If Next c keykazan = kekka End Function Function 数値取得(r As Range) Dim myStr As String Dim myN As String Dim i As Long For i = 1 To Len(r.Value) myStr = Mid(r.Value, i, 1) If myStr Like "[0-9]" Then myN = myN & myStr End If Next i If IsNumeric(myN) Then 数値取得 = myN * 1 Else 数値取得 = "" End If End Function
使い方
セルに
=keykazan(B1:B15,"【P】-")
と入れれば、B1からB15の間で 【P】-を含む文字列がある数値を加算します。
ありがとうございます、でも100行以上ある場合、なぜか数値の合計が合わなかったんですよね(>_<)
えー 合わないんですか。
ありがとうございます、うまくいきました!
2013/04/25 09:15:38