準・究極の選択

VBA初心者です。

c列に入力されている「01-」~「09-」までのうち
「02-」で始まるものを探し、その行のA・B・C列を削除し
上につめたいのですが、うまくいきません。

「02-」の後には何文字か入っています(例:02-AN003)
以下のように記述したのですが。。。
VBA初心者ですのでどなたかご教授下さい。

Sub sakujyo()

Dim i As Long
For i = Range("C" & Rows.Count).End(xlUp).Row To 2 Step -1
If Range("C" & i).Value = "02-*" Then Rows(i).Delete Shift:=xlUp
Next i

End Sub

A 回答 (2件)

>その行のA・B・C列を削除し,上につめたいのですが、うまくいきません


手操作でも出来ない原理的に出来ないことを書いていませんか。
A・B・C列しかないデータなのか。不用意にA・B・C列と書かないこと。
列の1部列と見てしまうよ。
ーー
やり方のヒントは
(1)C列1セルづつINSTR関数で聞いていって見つける
(2)C列でFind、FindNextメソッドを使う。初心者には向かない。
(3)セルの値そっくりの文字列を探すのでなく「含む」になるようだが、Like演算子を使う。Googleでも検索して勉強のこと)
>If Range("C" & i).Value = "02-*" は経験の無いものの、無茶なやり方。
Instr関数なら
例データ
asder
adfert
asdcv

Sub test01()
For i = 1 To 3
p = InStr(Cells(i, "A"), "er")
MsgBox p
Next i
End Sub
で可能。4,4,0になる。
>02-」で始まるものとは、先頭から02-なら、Left(Cells(i,"C"),3)="02-j"で良い。
    • good
    • 0

 


●Like演算子を使う

Sub sakujyo()
 Dim i As Long
 For i = Range("C" & Rows.Count).End(xlUp).Row To 2 Step -1
  If Range("C" & i).Value Like "02-*" Then Rows(i).Delete
 Next i
End Sub


●Instr関数を使う

If InStr(Range("C" & i).Value, "02-") > 0 Then Rows(i).Delete Shift:=xlUp

 
    • good
    • 0
この回答へのお礼

出来ました! 
Like演算子ですね。
調べて理解しました。ありがとうございました。

お礼日時:2009/05/12 23:25

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