アプリ版:「スタンプのみでお礼する」機能のリリースについて

エクセルVBAにてFIND関数を使って、
文字列検索⇒コピー&ペーストのマクロを作成しているのですが、
どうしても、先頭文字列から検索をする方法がわかりません。

たとえば、

あいうえお
いうえおあ
おあいうえ
えおあいう

という文字列から「あいう*」を検索したい場合、
1行目だけを抽出したいのですが、
1,3,4行目が抽出されてしまいます。
find関数では先頭文字からの検索はできないのでしょうか?
もし、不可能な場合、先頭文字からの検索を行うにはどのように行えばよいでしょうか?

アドバイス、よろしくお願いいたします。

A 回答 (6件)

#4です。


ちょっと申し訳ありません。忘れていたことがありました。以前に同じような件で回答していたのに・・・。
「Excelが壊れている・・」なんて撤回してお詫びします。

findの検索条件は、以前に検索した条件をひきつぐのです。だから、#5さんの言うように引数を省略すると以前の検索条件が使われるので、結果が変わってきます。
私のコードは、
Find("あいう*", lookat:=xlWhole)
で検索した後なので、Find("あいう*")で検索できるのです。あなたができないというのは、以前に、
lookat:=xlPart
で検索されたのが残っているからでしょう。
なおこれは、、VBAでなくてもシートの検索で「検索と置換」のダイアログで設定したものも反映します。

findのヘルプです。
引数 LookIn、LookAt、SearchOrder、および MatchByte の設定は、このメソッドが使われるたびに保存されます。次にこのメソッドを使うときに、これらの引数の指定を省略すると、保存された設定が使われます。これらの引数の設定を変更すると、[検索と置換] ダイアログ ボックスに表示される設定が変わります。また、[検索と置換] ダイアログ ボックスで設定を変更すると、保存されている設定が変わります。このような設定の変更によって生じる問題を避けるためには、Find メソッドを使うたびに、これらの引数を明示的に指定します。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
引数を省略しているための誤動作?だったのかもしれません。
引数を省略せずに再度試してみたいと思います。

お礼日時:2013/02/18 07:51

#2です。



http://www.happy2-island.com/excelsmile/smile03/ …
ワイルドカードを使って検索するプログラムの作成例

にある、

「7行目のWhatにはワイルドカード文字を使って「大*」という条件を設定しました。
1文字目が大、それ以降は何でもよいという意味です。
加えて、10行目のLookAtにはxlWholeを設定し、完全一致で検索するようにしました。」

Findメソッドでは引数を省略しすぎると問題が出るのかも?
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
引数を省略せずにもう一度試してみます。

お礼日時:2013/02/18 07:54

#3です。


実際に、#3のコードを実行したのでしょうか。
セルを検索しているのではなく、セルの文字列を検索しているから、1文字目からしか検索しないと思うが。
もし、全部検索してしまうなら、そのExcelは壊れているから、あきらめなさい。
    • good
    • 0

#1です。


Book全体の検索では、#1では時間がかかってダメでしょう。

For i = 1 To ActiveWorkbook.Sheets.Count
Set c = ActiveWorkbook.Sheets(i).Cells.Find("あいう*")
If Not c Is Nothing Then MsgBox c.Address
Next

で、どうでしょうね。1文字目からの「あいう・・・」しか検索されないと思うが。

この回答への補足

再度、ご回答ありがとうございます。
私も("あいう*")で可能かと思っていたのですが、実際に組んでみると
"あいう"の入っているものをすべて検索してしまいます。。

補足日時:2013/02/17 18:16
    • good
    • 0

ヒットしたセル値(例えばr.Value)の頭文字をチェックして


みたら良いのでは?

Ser r = 'Findメソッド文

If Not r Is Nothing And Left(r.Value , 3) ="あいう" Then

' やりたいこと

End If

とか?
    • good
    • 0
この回答へのお礼

FIND関数だけでは難しいようであれば、この方法でいけそうですね。
ありがとうございます。

お礼日時:2013/02/17 16:05

質問のデータが、[D5:D8]にあるとすれば、



For Each c In [D5:D8]
If c.Value Like "あいう*" Then
MsgBox c.Address
End If
Next

とかで、いいと思うが。

この回答への補足

ご回答ありがとうございます。
質問に不備がありました。
検索範囲はブック全体なのですが、ご回答の方法の場合でも可能なのでしょうか?

補足日時:2013/02/17 15:08
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A