• ベストアンサー

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

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

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答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/7940)
回答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% (43/121)
回答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% (43/121)
回答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

  • VBAで任意の文字のその上の行を全て行削除したい

    エクセルのVBAで困っています よろしくお願いします。 VBAで任意の文字を探し その上の行を全て行削除したいのです その文字は必ず2~30行の中にあります。列はJからですが、行はランダムで毎回違います。 作業の途中までのマクロは記録コマンドで作成し、ボタンも作成してあります。 これができれば後はまた記録したマクロにて作業ができます。 アドバイス よろしくお願いします!

  • VBA 行の削除

    全くの初心者で、初めて質問させていただきます。 A列には、数字・空白・文字を入力したセルが混在しています。 そのA列の数字の内 0 のセルが入力されている行のみを削除するVBAの記述の仕方を教えて下さい。 宜しく御願い致します。

  • EXCELで文字検索したセルの行と前後の行の削除の方法

    EXCEL-VBAを使ってワークシートのデータ整形をしています。 ある文字列を検索し、その文字列を含む行とその前後の行を削除するロジックを記述したいのですがうまくできません。 例:検索文字列「合計」、"合計"の入っているセル「B120」のとき、B119~B121の3行分の行削除をしたい。 おそらく検索された文字列を含むセルの行番号を取得してその番号-1と+1の行を選択して削除すればよいのではないかと思ってるのですが、もっと良い方法があるのでしょうか? よろしくお願いします。

  • VBA 21行目~表の最終行まで行削除

    WinXPでExcel2003を使用しています。 VBAで、21行目から表の最終行までの行削除するマクロを作りたいのですが、上手くいきません。 Sub 行削除() Range("A21").CurrentRegion.Select Selection.Delete End Sub だとその上下に文字が入ったセルがあると一緒に削除されてしまうので、 どの様にすればいいのか分からないでいます。 最終行を何行目と特定せずに表の最終行を取得して、 削除範囲を設定出来るものが希望です。 どなたか教えて下さると助かります。 よろしくお願い致します。

  • エクセルの行削除VBA

    次の条件を満たすエクセルVBAの記述を教えてください。 A列に「ページTOP」の文字がある行から文末までの行を削除 A列に「PROGRAM…」のある行と次の1行を残して「4:00~…」を含む行までを削除 (例 A10 PROGRAM… A11 AB A12 hij A13 tuy A14 4:00… ※A12~A14を削除 A1からA列に「PROGRAM…」のある行まで行削除 Excel2010/WindowsXP

  • VBAで任意の文字の右隣のセルの結合を解除したい

    エクセルの初心者です。VBAで困っています よろしくお願いします。 VBAで任意の文字を探し 右隣のセルの結合を解除したいのです。 その文字は必ずC列の中に2つあります。行はランダムで毎回違います。 作業の途中までのマクロは記録コマンドで作成し、ボタンも作成してあります。 できましたらなにぶん初心者ですので、分かりやすいシンプルなものを… これができれば後はまた記録したマクロにて作業ができます。 アドバイス よろしくお願いします!

  • VBAで色の付いているセルの行削除

    VBAで色の付いているセルの行を削除することは出来ないでしょうか? 量が多すぎて一つ一つ削除すのは大変で間違えて削除してしまいそうなので・・・ - 文字または数字 ■ 色の付いたセル(赤)  A B C D E F・・・ 1- - - - - - 2- - - - - - 3- - - ■ - - 4- - ■ - - - 5- - ■ - - - 6- - - - - - 7- - - ■ - - 8- - ■ - - - 9- - ■ - - - 10- - - - - -       ↓  A B C D E F・・・ 1- - - - - - 2- - - - - - 6- - - - - - 10- - - - - - よろしくお願いします。

  • EXCEL: セルの先頭に任意の文字列を入れる

    Excel2013 Excelのセルに入力された文字列の先頭に、任意の文字列を入れたいのですが、どのような方法があるでしょうか? マクロが必要でしたら記述をお願いします。マクロが不要な方法があれば、なお便利です。 文字列は1~3文字程度で任意なものを入れたいのですが、既存セルの先頭に入れるだけです。ただ適用セルが数千あるため、手作業を避けたいと考えています。

  • excel VBA で”27行目ごとに3行削除”について

    VBAはまったく初めてです。 早急に作業を行わなければいけないことがでてきたのですが、持ち時間がないので、VBAでできないものかと思いました。 マクロの記録をやってみたのですが、うまくいきません。 記述をする場所はわかります。 毎27行目以降3行を削除していきたいのです。 どう記述していけばいいのか、どなたか教えていただけないでしょうか?

  • VBA アクティブ行の削除

    エクセルで、アクティブにしているセルの行のA列からL列のみを削除というマクロを組みたいのですが、どのように記述したらいいのでしょうか? アクティブなセルはA列~L列のどこにあっても、その行のA列-L列を削除というようにしたいです。 (例1) A1がアクティブだった場合、A1~L1が削除される (例2) B4がアクティブだった場合、A4~L4が削除される すみませんが、お分かりになる方がいましたらよろしくお願いいたします。

専門家に質問してみよう