[[20180614201910]] 『日付から月をカウントする方法』(トランプ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『日付から月をカウントする方法』(トランプ)

こんばんは。みなさんにご指導いただきたいことがあります。
早速ご説明します。

シート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


Sub main()
    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

mmさん、ありがとうございます。
コードの意味を一つ一つ調べております。
やはり、関数でカウントするのは無理なのでしょうか?
(トランプ) 2018/06/15(金) 20:57

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.