[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『日付から月をカウントする方法』(トランプ)
こんばんは。みなさんにご指導いただきたいことがあります。
早速ご説明します。
シート1に以下のような表があります。
___A__________B_________C_____D________E・・・
1__2018/4/1___A太郎____200___B助_____210
2__2018/4/3___B子______150___C助_____200
3__2018/4/4___パー子____180___D子_____190
4__2018/4/6___プー太郎___70___A太郎____60
5__2018/5/1___C次郎____110___プー太郎_200
・
・
・
シート1のA列をもとに、以下のようなシート2のB列に月ごとの日数をカウントさせたいと思っています。
A列の日付は、「=DATE(2018/4/1)」というデータです。
B5=SUMPRODUCT((YEAR(シート1!$A:$A)=シート2!A5)*(MONTH(シート1!$A:$A)=シート2!A5))
のように設定してみましたが、うまくカウントできません。
みなさん、ご指導ねがいます。よろしくお願いします。
___A______B
5__4月____4日
6__5月____1日
7__6月
8__7月
9__8月
< 使用 Excel:Excel2016、使用 OS:Windows10 >
=SUMPRODUCT((TEXT(シート1!A$1:A$1000,"yyyym")=TEXT(A5,"yyyym"))*1) SUMPRODUCT関数で列全体を指定するのは処理が重くなる原因となるので避けたほうがいいです。 (bi) 2018/06/14(木) 20:47
シート1のデータから、月ごとの名前の実数をカウントさせたいのです。
この表でいくと、
4月は4人ということになります。A太郎は重複していますので、1とカウントさせたいのですが、このSUMPRODUCT関数で可能でしょうか?
(トランプ) 2018/06/14(木) 21:48
>4月は4人ということになります。 B列だけを見るのか? であれば重複はないことになるし、B列、D列両方見るのであれば7人だろうし、どういう数え方を行えばいいのだろうか? (ねむねむ) 2018/06/15(金) 09:09
ついでに聞いておこう。 もし7人が正しいとした場合、同じ行で同じ人が重複するということはあるのだろうか? (ねむねむ) 2018/06/15(金) 09:28
B列だけを見るのか? であれば重複はないことになるし、B列、D列両方見るのであれば7人だろうし、どういう数え方を行えばいいのだろうか?
ねむねむさんがおっしゃるとおり、どちらの列も見ます。
実際には、もっと複数列あります。
ついでに聞いておこう。 もし7人が正しいとした場合、同じ行で同じ人が重複するということはあるのだろうか?
同じ行で同じ人が重複することはありませんが、
別の月で同じ人はどんどんでます。
よろしくお願いいたします。
(トランプ) 2018/06/15(金) 11:28
Dim dic As Object, dic2 As Object, k As Variant, c As Range, i As Long, j As Long, v As String, w As String Set dic = CreateObject("Scripting.Dictionary") Set dic2 = CreateObject("Scripting.Dictionary") For i = 1 To Sheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Row v = Format(Sheets("Sheet1").Range("A" & i).Value, "yyyy年mm月") dic(v) = dic(v) + 1 j = 2 Do While Sheets("Sheet1").Cells(i, j).Value <> "" w = Format(Sheets("Sheet1").Cells(i, j).Value) dic2(v & w) = True j = j + 2 Loop Next i For Each k In dic dic(k) = dic(k) & "日" Next k Sheets("Sheet2").Cells.Clear Sheets("Sheet2").Range("A1").Resize(dic.Count, 2) = Application.Transpose(Array(dic.keys, dic.items)) For Each c In Sheets("Sheet2").Range("A:A").SpecialCells(2) For Each k In dic2 If InStr(k, Format(c.Value, "yyyy年mm月")) > 0 Then c.Offset(, 2).Value = Val(c.Offset(, 2).Value) + 1 & "人" End If Next k Next c End Sub (mm) 2018/06/15(金) 15:05
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.