• ベストアンサー

VBA 任意の文字があるセルの行を削除したい

エクセルVBAで、次のような作業をしたいのですが、記述がわかりません。 A200~A500のセルに任意の文字(たとえば「A」)が表示(一致)されていたら そのセルの行を削除する。 範囲は一定です。 よろしくお願いします。 WIndows7SP3/Excel2013

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.4

はて? 回答した通りに操作すると、だいたいこんなのが録れます。 Sub Macro1() ' ' Macro1 Macro ' '  Rows("200:200").Select  Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove  Range("A200").Select  ActiveCell.FormulaR1C1 = "dummy head"  Range("A201").Select  Application.Goto Reference:="R200C1:R501C1"  Selection.AutoFilter  ActiveSheet.Range("$A$200:$A$501").AutoFilter Field:=1, Criteria1:="A"  Rows("200:502").Select  Selection.Delete Shift:=xlUp End Sub ご自分のやってみたのと比べて、どこが上手くいかなかった(のですか?そもそも回答した内容に対してどこが上手くなくて追加ご質問されてるのか、いったいどごが追加ご質問なのか、それとも単なる愚痴?雑談?なのか判りかねるのですが)のか参考にして、適切に応用してみてください。

noro6857
質問者

お礼

すみません。「うまくゆかない」というのは今回のことではなく今まで自分でやってうまくゆかなかったのでこの質問をさせてもらったという意味で、誤解させてしまってすみませんでした。 それと回答2については、"A"というのが存在する文字列と勘違いしてしまいました。理解できました。 なおファイル取得は別な質問でさせていただきます。 今回はどうもありがとうございました。

その他の回答 (3)

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.3

>記述がわかりません では「新しいマクロの記録」の機能を使い、正しいマクロの書き方をエクセルに教えてもらいながら勉強すると、とても参考になります。 #ただまぁ、どういう具合にエクセルを操れば(その通りにエクセルマクロに再現させれば)あなたの目的が達成できるのか、マクロ以前にエクセルの使い方の知識が必要にはなってきますが。良くわからないプログラム言語を今から勉強するのと、どっちが簡単かというお話です。 >A200~A500のセルに任意の文字(たとえば「A」)が表示(一致)されていたら 手順例: 新しいマクロの記録を開始する 200行目に一行、空の行を挿入する 空のA200セルに dummy head と記入する A200~A501の(一定の)セル範囲を選択する オートフィルタを取り付ける あなたが実際にやりたい条件(たとえば「セルの値がAに等しい」)で、「消したいデータ」を抽出する 200行から502行を行選択、行番号を右クリックして行削除する マクロの記録を終了する(「マクロの記録」ボタンが「記録終了」ボタンに変わっているのでクリックする)。 #参考 新しいマクロの記録: エクセル画面下端のステータスバーを右クリックしてマクロの記録を表示、クリックして開始します 参考: http://allabout.co.jp/gm/gc/396876/ マクロの記録先はとりあえず「作業中のブック」にします 必要に応じて記録できたマクロを表示して、自分が操作した手順がどのようにマクロに翻訳されたのか参考にしてください。 記録されたマクロを見ながら、逆にどう操作したらもっと簡単になるのか考えてみるのも、エクセルを使いこなす上での良い材料になります。 #コタエを教えて欲しいんで、「やり方」とか聞いてないご相談だったときはスルーしてください。

noro6857
質問者

お礼

ありがとうございます。 たしかにおっしゃるとおり、記述の仕方を理解してゆきたいと思っています。 マクロの記録を利用して作ることもありますが、いつも悩むのはマクロの記録で範囲の指定が思うようにできません。 たとえばa200からf500までを範囲にしたい場合、 a200にカーソルをおくだけではなんの反応もありません。 それでF5でA200にとばしそこで右矢印でFまで動かし、更に下へ500まで動かしエンターとやっています。 (今回の場合はA列だけなので右移動がなく下へ500ですが) これを簡単にVBAなら記述できるのではないかと思いました。 そこから行いたいことをキーで操作します。 (空白セルでの行削除の場合、F5の空白セル選択と編集の行削除) 今回の場合は、参考VBAを教えていただき、それを応用したい場合どこをどのように直しているのかで、少しは仕組みが理解できるような気がして同時にお願いしています。 いいアドバイスありがとうございました

  • emaxemax
  • ベストアンサー率35% (44/124)
回答No.2

> cellがAでなく、空白の場合はどのようになりますでしょうか。 Cells(i, "A")は、A列i行目の意味です。(iに500から200が代入されます。) ならば、B列ならCells(i, "B")となるのはわかりますね? > cellがAでなく、空白の場合はどのようになりますでしょうか = "A" Thenを、= "" Then にァ得るだけです。 > このできあがったデータA列200からG列(削除されるので終端行は未定)をこのまま、テキストに貼り付けたいのですが、ファイル名生成とあわせてできるとありがたいです。 では、この質問は締め切って、あらたな質問とするのがここのルールのようですね。

  • emaxemax
  • ベストアンサー率35% (44/124)
回答No.1

では一例です。 Sub test01() Dim i As Long For i = 500 To 200 Step -1 If Cells(i, "A").Value = "A" Then Cells(i, "A").EntireRow.Delete End If Next End Sub 下から上に向かって行くところがポイントです。

noro6857
質問者

お礼

さっそくありがとうございました。 おかげさまでうまくゆきました。 >下から上に向かって行くところが 行削除してゆくので下から行うのですね 応用でついでに教えていただきたいのですが、 cellがAでなく、空白の場合はどのようになりますでしょうか。 また、このできあがったデータA列200からG列(削除されるので終端行は未定)をこのまま、テキストに貼り付けたいのですが、ファイル名生成とあわせてできるとありがたいです。範疇外でしたらけっこうですのでよろしくお願いします。

noro6857
質問者

補足

追加質問ですが、この記述でA列というのはどこで指定しているのでしょうか。もしB列だったらどこを修正することになりますか?

関連するQ&A