プロが教えるわが家の防犯対策術!

画像左のようなシフト表を使っています。

左の表を参照して、画像右上のように、「休み」の日だけを抽出して表示できたら楽でいいのですが、うまくできません。

1つの数式で解決できなくてもいいのです。
たとえば赤字部分のような作業列を作って抽出できれば、別で「・」を追加するのは出来るので。

現在は手作業で休みを羅列していますが、人数が多く、ミスもあり、時間もかかるので簡略化できれば助かります。
よろしくお願いします。

「【エクセル】条件に合う複数のセルの内容を」の質問画像

質問者からの補足コメント

  • IF関数で「休み」を日にちで出し、TEXT関数で羅列させることはできました(①~③)。
    ④の、区切りを入れる方法が分かる方お願いします!

    「【エクセル】条件に合う複数のセルの内容を」の補足画像1
      補足日時:2017/01/30 13:48

A 回答 (6件)

今さらですが、「1日4日」→「1日・4日」に変換する数式です。



【G9セル】=SUBSTITUTE(TRIM(SUBSTITUTE(G3,"日","日 "))," ","・")
    • good
    • 1

こんにちは!



一気に表示する方法にしてみました。
VBAになりますが一例です。
↓の画像のように元データはSheet1にあり、Sheet2に表示するとします。
尚、Sheet1のA列はシリアル値ではなく、文字列だという前提です。

標準モジュールにしてください。

Sub Sample1() 'この行から//
Dim i As Long, k As Long, lastRow As Long
Dim myStr As String, c As Range, wS As Worksheet
Set wS = Worksheets("Sheet2")
lastRow = wS.Cells(Rows.Count, "A").End(xlUp).Row
If lastRow > 1 Then
Range(wS.Cells(2, "B"), wS.Cells(lastRow, "B")).ClearContents
End If
With Worksheets("Sheet1")
For i = 2 To wS.Cells(Rows.Count, "A").End(xlUp).Row
Set c = .Rows(2).Find(what:=wS.Cells(i, "A"), LookIn:=xlValues, lookat:=xlWhole)
For k = 3 To .Cells(Rows.Count, "A").End(xlUp).Row
If .Cells(k, c.Column) = "休み" Then
myStr = myStr & .Cells(k, "A") & "・"
End If
Next k
If myStr <> "" Then
wS.Cells(i, "B") = Left(myStr, Len(myStr) - 1)
End If
myStr = ""
Next i
wS.Columns.AutoFit
End With
End Sub 'この行まで//

※ 関数でないのでデータ変更があるたびにマクロを実行する必要があります。m(_ _)m
「【エクセル】条件に合う複数のセルの内容を」の回答画像5
    • good
    • 0

G4: =IFERROR(SMALL(IF(OFFSET($A$1,2,MATCH($F4,$2:$2,0)-1,31,)="休",ROW(A$1:A$31),""),COLUMN(A1)),"")


【お断り】上式は必ず配列数式として入力のこと
「【エクセル】条件に合う複数のセルの内容を」の回答画像4
    • good
    • 0

No.2 の追補



・「115」ではなく「114」ですね。(頭の「・」の分を引かないといけませんでした。まぁ「114」以上なら何でもいいんですけどね)
・ MID関数は、頭についてしまう「・」を消すために使っています。
    • good
    • 0

こんなのはいかがですか?


① K3セルに「=IF(B3="休み","・" & $A3,"")」を入力
② それをL3セルとM3セルにコピーする。
④ K4セルに「=IF(B4="休み",K3 & "・" & $A4,K3)」を入力
⑤ それをL4セルからM33セルまでにコピーする。
⑥ K列からM列を非表示にする。
⑦ G4セルに「=MID(K33,2,115)」を入力
⑧ G5セルに「=MID(L33,2,115)」を入力
⑨ G6セルに「=MID(M33,2,115)」を入力

※ ちなみに⑦~⑨の「115」は全部休みになった場合の文字数です。
    • good
    • 0

補足の方なら、②のIF関数のところで、単に日にちを表示させるのではなく、


該当する場合で更にそれが1回目の休みであれば日付を表示、2回目以降であれば・と日付を上のセルに追加する。
該当しない場合は上のセルをそのまま表示する。とすれば、月末の表示がそのまま求めるものになります。
(1日のみ上のセルが埋まっているので、今のままにします)

最初にあるAさんの例では、
1=該当しないので空白
2~3=該当しないので上のセルと同じ=空白
4=該当して更に1回目なので4日と表示
5=該当しないのでそのまま4日と表示
6=該当して2回目以降なので・6日を追加し、4日・6日と表示
7~12=該当しないのでそのまま4日・6日と表示
13=該当して2回目以降なので・13日を追加し、4日・6日・13日と表示
14~20=該当しないのでそのまま4日・6日・13日と表示
21=該当して2回目以降なので・21日を追加し、4日・6日・13日・21日と表示
22~31?=該当しないのでそのまま4日・6日・13日・21日と表示

といった具合になりますね。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!