[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『表を参照して別の表に作り変える』(たかし)
時間 1600 1700 1800 1900
係員A E1 E1 E1 E1 D2 D2 D2 D2
係員Aが16時から17時にE1 18時から19時に
D2となるとした場合、
次の表を作成することはできますか?
1600 1700 1800 1900 E1 係員A 係員A D2 係員A 係員A
< 使用 Excel:unknown、使用 OS:Windows7 >
これ、元表が30分刻みっぽいけど
0分〜29分 E1 、 30分〜59分 D2 の場合、どうすんの? (GobGob) 2016/05/20(金) 07:53
1600 1630 1700 1730 1800 1830 1900 1930 E1 係員A 係員A 係員A 係員A D2 係員A 係員A 係員A 係員A
こういう表に変換して欲しいです。
(たかし) 2016/05/20(金) 15:19
A B C D E F G H I 1 時間 1600 1700 1800 1900 2 係員A E1 E1 E1 E1 D2 D2 D2 D2 3 4 1600 1630 1700 1730 1800 1830 1900 1930 5 E1 係員A 係員A 係員A 係員A 6 D2 係員A 係員A 係員A 係員A
B5 =IF($A5=B$2,$A$2,"") 右、下にコピー。 (GobGob) 2016/05/20(金) 15:43
A B C D E F G H I 1 時間 1600 1700 1800 1900 2 係員A E1 E1 E1 E1 D2 D2 D2 D2 3 係員B D2 D2 D2 D2 E1 E1 E1 E1 3 4 1600 1630 1700 1730 1800 1830 1900 1930 5 E1 係員A 係員A 係員A 係員A 係員B 係員B 係員B 係員B 6 D2 係員B 係員B 係員B 係員B 係員A 係員A 係員A 係員A
(たかし) 2016/05/22(日) 12:05
横から失礼します。
絶対に、同じ時間帯に複数の担当が同じステータス(?)になるということはないという前提ですか?
(β) 2016/05/22(日) 14:09
同じ時間帯に複数の人が同じ状態になることは、実際にはないのかもしれません。 でも、あるかもしれません。いずれであっても対応してみました。(ただし、マクロです)
なお、今のようなシートレイアウトだと、3名にしたとき、4名にしたとき、どんどんとまとめあげる 領域が下にずれていきますし、なにより、そのたびに式を変更しなければいけませんね。
なので、元シート(コード内では "Sheet1" にしています)は以下のように 上の部分だけ。 これを別シート(コード内では"Sheet2" にしています)に展開します。 別シートは空白でOKです。(タイトル等もマクロで作成します) 係員は何人でもOKです。また、E1 や D2 といったアクティビティ(ですか?)も、何種類でもOKです。 列も、I列までに限定せず、何列まででもOK。
同じセルに複数の係員がいれば、それらをすべてセル内改行で同じセルにセットします。
|[A] |[B] |[C] |[D] |[E] |[F] |[G] |[H] |[I] [1]|時間 |1600|1630|1700|1730|1800|1830|1900|1930 [2]|係員A|E1 |E1 |E1 |E1 |D2 |D2 |D2 |D2 [3]|係員B|D2 |D2 |D2 |D2 |E1 |E1 |E1 |E1
Sub Test() Dim v As Variant Dim c As Range Dim sv As Variant Dim dic As Object Dim d As String
Set dic = CreateObject("Scripting.Dictionary")
With Sheets("Sheet1").Range("A1").CurrentRegion ReDim v(1 To .Columns.Count * .Columns.Count, 1 To .Columns.Count) sv = .Rows(1).Value For Each c In .Resize(.Rows.Count - 1, .Columns.Count - 1).Offset(1, 1) If Not dic.exists(c.Value) Then dic(c.Value) = dic.Count + 1 d = v(dic(c.Value), c.Column - 1) v(dic(c.Value), c.Column - 1) = d & IIf(d <> "", vbLf, "") & c.EntireRow.Cells(1).Value Next End With
With Sheets("Sheet2") .UsedRange.ClearContents .Range("A1").Resize(, UBound(sv, 2)).Value = sv .Range("A2").Resize(dic.Count).Value = WorksheetFunction.Transpose(dic.keys) .Range("B2").Resize(dic.Count, UBound(v, 2)).Value = v .Select End With
End Sub
(β) 2016/05/22(日) 21:02
> もし係員Bを追加したらどうなりますでしょうか?
本当に二人だけなら
B6 =IF(B$2=$A6,$A$2,IF(B$3=$A6,$A$3,""))
実際はもっと多い(増える可能性がある)のなら バージョンが書いてないけど、2007以降だとして
B6 =IFERROR(INDEX($A$2:$A$3,MATCH($A6,B$2:B$3,0)),"")
サンプル表のレイアウトに合わせた式(実際はもっと範囲を広くしておく)
右・下コピー
同じ時間帯に同じ記号が重複することはないという前提。
参考まで。 (笑) 2016/05/22(日) 21:34
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.