• ベストアンサー

エクセル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

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

  • ベストアンサー
回答No.4

yon56です。 ひょっとして、 Worksheets(1).Copy before:=Worksheets(1) Worksheets(1).Select Columns("B:C").Select を、Microsoft Excel Objects のsheetに書いたんじゃないでしょうね。 Moduleに書かないと、無効ですよ。 その理由は、勉強して下さい。 右から削除するのは、削除対象の列番号を変化させないためです。

milkldap
質問者

お礼

ありがとうございます。 Selection.Delete Shift:=xltoright にするということでしょうか? 試してみて、leftと結果が変わらないような気がするのですが。

その他の回答 (4)

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.5

ご説明の通りだとすると、マクロを実行すると、新しくコピーされたシートが作成されて、そのシートがアクティブになった状態でエラーが発生して処理が止まっていると思います。 1)その状態から、手作業でB:C列を選択することは可能でしょうか? 2)エラーの番号または表示はどのようなものでしょうか? ご質問には関係ありませんが、削除作業の順序に関しては、ANo3様に賛成です。

回答No.3

Worksheets(1).ActivateのActivateが間違いです。 ActivateをSelectにしたらOKです。 WorkbooksはActivate、WorksheetsはSelectでアクティブにします。 ついでですが、 列を削除するのに、シートの左側から削除していますが、 この方法だと列B:Cを削除すると、旧D:E列が新B:C列となり、 次の削除列指示がややこしくなるので、シートの右側から削除するようお勧めします。

milkldap
質問者

お礼

ありがとうございます。^^ >シートの右側から削除するようお勧めします。 はどういうことでしょうか?

milkldap
質問者

補足

Worksheets(1).Copy before:=Worksheets(1) Worksheets(1).Select Columns("B:C").Select 上記のように書き直したのですが、 やはりColumns("B:C").Selectで エラーが出てしまいます。 なぜでしょうか?

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.2

本題とは関係ありませんが、追加です。 >Columns("B:C").Select >Selection.Delete Shift:=xlToLeft Selection.Delete Shift:=xlToLeft の、Selectionは Columns("B:C").Select で、Selectした実態はColumns("B:C")です。 ということで、SelectとSelectionが相殺されて Columns("B:C").Delete Shift:=xlToLeft と、1行にすることができます。

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.1

Worksheets(1)が「シートの保護」をされているとかはないでしょうか。 ↓で「シートの保護」が解除されます。 Worksheets(1).Unprotect

