LoginSignup
ganbaruzo
@ganbaruzo

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

VBA Find関数を使って、e3:e5の条件で部分一致する、a2:a21に塗りつぶしをしたい

Q&AClosed

Find関数を使って、e3:e5の条件で部分一致する、a2:a21に塗りつぶしをしたいのですが、上手くいきません。因みにlike演算子とInstr関数、調べて、なんとか出来ました。
大変お手数ですが、どなたか、ご存じの方、教えて頂けないでしょうか?
Something went wrong
Qiita質問3.jpg

出ているエラーメッセージを入力

例)

NameError (uninitialized constant World)

または、問題・エラーが起きている画像をここにドラッグアンドドロップ

該当するソースコード

Sub Find条件一致()
  Dim c As Object
  Dim r As Range
  Dim myKey As Variant

    For Each r In Range("A2:A21")
        myKey = Left(r.Value, 5)
'        Stop
        Set c = Range("E2:E5").find(myKey & "*", LookAt:=xlPart) '←多分、ここがおかいのではと思います。
'        Stop
        If c Is Nothing Then
        Else
            r.Interior.ColorIndex = 4

        End If
    Next r
End Sub

例)

def greet
  puts Hello World
end

VBA find関数 部分一致でネット検索したのですが、分かりませんでした。

0

1Answer

実際のところ、プログラムは関数のように処理を勝手にまとめてはくれません(もっというとexcelの関数も裏で結局同じことをしている)。findを使ったタイミングで「findがええかんじに結果持ってきてくれるやろ:relaxed:」と横着してE列側のループを作らなかったのが今回の症状の顛末です(myKeyは左5桁にする意味が特になさそうなので削ってあります)

  • findはひとつのセルにひとつのキーワードで検索をかける関数です
  • つまるところ「リスト×商品名」の処理数が必要
Sub Find条件一致()
  Dim c As Object
  Dim r As Range
  Dim myKey As Variant

    For Each r In Range("A2:A21")
        For Each word In Range("E2:E5")
            Set c = r.Find(word.Value, LookAt:=xlPart)
            If Not c Is Nothing Then
                r.Interior.ColorIndex = 4
            End If
        Next word
    Next r
End Sub

2022-08-14_10h01_08.png

2

Comments

  1. @ganbaruzo

    Questioner
    返事、遅くなりました。For Eachがもう一つ、いるんですね。一つ勉強になりました。分かりやすく、親切に、説明して下さり、誠に有難うございます。と同時に大変、助かりました。

Your answer might help someone💌