マクロで変数を使用して複数列を削除する方法

このQ&Aのポイント
  • Excel 2013でマクロを使用して複数列を削除する方法について説明します。
  • 特定の列を削除する際に、変数を使用する方法です。
  • 具体的な例として、17列目から21列目までの5列を削除する方法を解説します。
回答を見る
  • ベストアンサー

マクロで変数を使用して複数列を削除

エクセル2013です Range("B:C").Delete ' 列「B ~ C」を削除 Range(Columns(2), Columns(3)).Delete ' 列「B ~ C」を削除 Range("D:D").Delete ' 列「D」を削除 ですが で変数を使って Range(Columns(17), f).Delete ですと動作しません。 ウォッチで見るとfには21がセットされています。 17列目から21列目までの5列が列削除される予定です。 どうもRangeとCellsで片方が変数の場合記述がわかりません。 よろしくお願いします。

  • gx9wx
  • お礼率95% (440/460)

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

  • ベストアンサー
  • eden3616
  • ベストアンサー率65% (267/405)
回答No.2

ウォッチで見るとfには21がセットされています。 Range(Columns(17), 21).Delete で動作しないものはどうにもならないでしょう。 そういう仕様なんですから。 Range(Columns(17), Columns(21)).Delete で動作することはわかりますよね? Range(Columns(17), Columns(f)).Delete としましょう。

gx9wx
質問者

お礼

変数はかこってはいけない と思っていました。 ありがとうごじました。

その他の回答 (1)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

こんばんは! >変数を使って >Range(Columns(17), f).Delete >ですと動作しません。 と >ウォッチで見るとfには21がセットされています。 >17列目から21列目までの5列が列削除される予定です。 を考慮して、単純に Sub Sample1() Dim f As Long f = 21 Range(Columns(17), Columns(f)).Delete End Sub みたいな感じではダメですか?m(_ _)m

gx9wx
質問者

お礼

教えていただいた内容で 思っていたように動作しました。 処理の都度、変数fは変化しますが きちんと動作しています。 ありがとうございました。

