
重複を除いてデータ数をカウントする「関数」を教えてください。よろしくお願いいたします。
単純に全データからカウントするのであれば、sumproduct等を使えばできますが、困っているのは、一部のデータ(晴のみ)から、重複データを除いて(同じ日に複数回稼働していても1とカウント)集計するという点です。
稼働日 天気 管理番号
2月10日 晴 10022
2月20日 晴 31555
2月20日 晴 10022
2月20日 晴 10022
2月20日 晴 10022
2月24日 晴 44200
2月25日 雨 31555
2月25日 雨 10022
【導きたい答え】
「晴れの日」の「管理番号10022」の稼働日数は、「2」日でした。
(4個ではなく、2個(2日)とカウントしたい)
*Excel2016を使用しています。
*実際はもっと多くのデータが対象となります。あくまで例は簡略化したものです。
*ピボットやVBA?ではなく、エクセル関数で求めたいです。
*可能であれば、作業領域でいったん計算して再集計する等ではなく、一度で求められる方法がいいです。
No.3ベストアンサー
- 回答日時:
No.1です。
ユーザー定義関数の方法をと思っていましたが、VBAはダメ!というコトなので・・・
ただ作業用の列は使ってもOKのようなので、一例です。
↓の画像のようにD列を作業用の列としています。
作業列D2セルに
=IF(AND(B2=G$1,C2=G$2),IF(COUNTIFS(A$2:A2,A2,B$2:B2,B2,C$2:C2,C2)=1,1,""),"")
という数式を入れこれ以上データはない!というくらいまで下へフィル&コピー!
結果のG3セルには
=SUM(D:D)
という数式を入れています。m(_ _)m

