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

質問です
エクセルで文字が混じった数字の小計と合計を出す
関数かまたはマクロをお願いします

100件/50人
50件/25人
小計 150件/75人

100件/50人
50件/25人
小計 150件/75人

合計 300件/150人

1371175032
●拡大する

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

▽最新の回答へ

1 ● きゃづみぃ
●10ポイント

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)
というように 合計したいセルの範囲を指定してください。


きゃづみぃさんのコメント
小計の場合は、そのままでいいですが 総合計の場合は、全部指定して、半分にすればいいでしょう。

きゃづみぃさんのコメント
って 簡単に 半分には できませんね。

きゃづみぃさんのコメント
>|vb| 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 / 2) & "件/" & CStr(k2 / 2) & "人" End Function ||< 総合計の場合は、上記を使ってください。 半分にするだけですが。

inosisiさんのコメント
ありがとうございます。 添付してあるのがサンプルデータです。 質問に書いてあるデータでは説明が不十分でした。 申し訳ございません。

きゃづみぃさんのコメント
添付したものでも 大丈夫だと思いますよ。

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)

シートのイメージだと、こんな感じです。

 AB
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)

inosisiさんのコメント
ありがとうございました。 うまくいきました。 大変助かりました。

inosisiさんのコメント
1,000件/1,000人 とカンマで区切られていた場合も集計できるよう 変更するにはどうしたらよいか教えてください。 よろしくお願いします

a-kuma3さんのコメント
足し算するところも変えなきゃダメかな、と思ったんですが、パターンを変えるだけで計算できそうです。 >|vb| re.Pattern = "(\d+)件/(\d+)人" ||< のところを、このように変えてください。 >|vb| re.Pattern = "([\d,]+)件/([\d,]+)人" ||<

inosisiさんのコメント
早速ありがとうございました。 上手くいきました。助かりました。
関連質問

●質問をもっと探す●



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