- ベストアンサー
エクセルでor検索
エクセルでヤフーやグーグルのようなor検索がしたいです。 例えば、各セルに 「あいうえお」 「かきくけこ」 「さしすせそ」 というふうに文字が入っている時に、「あ」or「か」を含むセルを検索することはできるでしょうか。検索後に色を変えるなどできたら、とてもありがたいです。検索したい文字は50個くらいあります。質問分かりにくかったらもうしわけないです。よろしくお願いします。
- みんなの回答 (9)
- 専門家の回答
質問者が選んだベストアンサー
>たとえば、Dの列に文字を50個並べて、そのDの列の文字をAの列から、検索して、色を変えることができないかと考えています。 列の対応方法は思いつきませんでしたが、行の対応方法が思いつきましたので紹介します。 別添資料を参照ください。 A列に文字を入力。 B列に合計欄を作成。 C列から右の列に検索文字を入力。 C、B、Aの順で説明。 C1移行右のセルに検索文字を入力。 C2 =IF(ISNUMBER(FIND(C$1,$A2)),1,"") *C1の文字がA1にある場合は1を、以外は空欄を表示。 C2のセルを選択し、書式→条件付き書式を選択。 条件を次の通り設定 セルの値が 次の値に等しい 1 書式で好きな色に設定 上記の2つの作業後、他のセルにコピー B列は、C列以降条件も満たす場合は1を返すので、その合計を足す。 A列は、文字すべてのセルを選択し、書式→条件付き書式を選択。 条件を次の通り設定。 数式が =B1>=1 書式で好きな色に設定 上記の設定で、添付資料の通り表示されます。
その他の回答 (8)
- mitarashi
- ベストアンサー率59% (574/965)
VBAの名誉のために?ご要求の仕様通りの回答をしておきます。検索対象データはA1から、A列に、途中に空白セル無く配置。同様に検索文字はD1からD列に配置されているとします。アクティブシートを対象にします。 Sub test() Dim targetRange As Range, refRange As Range Dim myCell As Range, rtnRange As Range Const checkColor As Long = 4 '黄緑色 With ActiveSheet Set targetRange = Range(.Range("A1"), .Range("A" & .Rows.Count).End(xlUp)) targetRange.Interior.ColorIndex = xlNone 'A列のセルの着色をリセット Set refRange = Range(.Range("D1"), .Range("D" & .Rows.Count).End(xlUp)) End With For Each myCell In refRange.Cells Set rtnRange = myFind(targetRange, myCell.Value) If Not rtnRange Is Nothing Then rtnRange.Interior.ColorIndex = checkColor Next myCell End Sub 'VBAのHELPのコードをアレンジ Private Function myFind(targetRange As Range, searchWord As String) As Range Dim c As Range Dim firstAddress As String With targetRange Set c = .Find(searchWord, LookIn:=xlValues, lookat:=xlPart) If Not c Is Nothing Then firstAddress = c.Address Do If myFind Is Nothing Then Set myFind = c Else Set myFind = Union(myFind, c) End If Set c = .FindNext(c) Loop While Not c Is Nothing And c.Address <> firstAddress End If End With End Function
- 135ok
- ベストアンサー率34% (26/75)
>本当言うと、合計だけが分かればいいので、CからJの列がなければなお良いのです。でも、これを消すと合計も消えてしまうのでしょうか? CからJで検索しているので、消せば合計もなくなります。 合計だけ必要であれば、その部分だけコピーして使われれば良いのでは。
お礼
ありがとうございます。 おっしゃる通り、使い方次第で完全にうまくいきそうです。 丁寧に教えていただきうれしく思います。本当に何も分からなかったのに、これでできます。本当にありがとうございます。
- 135ok
- ベストアンサー率34% (26/75)
- 135ok
- ベストアンサー率34% (26/75)
>条件1で「あ」を検索して、条件2で「か」を検索したということでしょうか。 条件1はB1の値、条件2はC1の値を検索。結果、ご指摘の通り検索しています。 >50個の文字を検索するには、追加を重ねて、50個条件をつくるということでしょうか? 当方、2003を使用しています。2003では、3つの条件のみとなり4つ以上の条件指定は不可となります。VBAなら可能のようです。 >「後は、セルをコピーし書式を貼り付け。」の意味がよく分かっていないので 説明通りです。A4をコピーしそのまま貼り付けると、「あいうえお」と文字までコピーされてしまいます。書式のみコピーしたいので、A4をコピー、右クリック→形式を選択して貼り付け→貼り付け欄の書式を選択すると、書式のみ貼り付けることができます。
- KURUMITO
- ベストアンサー率42% (1835/4283)
各セルに入力されている文字の数はどれくらいでしょうか? 5つ以内ですか?
お礼
ありがとうございます。セルに入るのは、最高で10文字です。大体5文字くらいです。
- mitarashi
- ベストアンサー率59% (574/965)
Unionを使ってまとめた非連続のセルを、そのまま検索できるものか興味があり作成してみました。or検索または、and検索でヒットしたセルに着色します。コードを見て使い方がお分かりにならないなら、スルーして下さい。Excel2000用のコードですので、より新しいバージョンでの動作は不明です。また、思いつきなので検証は不十分ですが、あしからず。 'or検索 Sub test() ActiveSheet.UsedRange.Interior.ColorIndex = xlNone '任意の個数可能、一文字でなくても可、50個はどうか分かりません... Call or_search("あ", "か", "た") End Sub 'and検索 Sub test2() ActiveSheet.UsedRange.Interior.ColorIndex = xlNone Call and_search("あ", "か", "た") End Sub Sub or_search(ParamArray MyArray()) Dim rtnRange As Range Dim arg As Variant Const checkColorIndex As Long = 3 For Each arg In MyArray Set rtnRange = myFind(ActiveSheet.UsedRange, CStr(arg)) If Not rtnRange Is Nothing Then rtnRange.Interior.ColorIndex = checkColorIndex Next arg End Sub Sub and_search(ParamArray MyArray()) Dim rtnRange As Range Dim firstTimeFlag As Boolean Dim arg As Variant Const checkColorIndex As Long = 4 firstTimeFlag = True For Each arg In MyArray If firstTimeFlag Then Set rtnRange = myFind(ActiveSheet.UsedRange, CStr(arg)) If rtnRange Is Nothing Then Exit For firstTimeFlag = False Else Set rtnRange = myFind(rtnRange, CStr(arg)) If rtnRange Is Nothing Then Exit For End If Next arg If Not rtnRange Is Nothing Then rtnRange.Interior.ColorIndex = checkColorIndex End Sub 'VBAのHELPのコードをアレンジ Private Function myFind(targetRange As Range, searchWord As String) As Range Dim c As Range Dim firstAddress As String With targetRange Set c = .Find(searchWord, LookIn:=xlValues, lookat:=xlPart) If Not c Is Nothing Then firstAddress = c.Address Do If myFind Is Nothing Then Set myFind = c Else Set myFind = Union(myFind, c) End If Set c = .FindNext(c) Loop While Not c Is Nothing And c.Address <> firstAddress End If End With End Function
お礼
申し訳ないです。パソコンが得意ではありません。エクセルもここ最近使いはじめたところです。書いてあることの意味が理解できませんでした。 回答していただいたことはとてもうれしいです。 ありがとうございます。
- 135ok
- ベストアンサー率34% (26/75)
一例です。 添付資料を参照ください。 まず、添付のように表を作成。 A4を選択し、書式→条件付き書式を選択。 条件1 数式が =IF($B$1="","",ISNUMBER(FIND($B$1,$A4))) 条件2 数式が =IF($C$1="","",ISNUMBER(FIND($C$1,$A4))) 後は、セルをコピーし書式を貼り付け。
お礼
ありがとうございます。すいませんエクセルが不慣れで見当違いのことを言うかもしれませんが、これは、条件1で「あ」を検索して、条件2で「か」を検索したということでしょうか。だとすれば、50個の文字を検索するには、追加を重ねて、50個条件をつくるということでしょうか? それはちょっとたいへんです。 たとえば、Dの列に文字を50個並べて、そのDの列の文字をAの列から、検索して、色を変えることができないかと考えています。 ただ、お答えの文章の最後にあった「後は、セルをコピーし書式を貼り付け。」の意味がよく分かっていないので、もしかしたら見当違いのことを言っているかもしれません。だとしたらごめんなさい。 よろしくおねがいします。
- IsaOshieteGoo
- ベストアンサー率60% (15/25)
エクセルはそういう目的のソフトでは無いので、難しいかと思いますが メニューの「編集」→「置換」(またはキーボードよりCtrlキー+「H」)で、検索する文字列「あ」として、置換後の文字列「■あ■」などとすれば、多少目立つようにはできると思います。 続けて、「か」→「■か■」と置換すれば、結果としてはor検索と同じですよね?
お礼
ありがとうございます。 ただ、それだと、50個の文字を検索するには、50回それをくりかえすことになりますよね。それはちょっと厳しいです。また、文章自体が変ってしまうので、できたら、一気に検索し、背景の色が変わるなどの方法があれば教えていただきたいです。
お礼
ありがとうございます。こういうものがあるのですね。 私ももう少しエクセルを使いこなせるようになったら、挑戦してみたいです。お返事ありがとうございました。今後もよろしくお願いします。 とりあえず問題は解決したので、これにて閉め切らせていただきます。 ありがとうございました。