• ベストアンサー

複数のセルの文字を1つのセルにまとめたい

エクセル2010業務日誌を作成してます。 。 添付した画像のように、A2~A9に記載した文字をそれぞれカンマで区切ってB1にまとめたいと思います。(同じ文字は重複しないで) また、スタッフは他にももやいちごもいて、A2~A9にももやいちごがない時には 休日としてC1に「もも,いちご・・・」とまとめたい思ってます。 ご教授いただけたらと思います。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • bunjii
  • ベストアンサー率43% (3589/8249)
回答No.2

作業用のセルが必要になります。 A列に入力されるメンバーのリストをD列の2行目以下に予め入力します。 D1セルに以下の式を入力します。(A2からA9に入力されたメンバーの抽出のため) =IF(COUNTIF(A2:A9,"="&D2),D2,"")&IF(COUNTIF(A2:A9,"="&D3),","&D3,"")&IF(COUNTIF(A2:A9,"="&D4),","&D4,"")&IF(COUNTIF(A2:A9,"="&D5),","&D5,"")&IF(COUNTIF(A2:A9,"="&D6),","&D6,"")&IF(COUNTIF(A2:A9,"="&D7),","&D7,"")&IF(COUNTIF(A2:A9,"="&D8),","&D8,"") E1セルに以下の式を入力します。(A2からA9へ入力が無いメンバーの抽出のため) =IF(COUNTIF(A2:A9,"="&D2),"",D2)&IF(COUNTIF(A2:A9,"="&D3),"",","&D3)&IF(COUNTIF(A2:A9,"="&D4),"",","&D4)&IF(COUNTIF(A2:A9,"="&D5),"",","&D5)&IF(COUNTIF(A2:A9,"="&D6),"",","&D6)&IF(COUNTIF(A2:A9,"="&D7),"",","&D7)&IF(COUNTIF(A2:A9,"="&D8),"",","&D8) B1セルに以下の式を入力します。(D1セルのデータから先頭の”,”を削除するため) =IF(LEFT(D1,1)=",",MID(D1,2,LEN(D1)-1),D1) C1セルに以下の式を入力します。(E1セルのデータから先頭の”,”を削除するため) =IF(LEFT(E1,1)=",",MID(E1,2,LEN(E1)-1),E1) 以上で目的に合う処理ができるはずです。

mitcho10
質問者

お礼

ありがとうございます。業務日誌作れました。

その他の回答 (2)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

こんにちは! 関数での方法はすでにでていますので、VBAでの一例です。 >また、スタッフは他にももやいちごもいて、A2~A9にももやいちごがない時には >休日としてC1に「もも,いちご・・・」とまとめたい思ってます の部分がよく理解できないので、前半部分のみ(B1セルに表示)だけにしています。 画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面に ↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub Sample1() 'この行から Dim i As Long, buf As String For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row If InStr(buf, Cells(i, "A")) = 0 Then buf = buf & Cells(i, "A") & "," End If Next i Range("B1") = Left(buf, Len(buf) - 1) End Sub 'この行まで ※ 関数でないのでデータ変更があるたびにマクロを実行する必要があります。m(_ _)m

mitcho10
質問者

お礼

ありがとうございます。わかりにくい表現ですみませんでした。マクロも勉強したいと思ってるところだったので、大変参考になりました。

mitcho10
質問者

補足

分かり難い表現ですみませんでした。 現在業務日誌を作っています。例えが悪かったですが、果物が人の名前と考えて頂ければと思います。(15人程スタッフがいます) 勤務時間が、Aさんが10時から11時と13時から15時と17時から18時 Bさんが別のところで10時から12時 13時から14時 というように1日に数時間を何回かする事から、全員が仕事をした一覧を記載すると、同じ名前が何回か出てきます。 AさんBさん・・・を今日の出勤者として、一つのシフトに羅列させたいと思ったのですが、同じ名前が1回きり出る事ができれば・・・ということと、休みの人をC1に羅列したいとおもいました。 余計分かり難くなったらすみません。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.1

作業列を作って対応します。 C1セルは空白のままでD1セルには次の式を入力して右横方向(K1セルよりも右の列までも)にドラッグコピーします。 =IF(COLUMN(A1)>COUNTA($A$2:$A$100),"",IF(COLUMN(A1)=1,INDEX($A$2:$A$100,COLUMN(A1)),IF(COUNTIF($C1:C1,"*"&INDEX($A$2:$A$100,COLUMN(A1))&"*")=0,C1&","&INDEX($A$2:$A$100,COLUMN(A1)),C1))) 答えはB1セルに表示させるとしてB1セルには次の式を入力します。 =INDEX(D1:X1,COUNTIF(D1:X1,"*?")) なお、B列の幅は十分に広げてください。

mitcho10
質問者

お礼

ありがとうございます。勉強になりました。

関連するQ&A