ありがとうございます。
とてもすっきりとした式で求められるのでびっくりしました。
=IF(AND(B2=G$1,C2=G$2),IF(COUNTIFS(A$2:A2,A2,B$2:B2,B2,C$2:C2,C2)=1,1,""),"")
この式なんですが、IF(COUNTIFS(A$2:A2,A2,B$2:B2,B2,C$2:C2,C2)=1,1,""),"")
の部分って何を計算?しているんでしょうか。
稼働日の情報、天気の情報、管理番号の情報が 1,1,空白 ならば、空白?
No.4
- 回答日時:
No.3です。
>IF(COUNTIFS(A$2:A2,A2,B$2:B2,B2,C$2:C2,C2)=1,1,""),"")
>の部分って何を計算?しているんでしょうか。
説明を少しだけ・・・
前半部分の
>IF(AND(B2=G$1,C2=G$2)
は問題ないですよね。
(画像のB列がG1、C列がG2と一致するものだけを対象としています)
さて、上記のIF関数が「TRUE」の場合ですが
前回アップした画像の配置で
2行目から検索し
A列・B列・C列が重複するデータがある場合、最初に出現する行だけに「1」が表示されるようにしています。
これが質問文の中で一番重要な部分になると思います。
※ どこか使っていない列の2行目に
=COUNTIFS(A$2:A2,A2,B$2:B2,B2,C$2:C2,C2)
という数式を入れ、フィルハンドルで下へコピーしてみてください。
2行目以降、A~C列が重複するデータの出現回数が表示されます。
その中の最初に出現した行だけ(「1」の行だけ)を作業列に表示するようにしています。
あとは単純にプラスすれば質問の回答がそのまま簡単に導き出せます。

No.2
- 回答日時:
添付図参照
D1: =A2&"_"&B2&"_"&C2
E2: =IF(COUNTIF(D$2:D2,D2)>1,"",A2)
F2: =IF(AND(B2=G$3,C2=G$2),E2,"")
F1: =COUNT(F2:F500)

ご回答ありがとうございます。
関数を入れてみたのですが、下記の通り「0」となります。
色がついている箇所(稼働日数や管番、天)というのがよくわかりません。
そこは手入力すべきなのか、自動で返ってくるものなのでしょうか。
Fの列はちゃんと計算式を入れても空白の結果となります。
稼働日 天気 管理番号 稼働日_天気_管理番号 0
2月10日 晴 10022 43141_晴_10022 2月10日
2月20日 晴 31555 43151_晴_31555 2月20日
2月20日 晴 10022 43151_晴_10022 2月20日
2月20日 晴 10022 43151_晴_10022
2月20日 晴 10022 43151_晴_10022
2月24日 晴 44200 43155_晴_44200 2月24日
2月25日 雨 31555 43156_雨_31555 2月25日
2月25日 雨 10022 43156_雨_10022 2月25日
No.1
- 回答日時:
こんばんは!
関数で作業列なしで!となると結構厄介だと思います。
手っ取り早くVBAでの一例です。
↓の画像のような配置になっていて、
F1・F2セルに各条件を入力した時点でマクロが実行されるようにしてみました。
シートモジュールにしてください。
Private Sub Worksheet_Change(ByVal Target As Range) '//この行から//
If Intersect(Target, Range("F1:F2")) Is Nothing Or Target.Count > 1 Then Exit Sub
Dim myDic As Object
Dim i As Long, lastRow As Long, cnt As Long
Dim myStr As String
Dim myR
If WorksheetFunction.CountBlank(Range("F1:F2")) = 0 Then
Set myDic = CreateObject("Scripting.Dictionary")
lastRow = Cells(Rows.Count, "A").End(xlUp).Row
myR = Range(Cells(2, "A"), Cells(lastRow, "C"))
For i = 1 To UBound(myR, 1)
If myR(i, 2) = Range("F1") And myR(i, 3) = Range("F2") Then
myStr = myR(i, 1) & "_" & myR(i, 2) & "_" & myR(i, 3)
If Not myDic.exists(myStr) Then
myDic.Add myStr, ""
cnt = cnt + 1
End If
End If
Next i
Range("F3") = cnt
Set myDic = Nothing
Else
Range("F3").ClearContents
End If
End Sub '//この行まで//
※ A~C列の変更ではマクロは動きません。
F1またはF2セルのデータが変わった時点でマクロが実行されます。m(_ _)m

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【関数】3つのセルの中で最新...
-
【マクロ】数式を入力したい。...
-
【マクロ】変数に入れるコード...
-
エクセルの関数について
-
【マクロ】excelファイルを開く...
-
エクセルのリストについて
-
【マクロ】実行時エラー '424':...
-
【マクロ】左のブックと右のブ...
-
Office2021のエクセルで米国株...
-
【マクロ】元データと同じお客...
-
エクセルのVBAで集計をしたい
-
【マクロ】【相談】Excelブック...
-
vba テキストボックスとリフト...
-
【マクロ】【配列】3つのシー...
-
他のシートの検索
-
【画像あり】オートフィルター...
-
エクセルシートの見出しの文字...
-
LibreOffice Clalc(またはエク...
-
【関数】=EXACT(a1,b1) a1とb1...
-
Dir関数のDo Whileステートメン...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【マクロ】元データと同じお客...
-
エクセルの関数について
-
【画像あり】オートフィルター...
-
エクセルのVBAで集計をしたい
-
エクセルのリストについて
-
【マクロ】数式を入力したい。...
-
【マクロ】【相談】Excelブック...
-
Office2021のエクセルで米国株...
-
【マクロ】実行時エラー '424':...
-
他のシートの検索
-
エクセルの複雑なシフト表から...
-
【マクロ】【配列】3つのシー...
-
vba テキストボックスとリフト...
-
【マクロ】左のブックと右のブ...
-
【マクロ】変数に入れるコード...
-
エクセルシートの見出しの文字...
-
【マクロ】別ファイルへマクロ...
-
【関数】同じ関数なのに、エラ...
-
Amazonでマイクロソフトオフィ...
-
ページが変なふうに切れる
おすすめ情報
「作業領域でいったん計算して再集計する等ではなく、一度で求められる方法希望」と書きましたが、無理そうであれば、いったん「作業領域」で計算する方法でもかまいません。
改めてピボットやVBAは対象外でお願いします。
出来ました!
すみません、いろいろ試していたら、2になりました!
入力項目だったんですね。
ありがとうございます。