プロが教えるわが家の防犯対策術!

マクロについて教えてください。
以下のなかから、りんごを含んでいる行のみ削除したいのです。
できれば、inputboxで削除したい文字列を入力するようにしたいです。
1|りんご|30
2|みかん|50
3|りんご|30
4|すいか|30
5|みかん|50
いろいろ調べましたがわかりません。。お願いします。

A 回答 (4件)

>りんごを含んでいる行のみ削除


これは特定の列に削除文字列があれば削除するのですか? それとも列を限定せず1行のどこかに文字列があれば削除するのですか?

以下のサンプルはマクロ2行目で指定した列に指示した文字列がある行を削除していますが、マクロ中コメントアウトしている9行目を8行目のIf文と入れ替えると、1行のどこかに指定文字列があれば削除します。

Sub Macro1()
Const col As String = "A" '文字列が入力されている列
Dim idx As Long
Dim keyWord
keyWord = Application.InputBox("削除対象の文字列は?", Type:=2)
If TypeName(keyWord) <> "Boolean" And Len(keyWord) > 0 Then
  For idx = Cells(65536, col).End(xlUp).Row To 1 Step -1
    If InStr(Cells(idx, col).Value, keyWord) > 0 Then
'    If Application.CountIf(Rows(idx), "*" & keyWord & "*") > 0 Then
      Rows(idx).Delete
    End If
  Next idx
End If
End Sub
    • good
    • 2
この回答へのお礼

お答えありがとうございます。
とても分かりやすいサンプルで勉強になりました。
検索文字は列は限定せずに、どこかの列にあれば・・でした。

お礼日時:2008/01/23 14:48

あら、もう随分回答が出ていますが・・・。



以下は、A列に限らず、シート内に指定の文字列を含む行があったら削除します。

Sub test01()
Dim x As String, c As Range
x = InputBox("削除する文字を入力")
With ActiveSheet.UsedRange
Do While (1)
Set c = .Find(What:=x, LookIn:=xlValues, LookAt:=xlPart)
If c Is Nothing Then Exit Do
c.EntireRow.Delete
Loop
End With
End Sub
    • good
    • 1
この回答へのお礼

お答えありがとうございました。
簡潔に書かれていて分かりやすかったです。
勉強になりました、

お礼日時:2008/01/23 14:49

”りんご”がA列で数値がB列とした場合で、データ範囲がA列とB列


である事が条件です。
(データは1行目からとしてます)

Sub try()
 Dim st As String
 Dim i As Long, j As Long
 Dim v, x

 st = InputBox("削除するのは何?")
 If st = "" Then Exit Sub

 With ActiveSheet
      v = .Range(.[A1], .Cells(Rows.Count, 1).End(xlUp).Resize(, 2))
      ReDim x(1 To 2, 1 To UBound(v, 1))
      
      For i = 1 To UBound(v, 1)
          If v(i, 1) <> st Then
             j = j + 1
             x(1, j) = v(i, 1): x(2, j) = v(i, 2)
          End If
      Next
      ReDim Preserve x(1 To 2, 1 To j)
      .Range("A:B").ClearContents
      .Range("A1").Resize(j, 2).Value = Application.Transpose(x)
      Erase v, x
 End With
End Sub
ご参考程度になれば。
    • good
    • 0
この回答へのお礼

お答えありがとうございました。
参考になりました。

お礼日時:2008/01/23 14:51

2つぐらいやり方はあると思う。


しかし、>いろいろ調べましたがわかりませんといっているようでは、下記(2)では相当難しいよ。
(1)最下行まで、各行を総なめし、「りんご」かチェックする方法
(2)Find法
(1)は最下行から聞いて行って、該当行を、行削除していくこと
For i=1d To 1 Step -1
If Cells(i,"A")="りんご" Then
ActiveSheet.Cells(i,"A").Select
Selection.EntireRow.Delete
End If
Next i
--
「りんご」を指定する方法に、inputboxを使うなど指定・注文をつけているが、瑣末なことです。
ーー
>含んでいる
とあるが、「等しい」のか「含んでいる」のかはっきりしないが、「含んでいる」で良いのかな。(1)の場合、等しいは=で、含んでいるはp=Instr((cells(i,"A"),"りんご")でp<>0の判断になる。
(2)ではLookAt:=xlPartかLookAt:=xlWholeかになる
--
(2)はマクロの記録モードで
検索
りんご
の操作をすると、下記に近いコードが出る。
それを下記のように変える。
Sub Macro2()
Range("a1").Activate
Range("a1:a100").Find(What:="りんご", LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate
F = ActiveCell.Row
s = s & "A" & F
MsgBox ActiveCell & F
'--
Do
Range("a1:a100").FindNext(After:=ActiveCell).Activate
If ActiveCell.Row <> F Then
MsgBox ActiveCell & ActiveCell.Row
s = s & ",A" & ActiveCell.Row
End If
Loop While ActiveCell.Row <> F
'---
MsgBox "終わり"
MsgBox s
ActiveSheet.Range(s).Select
Selection.EntireRow.Delete
End Sub
「りんご」となっているところへ、A=InputBox("条件")のAで置き換えること。
例データ A1:A7
りんごパイ
みかん
りんご
なし
ぶどう
みかん
りんご
結果 A1から
みかん
なし
ぶどう
みかん
もっとテストが必要かもしれないが、とりあえず。
    • good
    • 0
この回答へのお礼

お答えありがとうございます。
要所ごとに説明もつけていただき、
勉強になりました。

お礼日時:2008/01/23 14:50

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