重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

困っています。お願いします。
例、このようなシートがあるとする
100
200
300
1000
10000
エクセルVBAで
fc = Range("a1").Interior.Find("100")
「100」で検索すると100だけではなく、100を含むすべての文字列、つまり1000、10000も全部ひっかかります。

ちょっと困るので、完全一致のものだけを抽出する方法ありませんか。
ちなみに今日はじめてエクセルVBAを触りました。初心者です

A 回答 (4件)

こんばんは。



>fc = Range("a1").Interior.Find("100")

本当にExcelのVBAですか? Excel VBAでは、そのような使い方はなかったと思います。

私が、Find メソッドを使う時は、以下のようなスタイルにします。省略はなるべく避けます。なお、100だけの検索という場合は、

LookAt:=xlWhole

を使います。Excelがはじめの方には、Findメソッドは、少し、荷が重いような気がします。

入門レベルでは、以下のようなループを使ったらよいと思います。

Sub SampleTest()
For Each c In Range("A1:D100")
 If c.Value = 100 Then
  c.Interior.ColorIndex = 3 '色は赤
 End If
Next c
End Sub


Find メソッドを使ったサンプル
Select の部分で加工する
'-------------------------------------------------------------
Sub TestFind()
 Dim c As Range
 Dim FirstAdd As String
 Dim rng As Range
 '検索語の代入
 Const KENSAKU As Variant = 100
 
 Set rng = ActiveSheet.UsedRange
 rng.Cells(1, 1).Select
 Set c = ActiveSheet.UsedRange.Find( _
    What:=KENSAKU, _
    LookIn:=xlValues, _
    LookAt:=xlWhole, _
    SearchOrder:=xlByRows, _
    SearchDirection:=xlNext, _
    MatchByte:=True)
 
 If Not c Is Nothing Then
  FirstAdd = c.Address
  c.Select
  If MsgBox(c.Address & vbCrLf & _
     "次も検索しますか?", vbOKCancel) = vbCancel Then
   Exit Sub
  End If
  
  '次の検索
  Do
   Set c = rng.FindNext(c)
   If c Is Nothing Or c.Address = FirstAdd Then 'アドレスの確保
    Exit Sub
   End If
   c.Select 'セルの選択
   If MsgBox(c.Address & vbCrLf & _
    "次も検索しますか?", vbOKCancel) = vbCancel Then
    Exit Sub
   End If
  Loop
 End If
 
 Set c = Nothing
 Set rng = Nothing
 
End Sub
    • good
    • 0

・マクロ記録する。


・ヘルプ程度は読む。
Find は引数の説明を読まずして使えません。(もしくは使えているつもりでも実は「たまたま」であって、ある日突然誤動作します。)

以上
    • good
    • 0

Interior???



Set fc = Range("a1").CurrentRegion.Find("100", , LookAt:=xlWhole)

ではないでしょうか?
    • good
    • 0

findの設定項目LookAtでxlWholeを指定です。



参考
http://www.moug.net/tech/exvba/0050116.htm
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!