- ベストアンサー
マトリクス表計画データから日付参照する方法
- Excelのマトリクス表計画データから、特定の日付を参照する方法について教えてください。
- マトリクス表計画データの中には、日付やアイテム名などの情報があります。
- そのデータから、特定のシリアル番号に対応する日付を取得する方法を早く教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
質問の意図は分かったつもりですが、 (1)serialシートにアイテムごとに集計する作業 (2)serial1シートに各アイテムを展開する作業 この2つは避けたい作業です。 (1)は関数でできるのでいいとして、 (2)を考えましたが、質問に例示のある、「4」を4行に分ける必要があるとすると、関数では考えたくありません。多分できないと思います。「数値はmax100くらいまで」とあるので、なおさらです。個人的にはこの作業が一番大変に思えました。で、マクロで対応しました。 シートは、「work」と「serial1」で、「serial」は使っていません。「work」の日付は日付属性としています。月により日数が違いますが、あまり影響はないでしょう。 また、アイテム数が分からないので、「itemNum=」に数値をセットしてください。自動認識もできますが、あえて入力としています。多目で構いません。 マクロは質問の内容を順に書いただけです。久しぶりに分かりやすい質問でした。(勘違いしてる?)当方、Win10、Excel2010です。 Sub setPlan() Const itemNum = 1000 '// workシートの行数(アイテム数) Dim rw As Integer '// workシートの行カウンタ Dim col As Integer '// workシートの列カウンタ Dim rwWrite As Long '// serial1シートの行カウンタ Dim nDay As Integer '// 各日のアイテム数 Dim n As Integer '// 各日のアイテム数カウンタ Dim nMonth As Integer '// 同一月のアイテム数カウンタ Dim startDay As Date '// 最初の日付(H3) Dim item As String '// アイテム名 With Worksheets("work").Range("H3") startDay = .Offset(-2, 0).Value For rw = 1 To itemNum nMonth = 0 item = .Offset(rw - 1, -6) For col = 1 To 31 nDay = .Cells(rw, col) If nDay <> 0 Then With Worksheets("serial1") For n = 1 To nDay '// 分解 nMonth = nMonth + 1 rwWrite = rwWrite + 1 .Cells(rwWrite, 1) = item .Cells(rwWrite, 2) = nMonth .Cells(rwWrite, 3) = startDay + col - 1 Next End With End If Next Next End With End Sub
その他の回答 (2)
- kkkkkm
- ベストアンサー率66% (1719/2589)
アイテム2が12あるのがわからないのですが3でよければ C1に =IFERROR(INDEX(work!$H$1:$AL$4,1,MATCH(LARGE((INDIRECT("work!$H$"& MATCH(A1,work!B:B,0) & ":$AL$" & MATCH(A1,work!B:B,0))<>"")*1/COLUMN($H$2:$AL$2),ROWS(INDIRECT("$A$1:$A" & COUNTIF($A$1:A1,A1)))),1/COLUMN($H$2:$AL$2),0)),"") で配列数式にして下方向にコピーしてください。 Shift+CtrlでEnter 参考にしたサイト https://nyanto.jimdo.com/エクセル関数-問題解決/条件に合うデータ全ての抽出方法1/条件合うデータ抽出2/
お礼
回答ありがとうございます。 参考にしたサイトを見て勉強します。(^^)/
補足
アイテム2が12あるのがわからないのですが → アイテム2は、日付12/5が4、日付12/12が4、日付12/19が4の様に数値が入っている。 4+4+4=12 です
- imogasi
- ベストアンサー率27% (4737/17069)
この説明では、課題がよくわからない。 簡単なシートでデータ例を作って、質問に張り付けては。 マトリックスといった、難しい言葉を使っても意味の理解の足しにならない。 普通のエクセルのシートデータは、マトリックスと言えなくもないだろう。 業界・勤務会社の慣用用語か? >serial1シートでC列にworkシート これもシート名=serial1、シート名=workとした方が明確。 コンピュター用語でserialやworkという言葉を使うので、かえって紛らわしい。 マトリックスも本来は数学用語で固有の意味があるのが邪魔をする。 ーー まあこの質問説明でも、わかってくれて、回答は出るかもしれないが。 それで良しとするか。
補足
この説明では、課題がよくわからない → 下記がやりたい内容です。 serial1シートでC列にworkシートで対応する日付をもってきたい 最後にもう一度 workシートのマトリクスデータから、serial1シートへシリアル番号に対しての日付データを早く持ってこられる計算式orマクロを教えていただきたく。 と表現しています。 簡単なシートでデータ例を作って、質問に張り付けては。 → これは、そう思いましたが、それに相当する例をあげて説明したつもりです。 最終形の構成はありませんでしたが。 マトリックスといった、難しい言葉を使っても意味の理解の足しにならない → マトリクスは、別に難しい言葉ではないと思います。一般用語です。
お礼
ありがとうございます。 ばっちりでした。 処理速度も速く助かりました。
補足
(1)serialシートにアイテムごとに集計する作業 (2)serial1シートに各アイテムを展開する作業 → そうなんです (1)はたいしたことないですが、 (2)は苦労しました。マクロで対応しました。