プロが教える店舗&オフィスのセキュリティ対策術

エクセルのvba初心者です
サイトを見ながらexselの検索ボックスを作ろうとしているのですがsubまたはfunctionが定義されていませんとでますどうすればよいでしょうか?

また途中の
msg = msg& i - 2 & "号"&vbcr
に関してエラーが出ているのですがどうすればよいでしょうか?

詳しい方ご教授お願いします。


Sub 検索()

Dim datasheet As Worksheet
Dim keyword As String
Dim maxrow As Long
Dim maxcol As Long
Dim msg As String
Dim i As Long
Dim j As Long

If Range("B2") = "" Then
MsgBox "検索したい語句を入力してください", vbExclamation
Exit Sub
End If

Call clearcolor

Set datasheet = ThisWorkbook.Sheets("MS-Bible")

With datasheet

keyword = Replace(StrConv(.Range("B2"), vbNarrow), "", "")

maxrow = .Cells(.Rows.Count, 1).End(xlUp).Row
maxcol = .Cells(4, .Columns.Count).End(xlToLeft).Column

For i = 5 To maxrow
For j = 2 To maxcol
If .Cells(i, j) <> "" Then
If Replace(StrConv(.Cells(i, j), vbNarrow), "", "") Like "*" & keyword & "*" Then
.Cells(i, j).Interior.Color = RGB(255, 255, 0)
msg = msg& i - 2 & "号"&vbcr
Exit For
End If
End If
Next
Next

If msg = "" Then
MsgBox "見つかりませんでした", vbExclamation
Else
MsgBox msg & "に情報があります", vbInformation
End If

End With

End Sub

「エクセルのvbaで検索ボタンを作る」の質問画像

質問者からの補足コメント

A 回答 (3件)

No1です。



考えてみると、条件付き書式を利用すれば、ほとんどVBAを使わなくても同様のことは可能ですね。

準備として、
・事前にdatasheetの文字列の変換は済ませておくものとします。
・datasheetのどこかのセル(どこでもよい)を検索値の入力セルに設定しておきます
・他のセルには、「検索値の文字列を含む」を条件付き書式に設定しておきます

上記を設定しておけば、
 「検索対象文字を変換して、datasheetの指定セルに入力する」
VBAを実行すれば良くなるので2、3行のコードで済んでしまうでしょう。
(StrConv関数に相当するシート関数が見当たらないので、そこだけをVBAで行うということになります)
    • good
    • 0

詳細までご説明ありがとうございます

    • good
    • 0

こんばんは



>subまたはfunctionが定義されていませんとでますどうすればよいでしょうか?
通常は原因となっている行を修正します。
多分、
>Call clearcolor
でしょう。
clearcolorというプロシージャを呼び出していますが、どこにもないということかと。
想像するところ、シート内の背景色を一旦すべて「なし」にしてクリアしているのではないかと思いますが、わざわざ別処理にするほどのものでもなさそうです。(1行で済んでしまうので)

後の処理で、色を付けているのはdatasheetのようなので、その文は削除して、With文の直後に
 .Cells.Interior.Color = xlNone
の1行を入れればすむのではないかと思います。


>また途中の
>msg = msg& i - 2 & "号"&vbcr
>に関してエラーが出ているのですがどうすればよいでしょうか?
その部分は、元のコードから変えているのでエラーになります。
きちんとコピーしましょう。
パット見でも、他にも2か所はコピーミスがあると思われます。


セルを一つずつ比べていくようなロジックになっていますけれど、その際に文字列変換をいちいち行っていますが、あまり効率が良いとは思えません。
入力値の文字列変換はしかたがないかも知れませんが、こちらは1度だけなので大したことはありません。
一方のシート内の文字は毎回変換するのではなく、あらかじめ変換する処理を1度だけ走らせておけば、検索の度に毎回
変換する必要はなくなるはずと思います。
    • good
    • 2

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