[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『実数を算出したい』(石川)
実数の出し方について教えてください。
以下のようにSheet1、Sheet2があります。
Sheet1は実際には以下の列があります。
いずれも4行目から値が入っています。
FY・FZ
GI・GJ
GS・GT
HC・HD
HM・HN
HW・HX
IG・IH
IQ・IR
JA・JB
JK・JL
Sheet1
A・・・・・FY FZ 4 2017/4/5 鈴木一郎 I県 5 2017/4/26 大谷正平 T県 6 2017/5/5 山田花子 G県 7 2017/5/20 大谷正平 T県 8 2017/6/4 鈴木一郎 I県 9 2017/6/29 金田正和 О県 ・ ・ ・
Sheet1のA列と上記の列を参照させて、月ごとの実数を出したいと思っています。
以下のB列には、4月であれば、実際には「2017/4/1」というデータが入っています。その形で3月まであります。
5行目の県名は値が入っています。
この月と県名をSheet1から参照させて、以下のように実数(延べではなく)を出したいのです。例えば、4月の中で、「鈴木一郎 I県」は何度か出てきますが、これを延べ数ではなく、実数で出したいと考えています。
Sheet1のA列の日付は、実際には各月ごと20日以上あります。
Sheet2
B C D E F 5 I県 T県 G県 О県 6 4月 1 1 0 0 7 5月 0 1 1 0 8 6月 1 0 0 1 ・ ・ ・ 分かりにくい説明ですみません。前回も私の説明不足でご迷惑をおかけしました。今回は、できるだけ詳しく書いたつもりです。 どうぞよろしくお願いします。
それから、Sheet1のA列から月ごとの件数を求めたいです。
4月は何件、5月は何件・・・
以上、どうぞよろしくお願いします。
< 使用 Excel:Excel2013、使用 OS:Windows8 >
>Sheet1のA列の日付は、実際には各月ごと20日以上あります。
やたら横に長い表ですけど、Sheet1は最終的に何行ぐらいになるんですか? 「県」は何種類あるんですか? 47?
Sheet1に作業列を使ってもよければ
■Sheet1 どの列が空いているのかわかりませんが、GA列を作業列とします。
GA4 =IF(A4="","",IF(SUMPRODUCT((MONTH($A$4:A4)=MONTH(A4))*($FY$4:FY4=FY4)*($FZ$4:FZ4=FZ4))=1,MONTH(A4),""))
下へコピー
■Sheet2 Sheet1は500行で収まるものとして
C6 =COUNTIFS(Sheet1!$FZ$4:$FZ$500,C$5,Sheet1!$GA$4:$GA$500,MONTH($B6))
右と下へコピー
>それから、Sheet1のA列から月ごとの件数を求めたいです。
これはA列だけを見ればいいってことですか? それをSheet2のどこに出すんですか?
参考まで (笑) 2017/10/31(火) 23:08
Sub main() Dim dic As Object, r As Range, c As Range, d As Range, k As Variant Set dic = CreateObject("scripting.dictionary") Sheets("Sheet2").Cells.ClearContents For Each k In Array("FY:FY", "GI:GI", "GS:GS", "HC:HC", "HM:HM", "HW:HW", "IG:IG", "IQ:IQ", "JA:JA", "JK:JK") If WorksheetFunction.CountA(Sheets("Sheet1").Range(k)) Then For Each c In Sheets("Sheet1").Range(k).SpecialCells(xlCellTypeConstants) With Sheets("Sheet2") For Each d In c Set r = .Rows(1).Find(d.Offset(, 1).Value) If r Is Nothing Then .Cells(1, Columns.Count).End(xlToLeft).Offset(, 1).Value = d.Offset(, 1).Value If dic(Month(d.EntireRow.Cells(1).Value) & vbLf & d.Value & vbLf & d.Offset(, 1).Value) = False Then .Cells(Month(d.EntireRow.Cells(1).Value), .Rows(1).Find(d.Offset(, 1).Value).Column).Value = _ Val(.Cells(Month(d.EntireRow.Cells(1).Value), .Rows(1).Find(d.Offset(, 1).Value).Column).Value) + 1 .Cells(Month(d.EntireRow.Cells(1).Value), 1) = Month(d.EntireRow.Cells(1).Value) & "月" dic(Month(d.EntireRow.Cells(1).Value) & vbLf & d.Value & vbLf & d.Offset(, 1).Value) = True End If Next d End With Next c End If Next k End Sub (mm) 2017/11/01(水) 10:44
GI・GJ以下の列にも「名前」と「県名」が入ってるってことですか? 質問と何の関係があるのかと思ってました。
関数の回答はスキップしてください。 すみません。 (笑) 2017/11/01(水) 12:42
笑さんへの回答
>やたら横に長い表ですけど、Sheet1は最終的に何行ぐらいになるんですか? 「県」は何種類あるんですか? 47?
Shee1は単純に365日×10年と考えていました(実際には土日や祝日等が入ります)
県名は8種類しかありません
>これはA列だけを見ればいいってことですか? それをSheet2のどこに出すんですか?
4月が何日ということでA列だけみて出したいです
これをSheet2のC6,C8,C10,C12,C14,C16,C18,C20,C22,C24,C26,C28です
最初に説明させていただいたC列に1列挿入してこの列をつくりたいと考えています
Sheet2
B C D E F G 5 I県 T県 G県 О県 6 4月 25 1 1 0 0 7 5月 24 0 1 1 0 8 6月 26 1 0 0 1 ・ ・ ・
mmさんへの質問
これはマクロでだすということですね
10列の列番号が入っているなというぐらいでよく理解できずすいません
ありがとうございます
???さんへの質問
COUNTIFSを10個つかう場合、累計になりませんか
実数を出す場合もこの関数でやれるでしょうか
10列の中に、例えば4月の方で名前と県名が同じ方は何回出てこようと1としかカウントしないようにしたいのです
皆さん、どうも有難うございます
(石川) 2017/11/02(木) 07:16
マクロのほうが簡単にできそうですが、その場合は、まずご自身でmmさんが作って下さったコードを手がかりに、考えてみてください。 マクロを組んだことが無いから誰か作って…、ではなく、今回作るために調べるのです。コーディングとは、時間のかかる作業なのだ、ということをもっと実感してください。
そして、この集計も、2列*10に分けずに2列(日付も入れると3列)にまとまってさえいれば、DB扱いすればかなり楽に求められそう。元の表のレイアウトが悪いと思います。 しかし、現状のシートはレイアウトを変えられないだろうから、必要な情報だけ別のシートに転記とレイアウト変更をしてから、そっちを元に集計をかけるのも良さそう。
(???) 2017/11/02(木) 09:33
(γ) 2017/11/03(金) 09:07
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.