• ベストアンサー

VBA 列が空白なら別のマクロへ移動したい

いつもお世話になっております。 ある列(例としては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です。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • watabe007
  • ベストアンサー率62% (476/760)
回答No.4

A列に Rose の文字が無ければマクロTest2へ If IsError(Application.Match("*Rose*", Columns("A:A"), 0)) Then Call Test2 Exit Sub End If

saiwai
質問者

お礼

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

すると、全ての回答が全文表示されます。

その他の回答 (4)

  • myRange
  • ベストアンサー率71% (339/472)
回答No.5

>「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 などとすればいいでしょう。 以上です。

saiwai
質問者

お礼

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

すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.3

>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のコード例などの例を日ごろから勉強しないと、というレベルだと思う。

saiwai
質問者

お礼

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

すると、全ての回答が全文表示されます。
noname#258812
noname#258812
回答No.2

上記回答の訂正です。 【誤】 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 に変えてください。

saiwai
質問者

お礼

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

すると、全ての回答が全文表示されます。
noname#258812
noname#258812
回答No.1

>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.htm]が参考になるかと思います。 <引用> InStr関数は、引数string1で指定した文字列の中から引数string2で指定した文字列を検索して、見つかった位置を返します。たとえば、InStr("ABCDEF", "DE")は4を返します。

すると、全ての回答が全文表示されます。

関連するQ&A