[[20160520022307]] 『表を参照して別の表に作り変える』(たかし) ページの最後に飛ぶ

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

 

『表を参照して別の表に作り変える』(たかし)

時間   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

返信ありがとうございます。
もし係員Bを追加したらどうなりますでしょうか?
ご教授お願いします。

	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.