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

いつもお世話になっております。
ある列(例としてはA列)に「Rose」というデータが入っていたり無かったりしています。(他の列には何かしらのデータが入っています。)
A列に何も入っていなかった場合、別のマクロ(例として「test2」)へ移行するように組みたいのですが、空白の認識が上手くいきません。ご教授お願いいたします。

Sub test1()
r = Range("65536").End(xlUp).Row
For i = 2 To r
If InStr("Rose", Cells(nLine, 1)) = "" Then
Call test2
Exit Sub
End If
Next
End Sub

環境はwindowsXP Excel2003です。
よろしくお願いいたします。

A 回答 (5件)

A列に Rose の文字が無ければマクロTest2へ


If IsError(Application.Match("*Rose*", Columns("A:A"), 0)) Then
Call Test2
Exit Sub
End If
    • good
    • 1
この回答へのお礼

ご回答ありがとうございました。
日中に職場でテストして完璧に動くことが出来ました!
今週中に締切の仕事だったので、今日中に解決出来て本当に助かりました。大感謝です!

お礼日時:2009/07/21 20:28

>「Rose」というデータが入っていたり無かったりしています


>A列に何も入っていなかった場合

何も入ってなかった場合を検索する訳ですから、
Roseという文字列は何の関係もありませんね。
で、提示のコードのInstr関数は意味がないということになります。
そのInstr関数の使い方も間違ってますが、それを置いといて、
Instr関数は、「含む」かどうかを検索する関数です。
例えば、aaaRose、aaaRoseBBB、RoseXXXなど

空白かどうかを判断するなら、単純に

If Cells(i, "A").Value = "" Then

で十分です。


そしてまた、Roseを「含ない」ことを判断する場合は

If InStr(Cells(i, "A").Value, "Rose") = 0 Then

とか、

If Not Cells(i, "A").Value Like "*Rose*" Then

などとすればいいでしょう。
以上です。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
シンプルなコードのご提示ありがとうございます。
自分のコードがまだまだ無駄が多いと痛感でございます。

お礼日時:2009/07/21 20:29

>Cells(nLine, 1))


nLineはこの行実行以前に定義して行番号の数値が入って居ないとおかしい。
なぜ突然nLineか?何かをコピーしたままか?
ーー
>InStr("Rose", Cells(nLine, 1)) = ""
Instr関数は文字列に該当が無ければ0を返す。
だからこの使い方はおかしい。
ーー
空白か?と聞くのにInstr関数は使わない。
ーーー
表題は
>空白なら別のマクロへ移動したい
だがそのことだけなら
Call test2

test2
でよいので、聞くまでもなく実現している。
後述するが空白処理後返ってこなくてもよいのか?
ーー
>Range("65536").End(xlUp).Row
の65536はどの列かを普通指定する。前列最終行が同じとは限らない。
Range("A65536").End(xlUp).Row
Sub test01()
r = Worksheets("Sheet1").Range("65536").End(xlUp).Row
MsgBox r
End Sub
はエラーになる。
質問のコードは、1度も実行もしてみないで質問したのか。
---
初めての空白セルが現れると、test2を処理して、終わっちゃうがそれでよいのか?普通は最終行まで何かを処理するのでは。
質問例では空白で無ければ、何もしてないので、これでよいのかな。
2番目のセルのRoseも見つけなければならないと思うから、何か変だ。
ーーー
もう少し解説書・WEBのコード例などの例を日ごろから勉強しないと、というレベルだと思う。
    • good
    • 0
この回答へのお礼

深夜にもかかわらず、ご回答ありがとうございました。
実際はものすごく長いコードの一部分だったので、その部分を引っ張ってきたのですが…
解りやすい質問の仕方は難しいです…が、これにくじけずに精進いたします。

お礼日時:2009/07/21 20:26

上記回答の訂正です。



【誤】
If InStr("Rose", Cells(nLine, 1)) = "" Then の行を
If Cells(r, 1).value = "" or IsNull(Cells(r, 1).value) Then に変えてください。
【正】
If InStr("Rose", Cells(nLine, 1)) = "" Then の行を
If Cells(i, 1).value = "" or IsNull(Cells(i, 1).value) Then に変えてください。
    • good
    • 0
この回答へのお礼

深夜にもかかわらず、ご回答ありがとうございました。

お礼日時:2009/07/21 20:23

>A列に何も入っていなかった場合、別のマクロ(例として「test2」)へ移行するように組みたいのですが、空白の認識が上手くいきません。



上記を満たせば良いのであれば
If InStr("Rose", Cells(nLine, 1)) = "" Then の行を
If Cells(r, 1).value = "" or IsNull(Cells(r, 1).value) Then に変えてください。

→ nLineという変数は添付されたコードのどこにも出現しませんが??
→ InStr関数は、ある文字列に対して指定した文字列が出現する位置を取得する関数なので、戻り値が""になることはあり得ないと思います。
関数については[URL:http://officetanaka.net/excel/vba/function/InStr …]が参考になるかと思います。
<引用>
InStr関数は、引数string1で指定した文字列の中から引数string2で指定した文字列を検索して、見つかった位置を返します。たとえば、InStr("ABCDEF", "DE")は4を返します。
    • good
    • 0

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

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