Function 合計(ar As Range) Dim c As Range Dim k1 As Long Dim k2 As Long k1 = 0 k2 = 0 For Each c In ar d = c.Value d1 = Replace(d, "人", "") d2 = Split(d1, "件/") k1 = k1 + d2(0) k2 = k2 + d2(1) Next c 合計 = CStr(k1) & "件/" & CStr(k2) & "人" End Function
標準モジュールに 上記のソースを記述してください。
"件/"が 区切り
"人"は 最後に くっついているものとし、みな同一とします。
変更する場合は、この記述を変更してください。
"人"は なくても いいですが、結果には つきます。
使い方は
=合計(A1:A3)
というように 合計したいセルの範囲を指定してください。
▽2
●
a-kuma3 ●90ポイント ベストアンサー |
以下のコードを、標準モジュールに書いてください。
Function sum_item_person(ParamArray args() As Variant) Set re = CreateObject("VBScript.RegExp") re.Pattern = "(\d+)件/(\d+)人" re.Global = True item = 0 person = 0 For Each r In args For Each c In r Set remat = re.Execute(c.Value) If remat.Count > 0 Then item = item + remat(0).SubMatches(0) person = person + remat(0).SubMatches(1) end if Next c Next r sum_item_person = CStr(item) & "件/" & CStr(person) & "人" End Function
関数の引数には、セルの範囲を指定します。
指定した範囲で、「(数字)件/(数字)人」となっているセルだけを合計の対象とします。
セル範囲を複数指定することも可能です。
例えば、こんな使い方ができます。
=sum_item_person(A1:B6, D10:F12)
シートのイメージだと、こんな感じです。
A | B | |
---|---|---|
1 | 72件/48人 | |
2 | 25件/12人 | |
3 | 3件/10人 | |
4 | 小計 | =sum_item_person(B1:B3) |
5 | ||
6 | 22件/8人 | |
7 | ||
8 | 34件/7人 | |
9 | ||
10 | 14件/15人 | |
11 | 小計 | =sum_item_person(B6:B10) |
12 | ||
13 | ||
14 | 合計 | =sum_item_person(B4,B11) |