vbaで指定文字を含まない列を削除する方法

このQ&Aのポイント
  • vbaを使用して、指定文字を含まない列を削除する方法について教えてください。
  • 現在、指定文字を含む列を削除するプログラムがありますが、それを指定文字を含まない列を削除するために変更したいです。
  • 生かしているプログラムを修正することで、どのように指定文字を含まない列を削除することができるのでしょうか?教えてください。
回答を見る
  • ベストアンサー

vbaで指定文字を含まない列を削除するとき

vbaで指定文字を含まない列を削除したいです。 指定文字を含む列を削除するプログラムはできましたが、これを指定文字を含まない列を削除に変更したいです。 途中まで作ったこのプログラムを生かして、どう変更すれば含まないにできますか? 教えて頂けると助かります。 Private Sub CommandButton1_Click() Sheets("シート1").Select Do While (True) Rows("5:5").Select Set myselect = Selection.Find(What:="あああ", LookAt:=xlPart) If myselect Is Nothing Then Exit Do Columns(myselect.Column).Select Selection.Delete Shift:=xlUp Loop End Sub

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

  • ベストアンサー
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.1

 何故、 >途中まで作ったこのプログラムを生かして という条件を付けておられるのか意味が解りません。  Findメソッドは使わずに例えば以下の様にされると良いと思います。 Private Sub CommandButton1_Click() Dim c As Range, myRange As Range With Sheets("Sheet1") Set myRange = .Range(Cells(5, 1), _ Cells(5, .Cells.SpecialCells(xlCellTypeLastCell).Column)) For Each c In myRange If Not c.Value Like "*あああ*" Then c.ClearContents Next c On Error Resume Next myRange.SpecialCells(xlCellTypeBlanks).EntireColumn.Delete On Error GoTo 0 End With End Sub

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

質問をもう少し丁寧にすること。 質問のコード例だと、見つかった行だけ削除しているのでは。 それなのに今回の質問では>含まない列を削除したいです、となっているが、列全体を削除してよいのか。 下記コメントを見てください。  「削除は終りの方(行か、列)から」のルールを使っている。 Not myselect Is Nothing の判定のやり方に注意。 たとえば Sub test01() Sheets("Sheet1").Select For c = 6 To 2 Step -1 Application.FindFormat.Clear Columns(c).Select MsgBox "AA"  ’削除状況の確認。実際の場合はコメント化 Set myselect = Selection.Find(What:="あああ", LookAt:=xlPart) 'If myselect Is Nothing Then 'あああ が1セルも無ければ削除 If Not myselect Is Nothing Then 'あああ が1セルでもあれば削除 Columns(c).EntireColumn.Select Selection.Delete Shift:=xlLeft End If Next c End Sub ではどうか。 Application.ScreenUpdating=False、True  などは入れること。