関連するQ&A

  • 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

  • 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 よろしくお願い致します。

  • excel vba

    (1)下記のマクロに出てくるApplication.CutCopyMode = False というのは何でしょうか。 (2)また自分でマクロ記録してあるシートを、別のシートにコピーしたとき Application.CutCopyMode = False Selection.Copy というのが、付くときとつかないときがあったんですがなぜそのようなことがおきるのか。 (3)またSelection.Copyというのは何ですか。 Sub Macro1() ' ' Macro1 Macro ' マクロ記録日 : 2007/1/11 ユーザー名 : ××××× ' ' Workbooks.Open Filename:="C:\aaa\bbbbb\cccc\aaaa_1.xls" Columns("H:H").Select Application.CutCopyMode = False Selection.Cut Columns("E:E").Select Selection.Insert Shift:=xlToRight Columns("I:I").Select Selection.Cut Columns("G:G").Select Selection.Insert Shift:=xlToRight With Selection.Font .Name = "MS 明朝" .Size = 10 .Strikethrough = False .Superscript = False .Subscript = False .OutlineFont = False .Shadow = False .Underline = xlUnderlineStyleNone .ColorIndex = xlAutomatic End With ActiveSheet.PageSetup.PrintArea = "$A$1:$L$61" ActiveWorkbook.Save End Sub

  • エクセルマクロでオートフィルタを貼り付け。VBA

    お世話になっております。 エクセルのマクロを作成したのですが、上手く機能いたしません。 オートフィルタで条件に一致するものが現在表示されている 「CSV元データをここに貼り付ける」という名前のシートが ございます。 これをシートを全選択し、そのまま 「加工1」という名前のシートに貼り付ける。 といったマクロを作成したのですが、加工1には何も貼り付けられていないようです。 下記にマクロのプログラムを記載しますので、どこを訂正すればいいのかをお教えいただければ ありがたいです。 無知で申し訳ございませんが、何卒よろしく御願いいたします。 当方が今したいのは、マクロ2なのですが、マクロ2を見ようとするとマクロ1も表示されます。 なぜ、マクロ1もでてくるのかわかりませんが、よろしく御願いいたします。 Sub マクロ1() ' ' マクロ1 Macro ' マクロ記録日 : 2011/10/31 ユーザー名 : ' ' Columns("A:D").Select Selection.Delete Shift:=xlToLeft Columns("D:D").Select Sheets("読込データ(加工1)").Select ActiveWindow.ScrollColumn = 2 ActiveWindow.ScrollColumn = 1 Sheets("読込データ(ORG)").Select ActiveWindow.ScrollColumn = 2 ActiveWindow.ScrollColumn = 3 ActiveWindow.ScrollColumn = 4 ActiveWindow.ScrollColumn = 6 ActiveWindow.ScrollColumn = 7 ActiveWindow.ScrollColumn = 8 ActiveWindow.ScrollColumn = 10 ActiveWindow.ScrollColumn = 11 Sheets("csv元データをここに貼り付ける").Select Columns("B:D").Select Selection.Delete Shift:=xlToLeft Columns("I:P").Select Selection.Delete Shift:=xlToLeft Range("I19").Select Sheets("csv元データをここに貼り付ける").Select Rows("2:2").Select Selection.AutoFilter Selection.AutoFilter Field:=9, Criteria1:="=2", Operator:=xlAnd End Sub Sub マクロ2() ' ' マクロ2 Macro ' マクロ記録日 : 2011/10/31 ユーザー名 : ' ' Cells.Select Selection.Copy Sheets("加工1").Select Range("G12").Select End Sub

  • マクロ実行でエラーになるが、リセットすると動作可

    office2010 下記のマクロを実行すると、macro_a5の ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _ "work!R1C3:R1048576C3", Version:=xlPivotTableVersion14).CreatePivotTable _ TableDestination:="", TableName:="ActiveSheet.Name", DefaultVersion _ :=xlPivotTableVersion14 が黄色く表示されれ、 実行時エラー'1004' アプリケーション定義またはオブジェクト定義のエラーです とのポップアップエラーが発生します。 ポップアップのデバッグでmacro_a5の部分から、 マクロのリセット→中断→リセット→実行すると継続動作可能で最後まで終了します。 何故でしょう? マクロは、学習機能使いながら、ブロック単位(macro_a*)で各々の動作を確認しながらのものとなっています。また、マクロの中身の詳細も省略させていただきます。 文字数制約で全文掲載出来ないので、クリア処理等は省略しています。 悪い部分を修正していただけたらと思います。 Sub macro_a1() 'sheet5シートB1に表示される シリアルで抽出 Application.EnableEvents = False Application.Calculation = xlCalculationManual Application.ScreenUpdating = False Sheets("work").Select Columns("A:C").Select Selection.Delete Shift:=xlToLeft '…途中省略 macro_a2 End Sub Sub macro_a2() Columns("J:S").Select Selection.Delete Shift:=xlToLeft Columns("D:H").Select Selection.Delete Shift:=xlToLeft Columns("C:E").Select Selection.Copy Sheets("Sheet3").Select Range("A1").Select ActiveSheet.Paste Sheets("Sheet3").Select Columns("C:C").Select Selection.Copy Sheets("Sheet4").Select Range("B1").Select ActiveSheet.Paste Range("A1") = "code" Range("A2:A" & (Range("B" & (Rows.Count)).End(xlUp).Row)).Value = "=Sheet3!RC&Sheet3!RC[1]" Columns("A:A").Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False macro_a3 End Sub Sub macro_a3() Sheets.Add ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _ "Sheet4!R1C1:R" & Worksheets("Sheet4").Cells(Rows.Count, "A").End(xlUp).Row & "C2", Version:=xlPivotTableVersion14).CreatePivotTable _ TableDestination:="", TableName:="ActiveSheet.Name", DefaultVersion _ :=xlPivotTableVersion14 Cells(1, 1).Select With ActiveSheet.PivotTables("ActiveSheet.Name").PivotFields("code") .Orientation = xlRowField .Position = 1 End With ActiveSheet.PivotTables("ActiveSheet.Name").AddDataField ActiveSheet.PivotTables( _ "ActiveSheet.Name").PivotFields("N_KOUSU"), "合計 / N_KOUSU", xlSum Columns("A:B").Select Selection.Copy Sheets("work").Select Range("A1").Select ActiveSheet.Paste macro_a4 End Sub Sub macro_a4() Columns("C:C").Select Selection.ClearContents '結合codeからPINNOを抜きだし Range("C2:C" & (Range("A" & (Rows.Count)).End(xlUp).Offset(-1, 0).Row)).Value = "=LEFT(RC[-2],7)" macro_a5 End Sub Sub macro_a5() Sheets("work").Select '題目 Range("C1") = "PINNO" '複数PINNOを重複無しにする Columns("C:C").Select Sheets.Add ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _ "work!R1C3:R1048576C3", Version:=xlPivotTableVersion14).CreatePivotTable _ TableDestination:="", TableName:="ActiveSheet.Name", DefaultVersion _ :=xlPivotTableVersion14 Cells(3, 1).Select With ActiveSheet.PivotTables("ActiveSheet.Name").PivotFields("PINNO") .Orientation = xlRowField .Position = 1 End With macro_a6 End Sub Sub macro_a6() Range("A4:A" & (Range("A" & (Rows.Count)).End(xlUp).Offset(-2, 0).Row)).Select 'Sheet5のH2セルから縦横変換でコピー貼り付け Selection.Copy Sheets("Sheet5").Select Range("H2").Select Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Range("H5") = "=IF(ISNA(INDEX(Sheet4!R2C2:Sheet4!R30000C2,MATCH(R2C&RC5,work!R2C1:work!R30000C1,0)))=TRUE,"""",INDEX(Sheet4!R2C2:Sheet4!R30000C2,MATCH(R2C&RC5,work!R2C1:work!R30000C1,0)))" Range("H5").Copy Destination:=Range("H5:AJ151") Calculate End Sub

  • エクセルシート:ボタン押下で特定列の表示←→非表示切り替え

    (行いたいこと) sheet1の中にコマンドボタン1があって、そのボタンが押されたとき既にC列からF列が非表示のときは表示してやり、また逆に表示のときは非表示にする。 (macroを作って実行したい) (現在の考えている状況) 後どうすればいいですか。今は何も動作しません。 今macro3というマクロの中に次のようなものが入っています。 Private Sub CommandButton1_Click() If Selection.EntireColumn.Hidden = True Then Columns("B:G").Select Range("G1").Activate Selection.EntireColumn.Hidden = False Else: Columns("C:F").Select Selection.EntireColumn.Hidden = True End Sub Sub Macro3() ' ' Macro3 Macro ' マクロ記録日 : 2006/3/24 ユーザー名 : ' Columns("C:F").Select Selection.EntireColumn.Hidden = True Columns("B:G").Select Range("G1").Activate Selection.EntireColumn.Hidden = False Range("B2").Select End Sub

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

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

  • VBA エラー表示についての原因がわかりません

    お世話になります。 現在、社内集計作業のため下記のようなマクロを組みました。 条件として保存動作をすると実行…ということで諸々調べた結果、VBE→ThisWorkBookから指定のプロシージャを選んで、その中にコードを記入する、ということが多数でしたので、それに倣いました。 ところが、いざ下記コード内容で実行しようとすると「インデックス範囲が有効ではありません」とストップをかけられる上、最初の新規ワークブック追加~コピペすら正しく行われません。 標準モジュールでは正しく実行してくれるのですが、このようなケースでエラーになる理由がよくわかりません。 つきましては、下記コードがエラーとなる理由、そして可能であればどのように修正をすればよいかお教えください。 ご面倒をおかけしますが、よろしくお願いいたします。 Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) ' Macro2 Macro ' ' Columns("A:A").Select Range("A:FU").Select Selection.Copy Workbooks.Add ActiveSheet.Paste Columns("FU:FU").Select Application.CutCopyMode = False Selection.Copy Columns("FT:FT").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Columns("FT:GF").Select Application.CutCopyMode = False Selection.Delete Shift:=xlToLeft Columns("A:A").Select Range(Selection, Selection.End(xlToRight)).Select Selection.NumberFormatLocal = "G/標準" Sheets("Sheet3").Select Application.DisplayAlerts = False 'メッセージを出さない ActiveWindow.SelectedSheets.Delete Application.DisplayAlerts = False 'メッセージを出さない Sheets("Sheet2").Select ActiveWindow.SelectedSheets.Delete Range("A1").Select Columns("A:A").Select Range(Selection, Selection.End(xlToRight)).Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,SkipBlanks _ :=False, Transpose:=False ChDir "\\sv-qlikview.dmsinc.local\Documents\社内実績集計画面\読込用(仮)" Application.DisplayAlerts = False 'メッセージを出さない ActiveWorkbook.SaveAs Filename:= _ "\\sv-qlikview.dmsinc.local\Documents\社内実績集計画面\読込用(仮)\第○営業部.xlsx", _ FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False ActiveWindow.Close 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 右端列の削除

    このたび初めて質問させていただきます。 周囲に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 と書き換えてみたのですが、うまく作動しませんでした。 どなたか教えていただけませんでしょうか?

専門家に質問してみよう