関連するQ&A

  • エクセルマクロ 同じ操作をする複数の列の記述は?

    列の幅を調整するときに、同じ幅の列をまとめて記述する方法を教えてください。 個別に記述し、やりたいことはできているのですが、まとめて記述する方法が知りたいです。 Columns("A").ColumnWidth = 4.63 '各列の幅を変更 Columns("b").ColumnWidth = 8.38 Columns("C").ColumnWidth = 12.75 Columns("D").ColumnWidth = 6.38 Columns("e").ColumnWidth = 4.13 Columns("F").ColumnWidth = 4.63 Columns("g").ColumnWidth = 8.38 Columns("H").ColumnWidth = 12.75 AとF列=4.63 をどのように記述したらいいのでしょうか

  • 【VBA】複数列を削除したい。おわかりになられる方・・・

    列の削除 '単数列の場合  Columns("C").Delete    'C列のみを削除 '複数列の場合  Columns("C:H").Delete 'C列~H列を削除 でいけることはわかるんですが、 上の例で行くとC列のみを削除を数字で列数を指定して  Columns(3).Delete でもいけますよね。 でも下の用に  Columns(3:8).Delete のように数字で列数を指定して一度に消すことはできないのでしょうか? エラーになるのですが何か特別な演算子が入りますか?

  • EXCELの列複数削除

    VB6.0で開発しています。 下のようにEXCELの列を複数削除していますが 思うように削除されません。 削除はされるのですが B列を削除してから次C列を削除となってしまっているので C列を削除する時は元々のC列ではなく B列を削除してからのC列を削除してしまいます。 どう直せばいいのでしょうか? お願いします。 Private Sub Command2_Click() Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet Dim B As Integer Dim C As Integer Dim D1 As Integer Dim E As Integer Dim G As Integer Dim H As Integer Dim K As Integer Dim L As Integer Dim M As Integer Dim N As Integer Dim P As Integer Dim R As Integer Dim T As Integer Dim U As Integer Dim V As Integer Dim Y As Integer Dim Z As Integer Dim AA As Integer Dim AB As Integer Dim AC As Integer Dim AD As Integer Dim AE As Integer Dim AF As Integer Dim AG As Integer Dim AH As Integer Dim AI As Integer Dim AJ As Integer Dim AL As Integer Dim AM As Integer Dim AP As Integer Dim AQ As Integer Dim AR As Integer Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Open("C:\Users\maki\Documents\Book1") Set xlSheet = xlBook.Worksheets("Sheet1") xlApp.Visible = True B = 2 C = 3 D1 = 4 E = 5 G = 7 H = 8 K = 11 L = 12 M = 13 N = 14 P = 16 R = 18 T = 20 U = 21 V = 22 Y = 25 Z = 26 AA = 27 AB = 28 AC = 29 AD = 30 AE = 31 AF = 32 AG = 33 AH = 34 AI = 35 AJ = 36 AL = 38 AM = 39 AP = 42 xlSheet.Cells(1, C).EntireColumn.Delete xlSheet.Cells(1, D1).EntireColumn.Delete xlSheet.Cells(1, E).EntireColumn.Delete xlSheet.Cells(1, G).EntireColumn.Delete xlSheet.Cells(1, H).EntireColumn.Delete xlSheet.Cells(1, K).EntireColumn.Delete xlSheet.Cells(1, M).EntireColumn.Delete xlSheet.Cells(1, N).EntireColumn.Delete xlSheet.Cells(1, P).EntireColumn.Delete xlSheet.Cells(1, R).EntireColumn.Delete xlSheet.Cells(1, T).EntireColumn.Delete xlSheet.Cells(1, U).EntireColumn.Delete xlSheet.Cells(1, V).EntireColumn.Delete xlSheet.Cells(1, Y).EntireColumn.Delete xlSheet.Cells(1, Z).EntireColumn.Delete xlSheet.Cells(1, AA).EntireColumn.Delete xlSheet.Cells(1, AB).EntireColumn.Delete xlSheet.Cells(1, AC).EntireColumn.Delete xlSheet.Cells(1, AD).EntireColumn.Delete xlSheet.Cells(1, AE).EntireColumn.Delete xlSheet.Cells(1, AF).EntireColumn.Delete xlSheet.Cells(1, AG).EntireColumn.Delete xlSheet.Cells(1, AH).EntireColumn.Delete xlSheet.Cells(1, AI).EntireColumn.Delete xlSheet.Cells(1, AJ).EntireColumn.Delete xlSheet.Cells(1, AL).EntireColumn.Delete xlSheet.Cells(1, AM).EntireColumn.Delete xlSheet.Cells(1, AP).EntireColumn.Delete Set xlApp = Nothing Set xlBook = Nothing Set xlSheet = Nothing End Sub

  • 条件にて行削除をするをマクロで高速化したい

    シート(最初)のA,B,C列を連結した値と シート(残)のA,B,C列を連結した値を照合させ 同じ値の場合は シート(残)の該当行を削除です。 シート(最初)は6,182行 シート(残)は7,561行です。 VLookupを使って処理時間5分です。 VLookupを使わない記述で25分です。 20,000行位のデータを処理したいのですが時間が不安です。 別スレで 「VLookupで処理3分をdictionaryオブジェクトで1秒以内にする方法」を 教えていただきましたが、流用ができません。 シート(残)内にもシート(最初)内にも重複行はありません。 私の記述は「F列を検索用に使用」となっていて F列にデータがある場合、都度記述を書換えないと 使えないので、そこも対応したいです。 照合させる値はA,B,Cの連結値というのは変わらないのですが データがある範囲は都度変化する為です。 ・A~E列とかA~H列とか ・シート残はA~E列、シート最初はA~G列とか 記述そのものを教えてください。よろしくお願いします。 Sub 自動重複削除F列使用() 'シート(最初)のA,B,C列とシート(残)のA,B,C列が一致した行は 'シート残の行を削除 'F列を検索値として使用。 Dim Line As Long Dim LastRow As Long Dim myRange As Range Dim Flag 'シート「最初」のF1に、A,B,C列を結合した値を転記 With Sheets("最初") Set myRange = .Range("F2:F" & .Cells(Rows.Count, "A").End(xlUp).Row) .Range("F2").FormulaR1C1 = "=RC[-5]&RC[-4]&RC[-3]" 'シート「最初」のF2からデータのあるところまで 'F1の規則でデータ貼付 .Range("F2").AutoFill Destination:=myRange End With 'シート「残」のF1に、A,B,C列を結合した値を転記 Sheets("残").Select LastRow = Cells(Rows.Count, "A").End(xlUp).Row Range("F2").FormulaR1C1 = "=RC[-5]&RC[-4]&RC[-3]" 'シート「最初」のF2からデータのあるところまで 'F1の規則でデータ貼付 Range("F2").AutoFill Destination:=Range("F2:F" & LastRow) On Error Resume Next '双方のシートのF列を照合させ、ヒットした行は 'シート「残」から行削除をする For Line = LastRow To 2 Step -1 Flag = WorksheetFunction.VLookup(Cells(Line, 6).Value, myRange, 1, 0) If Err.Number = 0 Then Rows(Line).Delete xlUp Else Err.Clear End If Next Line '検索に使用したF列を削除 Sheets("残").Select Columns("F:F").Select Selection.Delete Shift:=xlToLeft Sheets("最初").Select Columns("F:F").Select Selection.Delete Shift:=xlToLeft Sheets("残").Select Range("A1").Select End Sub ●別方法 Sub 自動重複行削除F列未使用超遅() 'VLOOKUP無 'シート(最初)のA,B,C列とシート(残)の 'A,B,C列が一致した行はシート(残)の行を削除 Dim ws1, ws2 As Worksheet Dim i, j As Long Set ws1 = Worksheets("最初") Set ws2 = Worksheets("残") For i = 2 To ws1.Cells(Rows.Count, 1).End(xlUp).Row For j = ws2.Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1 If ws1.Cells(i, 1) = ws2.Cells(j, 1) And ws1.Cells(i, 2) = ws2.Cells(j, 2) And _ ws1.Cells(i, 3) = ws2.Cells(j, 3) Then ws2.Rows(j).Delete (xlUp) End

  • 列を削除して行きたい。

    すみません、誰か教えて頂けませんか。 1行目にタイトルが書いてあり、その下が空欄だと 列を削除しようと考えて下記の様に記述しましたが、 2列目しか削除されません。 何か、記述がおかしいのか、他にやり方があるのか 教えて頂けませんでしょうか。 宜しくお願いします。 Co = Cells(1, Columns.Count).End(xlToLeft).Column For ii = 2 To Co If Cells(1, ii).End(xlUp).Row = 1 Then Cells(1, ii).EntireColumn.Delete End If Next ii

  • マクロで列削除をするには

    基本的な質問ですいません。 マクロで列単位で削除する方法って Columns("B:B").Delete っていうのが基本だと思いますが、 他になんか活用的なソースってありませんか??

  • セルの値が指定条件なら対象行を削除するマクロ

    ボタンクリックでプロシージャーが起動します。 そのマクロの中で以下の2つの処理を追加させたいです。 マクロの記述を教えてください。 A~F列までデータが有ります。 1行目は項目で2行目からデータがあります。 行数は都度相違しますが10,000行はあります。 (1) F列の値は標準で、ここが0の場合その行全体を削除します。 入っている値の例 -1234→削除しない 345→削除しない 12346→削除しない 0→削除する セルの空白はぜったいありません。 (2)-1 E列の値は標準で英数字3ケタです。ところどころ空白があります。 E列の値が先頭7B以外は行全体を削除します。 7B1→削除しない 7B2→削除しない 7BW→削除しない 77C→削除 47B→削除 空白→削除 F列を優先なのでE列が7Bで始まっている行でも F列が0なら削除となります。 (2)-2 (2)-1と同じでE列の値は標準で英数字3ケタです。 ところどころ空白があります。 E列の値が 先頭 7Bと72以外 又は CとDと7B以外は 行全体を削除します。 のように(2)-1のように1条件ではなく2~複数になる。 それが1文字の場合、2文字の場合、3文字全部の場合がある F列を優先なのは(2)-1と同じです。 条件例 ・Cと73以外 ・CとFと72以外 ・Gと7Vと8D以外 ・Gと88と8D5以外 以下の記述ですが、(1)は思ったとうり動作しましたが ●の部分が分かりません。 現在の記述では7BB以外は全部行削除されてしまいます。 (2)-1と(2)-2の対応のために 記述内で(2)-1と(2)-2を 書き換える事が出来るような記述にしたいです。 あと凄く処理が遅いので高速化もしたいです。 よろしくお願いします。 Sub test01() 'A~K列のデータにて 'E,F,H,I,K列を列削除する Columns("E:F").Select Selection.Delete Shift:=xlToLeft Columns("F:G").Select Selection.Delete Shift:=xlToLeft Columns("G:G").Select Selection.Delete Shift:=xlToLeft 'データがA~F列になりました。 With ActiveSheet 'アクティブなシートについて x = .UsedRange.Cells(.UsedRange.Count).Row 'xに最終行を取得 For i = x To 2 Step -1 '最終行から2行目まで下から順に 'F列が"0"だったらその行を削除 If .Cells(i, 6) = 0 Then .Rows(i).Delete Next '繰り返し End With With ActiveSheet 'アクティブなシートについて x = .UsedRange.Cells(.UsedRange.Count).Row 'xに最終行を取得 For i = x To 2 Step -1 '最終行から2行目まで下から順に 'E列の値の先頭文字が"7B"でなかったら削除(空白の場合も削除) ●If .Cells(i, 5) <> "7BB" Then .Rows(i).Delete Next '繰り返し End With End Sub

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

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

  • 複数のシートにまたがる列の削除について

    こんばんは、複数のシートを選択して特定の列を削除するVBAについて質問させてください。Sheet1とSheet2のA~C列を削除したく、以下のVBAを入力しましたが、削除されるのはSheet1のA~C列のみでSheet2に同様の処理が行われません。 手作業でやると複数のシートを選択のうえ列の削除ができるので、VBAでできないということはないと思うのですが、どのように記述すればよいのでしょうか・・・?!どなたかご教授よろしくお願いいたします! Sheets(Array("Sheet1","Sheet2")).Select Range("A:C").Delete Shift:=xlToLeft

  • 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の知識が乏しく、組み立て方について理解が無いため、どうすればよいかさっぱりわからず、、 こちらで質問させて頂きました。。。 何卒宜しくお願い致します。

専門家に質問してみよう