[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『表を参照して別の表に作り変える』(たかし)
時間 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.