• 締切済み

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

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

みんなの回答

  • hotosys
  • ベストアンサー率67% (97/143)
回答No.3

Sub 列削除() Range(Columns("C:C"), Columns(ActiveCell.Column - 1)).Select Selection.Delete Shift:=xlToLeft End Sub または、 Sub 列削除() Range(Columns(3), Columns(ActiveCell.Column - 1)).Select Selection.Delete Shift:=xlToLeft End Sub ActiveCellの列チェックあり Sub 列削除() If ActiveCell.Column > 3 Then Range(Columns(3), Columns(ActiveCell.Column - 1)).Select Selection.Delete Shift:=xlToLeft End If End Sub Select入れない場合 Sub 列削除() If ActiveCell.Column > 3 Then Range(Columns(3), Columns(ActiveCell.Column - 1)).Delete Shift:=xlToLeft End If End Sub Columns("C:X") X→「アクティブセルの前列」 と言う形式ならXは Left(ActiveCell.Offset(0, -1).Address(ColumnAbsolute:=False), 1) になるので、その形式がいいなら、 Sub 列削除() If ActiveCell.Column > 3 Then Range("C:" & Left(ActiveCell.Offset(0, -1).Address(ColumnAbsolute:=False), 1)).Delete Shift:=xlToLeft End If End Sub

balibali55
質問者

お礼

最後のAddress~のステートメントはなじみがなく、勉強してみます。 操作対象データは形式が決まっていて、列チェックの必要がないですが、 考え方が参考になりました。ありがとうございました。

  • keirika
  • ベストアンサー率42% (279/658)
回答No.2

Sub 列削除() Range(Columns("C"), Columns(ActiveCell.Column - 1)).Select Selection.Delete Shift:=xlToLeft End Sub でどうでしょうか。

balibali55
質問者

お礼

シンプルで分かりやすいご回答をありがとうございました。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

Sub 列削除()   Select Case ActiveCell.Column   Case Is < 24     Range(ActiveCell.Offset(0,1), Range("X1"))_       .EntireColumn.Delete xlToLeft   Case Is > 24     Range(ActiveCell.Offset(0,-1), Range("X1"))_       .EntireColumn.Delete xlToLeft   End Selelct End Sub といった具合でしょう X列が選択されていた場合は 削除を行いません # インデントは 全角スペースです

balibali55
質問者

お礼

ご回答ありがとうございました。 select caseというステートメントを初めて知り、応用できそうです。

