こんにちは!
表のレイアウトを変えてはダメな場合、VBAになってしまいますが、
一例です。
アップされている画像の配置通りだとして・・・
画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面に
↓のコードをコピー&ペースト → Excel画面に戻りマクロを実行してみてください。
(Alt+F8キー → マクロ → マクロ実行です)
Sub Sample1() 'この行から
Dim i As Long, j As Long, endRow As Long, endCol As Long, k As Long, myArray
endRow = Cells(Rows.Count, "A").End(xlUp).Row
endCol = Cells(1, Columns.Count).End(xlToLeft).Column
If endRow > 1 And endCol > 1 Then
Range(Cells(2, "B"), Cells(endRow, endCol)).ClearContents
End If
For i = 2 To endRow
For j = 2 To endCol
myArray = Split(Cells(1, j), "、")
For k = 0 To UBound(myArray)
If InStr(Cells(i, "A"), myArray(k)) > 0 Then
Cells(i, j) = "○"
Exit For
Else
Cells(i, j) = "-"
End If
Next k
Cells(i, j).HorizontalAlignment = xlCenter
Next j
Next i
End Sub 'この行まで
表のレイアウトを変更しても良いのであれば、関数でも対応できると思います。
↓の画像のように1行目の項目を各セルに一つずつ分けて入力します。
※ この場合、項目数が一番多い列の行数に合わせ、空白セルができないよう
まずA列に使用されることはないであろう、アスタリクス「*」を入れておきます)
画像ではB5セルに
=IF($A5="","",IF(OR(ISNUMBER(FIND(B$1:B$4,$A5))),"○","-"))
これは配列数式になりますので、Shift+Ctrl+Enterで確定!
この画面からコピー&ペーストする場合は、
上記数式をドラッグ&コピー → B5セルを選択 → 数式バー内に貼り付け → そのまま(編集可能なまま)
Shift+Ctrlキーを押しながらEnterキーで確定!
数式の前後に{ }マークが入り配列数式になります。
最後にB5セルを列・行方向にオートフィルでコピー!
これで画像のような感じになります。m(_ _)m
お礼
ご回答ありがとうございます。 1行目に全ての項目を記入するという方法自体が不安だったこともあり、また、複数で管理するという特性上、全ての人がVBAを使えない事情からも関数で、と思っていました。 その上、スマートな関数で、しかもCOUNTIFを使用した場合の7個という制約も気にすることなく運用できることが分かり安堵しています。 今回のご回答を元に、より精度を高めたリスト作成と運用をしていきます。 上記のことからベストアンサーとさせていただきます。 改めてありがとうございました。