こんばんは!
>共通するn個の文字列があった場合に指定の列に数字を表記させる
Excel的には文字列をどこで区切ってよいのか判断できませんので
こちらで決めてやる必要があります。
そこで↓の画像のように「共通する文字列」の表を作成しておいた上での一例です。
シートモジュールです
Sub Sample1()
Dim i As Long, k As Long
For i = 2 To Cells(Rows.Count, "C").End(xlUp).Row
For k = 2 To Cells(Rows.Count, "G").End(xlUp).Row
If InStr(Cells(i, "C"), Cells(k, "G")) > 0 Then
Cells(i, "A") = Cells(k, "H")
End If
Next k
Next i
End Sub
この程度しか思いつきません。m(_ _)m
質問の画像があまり見えないので想像の部分があります。Excel2010です。
「なし」や「ぶどう」が含まれる品名に関して、同じように「なし」や「ぶどう」が含まれる品名はそのほか何個あるかを計算したいということでしょうか。
マクロというより、VBA(マクロ)を使ったユーザー定義関数が適切でしょう。
マクロで「なし」や「ぶどう」で照合し、カウントさせる必要があります。そのために「品名区分」として、シートに表を作りました。K2:K3になります。必要な分増やしてください。添付図を見てください。
添付図で、チェック欄G2の算式は、
=CountKubun(I2,$C$2:$C$21,$K$2:$K$3)
になります。下にコピーします。
ユーザー定義関数なので、関数をセットすればマクロを実行する必要はありません。(データ行が増えたりした場合は算式の修正と再計算(F9)はしてください。)I列の品名とC列の全品名、K列の作った表を使っています。
以下を標準モジュールに貼り付けます。
Function CountKubun(elm As String, ALL_Table As Range, KUBUN_Table As Range)
Dim rg1 As Range, rg2 As Range
Dim cnt As Integer
Application.Volatile
For Each rg1 In KUBUN_Table
If InStr(elm, rg1.Value) > 0 Then
For Each rg2 In ALL_Table
If InStr(rg2.Value, rg1.Value) > 0 Then
cnt = cnt + 1
End If
Next
End If
Next
If cnt > 0 Then
CountKubun = cnt - 1
Else
CountKubun = ""
End If
End Function
お礼
ご回答いただきありがとうございます。 これまでどう考えて良いか全くわかりませんでししたが、進め方が見えてきました。 本当にありがとうございました。