関連するQ&A

  • エクセルVBAでエラーがでます。

    エクセルで以下のようなVBAをつくりましたが Columns("B:C").Select でエラーがでます。 初歩的なことですが教えてください。 Sub Macro3() ' ' Macro3 Macro Worksheets(1).Copy before:=Worksheets(1) Worksheets(1).Activate Columns("B:C").Select Selection.Delete Shift:=xlToLeft Columns("C:L").Select Selection.Delete Shift:=xlToLeft Columns("H:H").Select Columns("L:AA").Select Selection.Delete Shift:=xlToLeft 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で指定文字を含まない列を削除するとき

    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

  • VBAマクロエラー【オーバーフローしました。】

    以下のVBAマクロで突然エラーが出るようになってしまいました。 原因がわからず困っています。 どなたかご教授ください。 該当部分 :S = Range("B2").End(xlDown).Row エラーMrg:実行時エラー'6': オーバーフローしました ----------マクロ文---------- Sub 部担コード読み替え() Dim R_Count As Integer Dim P_Sheet As String Dim S As Integer 'データ取込用のファイルを開く Workbooks(D_Book).Activate Sheets("Data1").Select Columns("C:C").Select Selection.Insert Shift:=xlToRight Range("B2").Select S = Range("B2").End(xlDown).Row Range("C2:C" & S).Formula = "=SUBSTITUTE(SUBSTITUTE(RC[-1],""%"",""1""),""*"",""2"")" Range("C1").Value = "部担コード" Cells.Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues Columns("B:B").Select Application.CutCopyMode = False Selection.Delete Shift:=xlToLeft Range("A1").Select Sheets("Data2").Select Columns("C:C").Select Selection.Insert Shift:=xlToRight Range("B2").Select S = Range("B2").End(xlDown).Row Range("C2:C" & S).Formula = "=SUBSTITUTE(SUBSTITUTE(RC[-1],""%"",""1""),""*"",""2"")" Range("C1").Value = "部担コード" Columns("G:G").Select Selection.Insert Shift:=xlToRight Range("G2:G" & S).Formula = "=SUBSTITUTE(SUBSTITUTE(RC[-1],""%"",""1""),""*"",""2"")" Range("G1").Value = "キー" Cells.Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues Columns("B:B").Select Application.CutCopyMode = False Selection.Delete Shift:=xlToLeft Columns("E:E").Select Application.CutCopyMode = False Selection.Delete Shift:=xlToLeft Range("A1").Select End Sub

  • VBAの関して

    エクセルの1行目に特定の文字列を含んでいる場合、その列を削除したいのですが、列の削除がうまくいきません。 10列目まで処理をしたい場合、、単純にforループでiを1から10までまわし、特定の文字を含んでいなければ Columns(i).Select Selection.Delete Shift:=xlToLeft では駄目なのでしょうか? どなたか助言お願います。

  • このコードを実行するとエクセルがフリーズしてしまいます。

    とある為替データファイル(600KB)の編集をマクロで実行したい(何度も新規で編集するため)のですが画面がフリーズしてしまいます。たまに最後まで出来ます。長すぎるのでしょうか。省略できる部分があったら教えて欲しいです。(初心者です) 以下そのまま添付 Sub 画面を固定() Application.ScreenUpdating = False End Sub Sub いち() Call 画面を固定 Cells.Select With Selection.Font .Size = 9 .Strikethrough = False .Superscript = False .Subscript = False .OutlineFont = False .Shadow = False .Underline = xlUnderlineStyleNone .ColorIndex = xlAutomatic End With 'セルの結合を解除・折り返して全体を表示するの解除・文字を左詰で表示 With Selection .WrapText = False .Orientation = 0 .AddIndent = False .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False .HorizontalAlignment = xlLeft '(文字を左詰で表示) End With '列の幅 Selection.ColumnWidth = 2.38 '行の幅 Selection.RowHeight = 12 '列の幅を自動調整 Cells.Select Cells.EntireColumn.AutoFit 'A列の調整 Columns("A:A").ColumnWidth = 3 '不要行削除 Range("a:a,c:c,e:H,J:R,T:U,X:AA,AC:AO,AQ:Au,Aw:BB,BD:BG,BI:CC").Select Selection.Delete Shift:=xlToLeft '円マークを取る Cells.Replace What:="\", Replacement:="", LookAt:=xlPart, SearchOrder:= _ xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False '円の列の書式 Range("K:K,I:I").Select Selection.NumberFormatLocal = "#,##0_ ;[赤]-#,##0 " ' 列の入れ替え() '(建時) Columns("G:G").Select Selection.Cut Columns("B:B").Select Selection.Insert Shift:=xlToRight '(建値) Columns("G:G").Select Selection.Cut Columns("C:C").Select Selection.Insert Shift:=xlToRight Columns("H:H").Select Selection.Cut Columns("e:e").Select Selection.Insert Shift:=xlToRight 'スクロールで画面左に戻る ActiveWindow.ScrollColumn = 1 '仕切取引まで行削除 On Error GoTo line x = Application.WorksheetFunction.Match("仕切取引", Columns("A:A"), 0) If x = 1 Then Exit Sub Else Rows("1:" & x - 1).Delete End If Exit Sub line: MsgBox "見当たりません", vbCritical, "(>_<) " '一行目(仕訳取引)削除 Rows("1:1").Select Selection.Delete Shift:=xlUp 'オートフィルタ Rows("1:1").Select Selection.AutoFilter '不要列にかかったフィルタを削除 Columns("L:CE").Select Selection.Delete Shift:=xlToLeft End Sub よろしくお願いします。

  • 簡単なVBA

    エクセルで特定の列データを削除したいのですが シンプルな形を教えてください ちなみに今は以下のようなVBAを使っています。 Sub 特定の列を削除する() For i = Cells(1, Columns.Count).End(xlToLeft).Column To 1 Step -1 If Cells(1, i) = "りんご" Then Columns(i).Delete End If Next i For i = Cells(1, Columns.Count).End(xlToLeft).Column To 1 Step -1 If Cells(1, i) = "みかん" Then Columns(i).Delete End If Next i For i = Cells(1, Columns.Count).End(xlToLeft).Column To 1 Step -1 If Cells(1, i) = "ばなな" Then Columns(i).Delete End If Next i End Sub

  • excelのマクロが上手く動作しません

    excel2013で、シートのレイアウトを整えるマクロを以下のように作成しました。 しかし、いざ他のシートで試すと、そのシートと同時に特定のシートにもなぜかマクロが実行されてしまいます。(恐らく作ったときに使っていたシート) どうしたら今見ているシートだけにマクロを実行することができるでしょうか? ActiveWindow.Zoom = 85 ActiveWindow.Zoom = 70 Columns("A:A").ColumnWidth = 10.13 Columns("A:A").ColumnWidth = 10.63 Columns("B:B").ColumnWidth = 6.63 Columns("D:D").ColumnWidth = 20 Columns("D:D").ColumnWidth = 23.75 Columns("D:D").ColumnWidth = 24.63 Columns("E:E").ColumnWidth = 10.38 Range("E1").Select ActiveCell.FormulaR1C1 = "インボイス金額" ActiveCell.Characters(7, 2).PhoneticCharacters = "キンガク" Columns("F:F").Select Selection.Delete Shift:=xlToLeft Columns("G:G").Select Selection.Delete Shift:=xlToLeft Range("H9").Select Columns("G:G").ColumnWidth = 11.38 Columns("I:K").Select Selection.Delete Shift:=xlToLeft Range("J9").Select Columns("I:I").ColumnWidth = 15 Columns("J:J").ColumnWidth = 9.75 Columns("K:K").ColumnWidth = 9.5 Range("L2").Select Columns("L:L").ColumnWidth = 5.5 Columns("O:O").Select Selection.Delete Shift:=xlToLeft Selection.ColumnWidth = 13.88 Columns("P:P").Select Selection.Delete Shift:=xlToLeft Selection.ColumnWidth = 12.13 Selection.ColumnWidth = 13.25 ActiveWindow.ScrollColumn = 2 ActiveWindow.ScrollColumn = 3 ActiveWindow.ScrollColumn = 4 ActiveWindow.ScrollColumn = 5 ActiveWindow.ScrollColumn = 6 ActiveWindow.ScrollColumn = 7 ActiveWindow.ScrollColumn = 8 ActiveWindow.ScrollColumn = 9 ActiveWindow.ScrollColumn = 10 ActiveWindow.ScrollColumn = 11 ActiveWindow.ScrollColumn = 12 Columns("Q:Q").Select Selection.ColumnWidth = 5.5 Columns("S:S").Select Selection.ColumnWidth = 6.75 Columns("T:T").ColumnWidth = 9.75 Columns("Q:T").Select Range("T1").Activate Selection.Style = "Comma [0]" Columns("U:U").Select Columns("V:V").ColumnWidth = 5.5 Columns("V:V").ColumnWidth = 6 Columns("W:Z").Select Selection.Delete Shift:=xlToLeft Columns("X:Z").Select Selection.Delete Shift:=xlToLeft Range("X10").Select Columns("X:X").ColumnWidth = 12.25 Columns("X:X").ColumnWidth = 11.13 Columns("Y:Y").ColumnWidth = 6.75 Columns("Z:Z").ColumnWidth = 11.63 Columns("AA:AA").ColumnWidth = 6.75 Columns("AB:AB").Select Selection.Delete Shift:=xlToLeft Range("AB2").Select Columns("AB:AB").ColumnWidth = 11 Columns("AD:AO").Select Selection.Delete Shift:=xlToLeft Range("AF14").Select Columns("AD:AD").ColumnWidth = 11 Columns("AE:AE").Select Selection.Delete Shift:=xlToLeft Range("AG7").Select Columns("AE:AE").ColumnWidth = 20.38 Columns("AF:AJ").Select Selection.Delete Shift:=xlToLeft ActiveWindow.ScrollColumn = 21 ActiveWindow.ScrollColumn = 1 Rows("2:2").Select ActiveWindow.FreezePanes = True Range("A2").Select ActiveWorkbook.Worksheets("11").Sort.SortFields.Clear ActiveWorkbook.Worksheets("11").Sort.SortFields.Add Key:=Range("D2:D137"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal ActiveWorkbook.Worksheets("11").Sort.SortFields.Add Key:=Range("A2:A137"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("11").Sort .SetRange Range("A1:AE137") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .Apply End With End Sub よろしくお願い致します。

  • VBAで文字列を数値に変換させるには?

    VBA初心者です。 当事務所の事務システム(オラクル)をバージョンアップした際、出力帳票をエクセルのワークシートで出すようにしました。 以前は翼システムの帳票印刷用ソフトに連動させ、すぐ印刷できるものにしていたのですが、今後は出力結果から、合計行を後で(エクセルの段階で)だして付け加えたりなどしなければなりません。 事務所には年配の職員のかたもおられ、やはり自動でできるようにして欲しいとの要望があり、いくつかマクロを作りました。 しかし、各帳票エクセルに出力された際、数字が全て文字列で表示されてしまうので、まずこれを数値に直さなければなりません。 (ココから下) 帳票全部が数字ならば、Ctr+Aで範囲選択し、エクセルのツールで数値に直せばいいのですが、そうではないため、範囲選択するところから含めてマクロにしたいのです。 しかし、「文字列→数値」ができません。マクロのツールを使ってでは、それに値する行が作られませんでした。 Format関数をつかうのでしょうか? ????? 初心者的質問で申し訳ありません。 よろしくお願いします。 Sub Macro会費納入状況表データ() ' ' Macro状況表データ Macro ' マクロ記録日 : 2005/11/17 ユーザー名 : sn ' ' Columns("C:C").Select Selection.Insert Shift:=xlToRight Rows("5:5").Select Selection.Insert Shift:=xlDown Range("D6").Select Selection.CurrentRegion.Select (ココになにかいれるとおもうのですが) Columns("C:C").Select Selection.Delete Shift:=xlToLeft Range("A6").Select Selection.CurrentRegion.Select Selection.Copy End Sub

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

専門家に質問してみよう