
検索して該当者をメッセージに表示するように作成してますがつまずきました。
今回行いたいのはE列を検索してB列の内容をメッセージボックスに表示します。
Dim com As Range
Set com = Worksheets("シート1").Range("e:e").Find(what:=”野菜”, lookat:=xlWhole)
If Not com Is Nothing Then
Dim first As Range
Set first = com
Dim compp As String
compp = com.Value
Do
Set com = Worksheets("シート1").Range("e:e").FindNext(com)
If com.Address = first.Address Then
Exit Do
End If
comm = comm & vbCrLf & com.Value
Loop
MsgBox comm
Else
End If
上記の内容はオフセットを使用し解決しました。ありがとうございました。
そこで問題が発生したのはB列の同じ名前は表示しないようにするのにはどうすればよいのかアドバイスお願いします。
白菜が2つありますが1つだけ表示させたいです。

No.7ベストアンサー
- 回答日時:
以下のようにしてください。
Option Explicit
Sub sample()
Dim dicT As Object
Dim com As Range
Set dicT = CreateObject("Scripting.Dictionary")
Set com = Worksheets("シート1").Range("e:e").Find(what:="野菜", lookat:=xlWhole)
If Not com Is Nothing Then
Dim first As Range
Set first = com
Dim comm As String
Dim name As String
name = com.Offset(0, -3).Value
If dicT.exists(name) = False Then
dicT(name) = True
comm = comm & vbCrLf & name
End If
Do
Set com = Worksheets("シート1").Range("e:e").FindNext(com)
If com.Address = first.Address Then
Exit Do
End If
name = com.Offset(0, -3).Value
If dicT.exists(name) = False Then
dicT(name) = True
comm = comm & vbCrLf & name
End If
Loop
MsgBox comm
Else
End If
End Sub
この度はご教授ありがとうございました。
理想の形に完成しました。
dicT.exists(name)の使い方を勉強したいと思います。
No.5
- 回答日時:
No2です。
補足のコードを見ても、(ご自分で)内容を把握できているとは思えませんね。
(中途半端なコードの提示の仕方なので)
ご質問の直接の回答ではありませんけれど、関数利用でも良ければ、以下のような簡単なコードでも同様のことは実現できます。
(Office365環境が条件になりますけれど…)
Sub Sample()
Set r = Cells(1, Columns.Count)
r.FormulaLocal = "=TEXTJOIN(CHAR(10),1,UNIQUE(FILTER(B:B,E:E=""野菜"","""")))"
s = r.Value
r.Clear
MsgBox s
End Sub
※ 私の環境では上記関数は使えないので、完全な検証はできていませんが、悪しからず。
※ 365環境でないとエラーになりますのでご注意。
No.4
- 回答日時:
No3です。
補足ありがとうございました。補足されたマクロをこちらで実行すると
添付図のようにエラーになってしまいました。
エラーにならないマクロを提示していただけませんでしょうか。
Sub sample()
End Sub
はこちらで追加しています。
マクロの途中からでなく、全て提示していただいた方が、
良いかと思います。

No.3
- 回答日時:
あなたが提示されたスクリプトを実行すると
添付図のように野菜が2回表示されます。
問題点1.本来は野菜が3回表示されるべきではないでしょうか。
問題点2.B列の名前を表示するのにオフセットを使ったということですが、
そのオフセットを使ったマクロを提示していただけませんでしょうか。
このマクロだと、どのように修正したら良いか、迷ってしまいます。
問題点1、問題点2の解決も含めてどのようにしたら良いかということなら、そのように解決策を提示しますが、
問題点1、問題点2が既に解決済みなら、そのマクロを提示してください。

No.2
- 回答日時:
こんにちは
>同じ名前は表示しないようにするのには
>どうすればよいのかアドバイスお願いします。
基本的な考え方としては、ループで項目を追加する前に「既に同じ項目が存在するか」をチェックして、存在したら追加しないようにすれば良いでしょう。
それまでの項目は変数に持っているので、その中に同じ項目(=文字列)が存在するかを調べればよいです。
ただし、単純検索だと、ご提示の記録方法の場は「高麗人参」がすでにあるときに「人参」で検索するとヒットしてしまうので、少し工夫が必要かも知れません。
(区切り文字込みで検索するようにするなど)
あるいは、最初から文字連結をせずに、配列やDictionaryなどに記録していって、最後に連結して表示する方法をとれば、上記のような包含関係の項目を気にする必要はなくなります。(完全一致で調べればよいので)
ちょっと特殊な方法としては、シートの空き列にFINDで得た項目を順に記録していって、シート機能の「重複を省く」を行ってから、連結して表示するという方法も考えられます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ユーザーフォームに2つのコンボボックス銀行名「ConboBox1」支店名を「ConboBox2」とし 4 2022/08/03 17:34
- Visual Basic(VBA) エクセルVBAで教えて頂きたいのですが? 2 2022/12/31 20:28
- Visual Basic(VBA) 2つのシートの任意のセルの番号が一致したら、一致した行をコピーする VBA 2 2023/06/19 20:48
- Excel(エクセル) 指定文字列が該当するA列をアクティブセルにするには 3 2022/08/17 13:18
- Visual Basic(VBA) vbaを早くしたい 5 2022/09/09 10:58
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) ユーザーフォームの表示を追加したい 2 2023/03/26 23:18
- Visual Basic(VBA) エクセルVBAのコードで質問です。 下のコードはJ16の文字列をB3を起点とする範囲から探して、見つ 5 2023/04/07 11:07
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで特定の列が0表示の場...
-
Excel_マクロ_現在開いているシ...
-
メッセージボックスのOKボタ...
-
特定のPCだけ動作しないVBAマク...
-
エクセルに張り付けた写真のフ...
-
Excel・Word リサーチ機能を無...
-
Excel マクロ VBA プロシー...
-
Excelのセル値に基づいて図形の...
-
マクロの連続印刷が突然不可能...
-
一つのTeratermのマクロで複数...
-
TERA TERMを隠す方法
-
Excel マクロでShearePoint先の...
-
エクセルVBAでNAVITIMEを使って...
-
ExcelVBAでPDFを閉じるソース
-
ExcelのVBA。public変数の値が...
-
VBAにて別ワークブック上の実行...
-
マクロ実行時、ユーザーフォー...
-
ExcelVBAの繰り返し処理でwebク...
-
IF関数を使ってマクロを実行さ...
-
MacのWordでショートカットの割...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
特定のPCだけ動作しないVBAマク...
-
Excel・Word リサーチ機能を無...
-
エクセルで特定の列が0表示の場...
-
Excel_マクロ_現在開いているシ...
-
一つのTeratermのマクロで複数...
-
メッセージボックスのOKボタ...
-
Excel マクロ VBA プロシー...
-
ExcelのVBA。public変数の値が...
-
エクセルで別のセルにあるふり...
-
エクセルに張り付けた写真のフ...
-
Excel マクロでShearePoint先の...
-
TERA TERMを隠す方法
-
Excelのセル値に基づいて図形の...
-
Excel VBAからAccessマクロを実...
-
ExcelVBAでPDFを閉じるソース
-
マクロ実行時、ユーザーフォー...
-
オートフィルターとExcelマクロ...
-
wordを起動した際に特定のペー...
-
特定文字のある行の前に空白行...
-
エクセルで縦に並んだデータを...
おすすめ情報
作成したマクロです
Dim first As Range
Set first = com
comm = com.Offset(, -2).Value
Do
Set com = Worksheets("シート1").Range("e:e").FindNext(com)
If com.Address = first.Address Then
Exit Do
End If
comm = comm & vbCrLf & com.Offset(, -2).Value
End If
Loop
If comm <> "" Then
MsgBox comm
End If
Else
End If
End If
遅くなり申し訳ございません。
できれば最初のマクロの修正でお願いします。