人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

《特定のキーワードを含む文字列から数字の部分だけを抽出し、その数値を合計後、任意のセルに反映させる関数もしくはマクロ》

表題の件で質問があります。
今、添付の図のようにデータが並んでおります。

このデータの中から、【P】を含むセル内を検索し、さらにハイフン(-)の後ろについている数字を抽出し、合計します。
そして合計した値を、そのセルがあった列の任意のセルに出す。
図の場合ですとB16ですね。
次の列の場合はC16といったように。
そのような処理を関数もしくはマクロで可能でしたら、お教えいただきたい次第です。
よろしくお願いします。

1366691507
●拡大する

●質問者: moon-fondu
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● Mook
●200ポイント ベストアンサー

こんな感じのことでしょうか。

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】")

moon-fonduさんのコメント
ありがとうございます、うまくいきました!

2 ● きゃづみぃ
●100ポイント

標準モジュールに以下のソースを貼りつけてください。

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】-を含む文字列がある数値を加算します。


moon-fonduさんのコメント
ありがとうございます、でも100行以上ある場合、なぜか数値の合計が合わなかったんですよね(>_<)

きゃづみぃさんのコメント
えー 合わないんですか。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