関連するQ&A

  • エクセル 特定文字列のある列の削除と保存

    こんにちは いつもお世話になっています。 エクセル2010です 1行目に文字列が入力されています。 (1)1行目に特定文字列を含む列を削除するマクロ。 (2)1行目に特定文字列を含む列だけを残して、他はすべて削除するマクロ を教えてください。 2つ質問するのが不適当ならどちらか一方でも構いません。 指定したい文字列は複数ありますので「文字列A、文字列B、・・・」等で追記できる形だと助かります。フォーマットが決まっているので指定文字列を頻繁に変えることはありません。 特定行を削除するマクロはネット上でヒットしたんですが、列は見つかりませんでした。 マクロ記録で、文字列検索、列削除をしましたが、連携のさせ方がわかりません。 よろしくお願いします。 Sub Macro1() ' ' Macro1 Macro ' ' Rows("1:1").Select Selection.Find(What:="あ", After:=ActiveCell, LookIn:=xlFormulas, LookAt _ :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _ False, MatchByte:=False, SearchFormat:=False).Activate Selection.FindNext(After:=ActiveCell).Activate Columns("A:A").Select Selection.Delete Shift:=xlToLeft End Sub

  • VBAによる列削除について教えて下さい

    VBA初心者です。いろいろと調べて見ましたが、「C列からアクティブセルの前列までを削除」する方法が分かりません。下の記述は「C列からX列」としていますが、X→「アクティブセルの前列」と読み替えるにはどうすればよろしいでしょうか。よろしくご指導下さい。 Sub 列削除() Columns("C:X").Select Selection.Delete Shift:=xlToLeft End Sub

  • VBA Findの使い方

    以下のコードは、最初の見つかったXYZに対しては、正しく処理されますが、 その後はうまくいきません。 なぜ、なのでしょうか? また、どうすれば見つかったすべてのXYZに対して処理ができるのでしょうか? (B列からxyzを検索し、その隣のセルに99を入力する) Sheets("Sheet1").Select Do While (True) Columns("B:B").Select Set mySelect = Selection.Find(What:="XYZ") If mySelect Is Nothing Then Exit Do mySelect.Offset(, 1).Value = 99 Loop End Sub

  • VBA 右端列の削除

    このたび初めて質問させていただきます。 周囲にVBAを扱うひとがいないため、初歩的(たぶん?)な質問をさせてください。 以下のようなマクロを記録したのですが、一部を編集したいと考えております。 Columns("F:H").Select Selection.Insert Shift:=xlToRight Columns("A:B").Select Selection.Cut Range("F1").Select ActiveSheet.Paste Columns("J:J").Select→J列固定ではなく右端の列と設定したい。 Selection.Cut Range("H1").Select ActiveSheet.Paste Columns("A:B").Select Selection.Delete Shift:=xlToLeft Columns("J:J").SelectをJ列固定ではなく右端の列を1列設定し切り取りがしたいのです。Range("A2").End(xlToRight).Select ActiveCell.Offset(-1,0).End(xlDown).Select と書き換えてみたのですが、うまく作動しませんでした。 どなたか教えていただけませんでしょうか?

  • VBA 特定の文字列を含む行を削除する方法

    特定の文字列を含む行を削除する方法が知りたいです。 行を削除する方法はWebで見つけたのですが↓ ---------------------------------------------------- Sub 特定の文字列を含む行を削除() Dim c As Range Dim myRow As Long With Range("A:A") Set c = .Find("特定の文字列") Do While Not c Is Nothing Rows(c.Row).Delete shift:=xlUp Set c = .Find("特定の文字列") Loop End With End Sub ---------------------------------------------------- ↑行を指定している箇所のRowsを Columns  RowをColomn に変更して以下の様にしてみました、   Columns(Colomn,c).Delete shift:=xlUp だめでした、、、。 VBAの知識が乏しく、組み立て方について理解が無いため、どうすればよいかさっぱりわからず、、 こちらで質問させて頂きました。。。 何卒宜しくお願い致します。

  • 特定文字列を含む行を削除するマクロ

    すみませんどなたか教えてください。 エクセルで商品の在庫管理をしておりまして、AP列に製品メーカー名が入っているのですが、 いくつかの(数十個)メーカーを省き削除したく思い、以下のようなマクロをググって作ってみましたが、 上手く動きませんでした。 1つのメーカーだけ記載した場合はうまく動きました。 やりたいことは1つのマクロの中に、数十個のメーカー名を記入しておき、そのメーカーを全件 検索して、AP列に文字列が含まれる場合は、その行を削除したいです。 宜しくお願い致します。 ~~~~~~ Sub DelLines1() Dim R As Range Do Set R = ActiveSheet.Range("AP:AP").Find(What:="softbank", LookAt:=xlPart) If R Is Nothing Then Exit Sub R.EntireRow.Delete Loop Sub DelLines2() Dim R As Range Do Set R = ActiveSheet.Range("AP:AP").Find(What:="docomo", LookAt:=xlPart) If R Is Nothing Then Exit Sub R.EntireRow.Delete Loop Sub DelLines3() Dim R As Range Do Set R = ActiveSheet.Range("AP:AP").Find(What:="au", LookAt:=xlPart) If R Is Nothing Then Exit Sub R.EntireRow.Delete Loop End Sub

  • csvファイルを取り込み指定の形式にする

    EXCELでcsvファイルを取り込み指定の形式にして、csvファイルとして 保存するマクロを組みたいです。 途中までマクロの記録機能を使い作ったものです。 Sub csvファイルの取り込み() 'Windows("a.csv").Activate '←ここでファイルを選択する形式にしたい。 Columns("C:H").Select Selection.ClearContents Columns("A:A").Select Selection.Delete Shift:=xlToLeft Range("A1").Select ActiveCell.FormulaR1C1 = "Number" Rows("2:2").Select Selection.Delete Shift:=xlUp Rows("1:1").Select Selection.AutoFilter Selection.AutoFilter Field:=1, Criteria1:="<>C*", Operator:=xlOr, _ Criteria2:="=C1*" ', Operator:=xlOr, Criteria2:="=AABC*" Rows("4:13").Select '←ここをフィルタで選択された行を削除するように変更したい。 Selection.Delete Shift:=xlUp Selection.AutoFilter Field:=1 Range("A1").Select End Sub マクロの流れとして ・まずcsvファイルを取り込む ・C列からH列までを削除(もしくは数値をクリア) ・その後、A列を削除 ・A1セルに文字があるのでその文字を"Number"に変更 ・A列にある指定の文字列をフィルタで抽出してその行を削除  (抽出文字列は以下の3パターン。) Cで始まらない文字を抽出 or C1で始まる文字を抽出 or AABCで始まる文字を抽出 ・以上の作業を終了したら取り込んだファイル名の 左から11文字+"ABC"の文字をあわせてファイル名として CSVファイルで保存する 長くなってすいません。助けてください

  • 【エクセルVBA】指定した文字列の抽出方法について教えてください。

    下記のように、"AAA-1"という文字列を指定しシート1のあるレンジを検索して見つかったらその下のセルのデーターをシート2にコピーしてやり、次に"AAA-2"という文字列を指定して同じように文字列を変えて繰り返し抽出したいのですがこの方法では抽出して欲しくない"AAA-11"や"AAA-12"も抽出されてしまいます。数字の文字数が規定ができれば解決しそうですがいまいちわかりません。アドバイスよろしくお願いいたします。 IDNo = "AAA-1" With Worksheets("Sheet1").Range("A1:P1") Set IDchoice = .Find(What:=IDNo, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, _ SearchDirection:=xlNext, MatchCase:=False, MatchByte:=False) If Not IDchoice Is Nothing Then FirstAddress = IDchoice.Address Do Sheets("DATA2").Select Cells(IDchoice.Row+1, IDchoice.Column).Copy Sheets("Sheet2").Select Cells(1, 1).PasteSpecial ・ ・

  • 列をアルファベットではなく数値で指定するには

    Vbaで条件付き書式を付ける場合、 列をアルファベットではなく数値で指定するにはどうすればいいですか? Sub Macro() Dim i As Long i = 1 Columns(i).Select Selection.FormatConditions.Delete Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=A1=""aaa""" Selection.FormatConditions(1).Font.ColorIndex = 3 '文字色を赤にする End Sub この場合の、 Formula1:="=A1=""aaa"""のA1を Cells(1,i)みたいにしたいのですが、やり方を教えてください。

  • Excelにて、列の幅をマクロで変えるには?

    今、提出用の資料作成にて、 従業員の稼動実績を記載した表部分を隠して A3にかたち良く収まるように印刷できるよう列の調整をしようと マクロの記録を行い、下記のようなプログラムを得ました。 ところが、実行すると("U:AD")の部分は隠れているのですが、 それ以外は全て、列の幅が"20"になってしまいます。 一体どのようにすれば列の幅を記載通りに調整できるのでしょうか? お教え下さい。宜しくお願いします。 * * * * * * * * * * * * * * * * * Sub 稼動実績を隠す() ' ' 稼動実績を隠す Macro ' マクロ記録日 : 2007/9/27 ユーザー名 : ######## ' ' Columns("A:M").Select Range("A2").Activate Selection.ColumnWidth = 8 Columns("N:O").Select Selection.ColumnWidth = 16 Columns("P:P").Select Selection.ColumnWidth = 20 Columns("R:T").Select Selection.ColumnWidth = 20 Columns("U:AD").Select Selection.ColumnWidth = 0 Columns("AE:AF").Select Selection.ColumnWidth = 20 Columns("AG:AG").Select Selection.ColumnWidth = 8 Columns("AH:AH").Select Selection.ColumnWidth = 54 Columns("AI:AP").Select Selection.ColumnWidth = 20 Columns("AQ:AQ").Select Selection.ColumnWidth = 8 Columns("AR:AS").Select Selection.ColumnWidth = 20 Range("A2").Select End Sub