- ベストアンサー
行を削除するマクロ
以下のような、行を削除するマクロがあります。 Workbooks("123.csv").Activate Rows("5:10").Select Selection.Delete Shift:=xlUp しかし、123.csvを開いていない場合にはエラーが出てしまいます。 そこで、このようにしました。 On Error Resume Next Workbooks("123.csv").Activate Rows("5:10").Select Selection.Delete Shift:=xlUp しかし、エラーが出ない代わりに、アクティブなブックの行が削除されてしまいます。 123.csvが開かれている場合には、行を削除し、 開かれていない場合には、何もせずエラーも出さないようにするにはど のようにすればいいでしょうか。 よろしくお願いします。
- オフィス系ソフト
- 回答数4
- ありがとう数3
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 本来は、別の方法もありますが、マクロの基礎ですが、On Error Goto ErrorHandler を使って、このようにします。ブックが開いているか調べる場合は、ワークシート関数を使えばよいです。 '------------------------------------------- Sub DeleteRows() On Error GoTo ErrorHandler Workbooks("123.csv").Activate Rows("5:10").Select Selection.Delete Shift:=xlUp ErrorHandler: End Sub
その他の回答 (3)
- myRange
- ベストアンサー率71% (339/472)
該当ブックがオープンされてるかどうかのコードの前に 自分で考えたOn Error Resume Nextの使い方をマスターしましょう。 ●エラーなら、Err.Numberにエラー番号が入るので Err.Numberが0だったらエラーなしと判断する '---------------------------------------------- Sub Test222() On Error Resume Next Workbooks("123.csv").Activate If Err.Number = 0 Then Rows("5:10").Delete xlUp Else MsgBox "123.csv は開かれてないよ" Err.Clear End If End Sub '--------------------------------------------- ●該当ブックがオープンされたら行削除実行 Sub Test555() Dim myBook As Workbook For Each myBook In Workbooks If myBook.Name = "123.csv" Then MsgBox "123.csvあり、削除実行します" myBook.Activate Rows("5:10").Delete xlUp Exit For End If Next myBook End Sub '--------------------------------------------- ●それから、質問者提示の >Rows("5:10").Select >Selection.Delete Shift:=xlUp これは Rows("5:10").Delete xlUp と1行で書くこともできます。 要するに、Selectは不要ということです。 ただ、いまの段階では要不要の判断は難しいと思いますが。。。 以上です。
お礼
お答えいただきどうもありがとうございました。
- Trick--o--
- ベストアンサー率20% (413/2034)
=== >ブックが開かれているか確認した方がスマートじゃね? もしそのような方式にするにはどのようにしたらいいでしょうか。 余裕があったらお答えいただけないでしょうか。 よろしくお願いします。 === 何故参考URLを見ない?
補足
どうもありがとうございます。 > 何故参考URLを見ない? 参考URLは見たのですが、これをマクロでどう使うか分からなかったので尋ねました。 セルで=IsBookOpen("ブック名")でTRUEやFALSEが出るのは確認できました。 よろしくお願いします。
- Trick--o--
- ベストアンサー率20% (413/2034)
このコードを利用するのなら、 Sub 行削除() On Error Goto EXIT_SUB Workbooks("123.csv").Activate Rows("5:10").Select Selection.Delete Shift:=xlUp EXIT_SUB: End Sub ブックが開かれているか確認した方がスマートじゃね?
お礼
お答えいただきありがとうございます。 >ブックが開かれているか確認した方がスマートじゃね? もしそのような方式にするにはどのようにしたらいいでしょうか。 余裕があったらお答えいただけないでしょうか。 よろしくお願いします。
関連するQ&A
- 行の削除
excel VBA行の削除をしたい。 (質問) どこがまちがいでどう直せばよいか。教えてください。よろしくお願いします。 Rows("268:271").Select Selection.Delete Shift:=xlUp のイメージで Rows("last_depth+1:d").Select Selection.Delete Shift:=xlUp として実行したら型が一致しないエラー 記述で""を取り Rows(last_depth+1:d).Select Selection.Delete Shift:=xlUp としてもコンパイルエラーとなります。 なおlast_depth、dはともに dim xx As long で定義の変数
- ベストアンサー
- オフィス系ソフト
- エクセルマクロで行を変えて100回デリート
すみません。繰り返し165行下がってデリートしたいのですが・・・ どなたか詳しい方ご教授下さいませ。 ActiveWindow.SmallScroll Down:=174 Rows("183:198").Select Selection.Delete Shift:=xlUp ActiveWindow.SmallScroll Down:=171 Rows("348:363").Select ←165行下がりデリートを繰り返しデリートしたいです。 Selection.Delete Shift:=xlUp
- ベストアンサー
- Excel(エクセル)
- VBAでの行削除について
教えてください。 現在、VBAを使用して、CSVファイルの編集をしたいと考えています。 フォルダ内に数個のCSVファイルがあり、それらにすべて同じ処理(行削除など)をしたいのです。 下記のようなプログラムです。 Sub getting() Dim myPath As String Dim myFName As String Dim FCnt As Integer Dim A(500) As String MsgBox CurDir() Workbooks("自動処理.xls").Activate myPath = ActiveWorkbook.Path MsgBox myPath ChDir myPath FCut = 0 myFName = Dir("*.csv") If myFName <> "" Then FCut = FCut + 1 A(FCut) = myFName Do myFName = Dir() If myFName <> "" Then FCut = FCut + 1 A(FCut) = myFName MsgBox A(FCut) Else Exit Do End If Loop End If MsgBox "「" & myPath & "」には、" & FCut & "個のファイルがあります。" Dim i As Integer Dim seet As String Dim ws As Object Dim FullPath As String For i = 1 To 1 seet = Left(A(1), 6) FullPath = myPath & "\" & A(i) 'Workbooks.Open(FullPath).Activate Open FullPath For Append As #1 Print #1, Rows("1:1").Select Selection.Delete Shift:=xlUp Rows("2:2").Select Selection.Delete Shift:=xlUp Range("A1").Select Print #1, Range("A1").Value = "" Print #1, Range("A1").Value = "COMP_NAME" Print #1, Range("B1").Select Print #1, ActiveCell.Value; "PC_OS" Print #1, Range("C1").Select Print #1, ActiveCell.Value = "OS_SUB_VERS" Print #1, Range("D1").Select Print #1, ActiveCell.Value = "IP_ADDR" Print #1, Range("E1").Select Print #1, ActiveCell.Value = "LOCATION " Close #1 ' Workbooks(A(i)).Save ' Workbooks(A(i)).Close savechanges:=False Next i End Sub 教えていただきたいのは、どうにかworkbook.openを使わず、ファイルを編集できるところまでいったのですが、ファイルを開かずに行を削除することができません。 >Print #1, Rows("1:1").Select >Selection.Delete Shift:=xlUp >Rows("2:2").Select >Selection.Delete Shift:=xlUp ファイルを開かずに行削除をできるものなのでしょうか。 ご存知の方がいれば教えてください。 よろしくお願いいたします。
- 締切済み
- その他(プログラミング・開発)
- excelのセル複数削除について
2箇所の範囲を削除したいのですが、 Rows("188:247").Select Selection.Delete Shift:=xlUp Rows("311:373").Select Selection.Delete Shift:=xlUp とすると最初に削除されるとRowがずれてしまって、 次のRows("311:373").Selectがうまく削除できません。 2つを同時に削除することは可能でしょうか? 最大で3つまで削除を考えています。 どうぞよろしくお願い致します。 excel2000です。
- ベストアンサー
- Visual Basic
- 【エクセル マクロ】オートフィルター後の行削除
Excel2003を使用しています。 オートフィルターを利用した作業をマクロの記録で処理していて 抽出されたデータを行ごと削除しているのですが Selection.AutoFilter Field:=1, Criteria1:="仕入先コード" Rows("4:2102").Select Selection.Delete shift:=xlUp Selection.AutoFilter Field:=2, Criteria1:="仕入先合計" Rows("7:2008").Select Selection.Delete shift:=xlUp …と、上記のような行番号で指定されてしまい 毎月データ数が増減するので、うまく処理出来ません。 (データは、テキストファイルからエクセルに取り込んでいます) 過去の例で近いものがあれば記述の中に取り込んでみましたが… これもうまくいきませんでした。 毎月変わるデータ数に対応できるマクロの記述を教えて下さい。 よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- Excel VBA 削除について
Rows("188:247").Select Selection.Delete Shift:=xlUp このように削除する場合、このセル内に貼り付けてある 画像が残ってしまうのですが、貼り付けてある画像も いっしょに削除できないでしょうか?
- ベストアンサー
- Visual Basic
- EXCELマクロデータのある行より下の行削除の構文
EXCELマクロ構文について教えてください。 データのある行のひとつ下の行全体選択し、 Ctrl+Shift+↓で下部行全て選択し、右クリックで削除する 操作をマクロにしたいのでですが、 マクロ記録では上の操作は Rows("189:189").Select Range(Selection, Selection.End(xlDown)).Select Selection.Delete Shift:=xlU になります。 この 189 という数字は 下記の変数定義で「lastRow」として取得できるのですが Dim lastRow As Long lastRow = Sheets("2CVS関西").Cells(Rows.Count, 2).End(xlUp).Row + 1 189にlastRow に置き換える方法お教えください。
- ベストアンサー
- Excel(エクセル)
- エクセルマクロでの行削除の方法について
エクセルマクロを使用しての行削除の方法についてお伺いします。 現在業務でエクセルに画像内の文字データを入力しています。 入力データは列ごとに半角全角のきまりがあり、 データが入力された行列以外はすべて削除しそれをCSVで保存という流れになっているのですが、 今のところ関数を入れて半角全角チェックをし、それが済んだあとに、 実際のデータ部分以外の箇所をすべて削除し保存しています。 調べたら半角全角はvbNarrowとvbWideという関数があると知り、 列については、特定位置から始まるのでマクロの記録で対応できています(列項目は予め数が決まっていますので)。 ただ、行については画像にどれだけデータがあるかで開始位置が変わってきます。 ***以下は試したマクロ記録です。*** Rows("9:9").Select→何も知らずに「"9:9"」の所で"開始位置の変数:開始位置の変数"としエラーで迷ってます。 Range(Selection, Selection.End(xlDown)).Select Selection.Delete Shift:=xlUp Columns("F:F").Select Range(Selection, Selection.End(xlToRight)).Select Selection.Delete Shift:=xlToLeft 不特定の行から最終行までを選択削除する方法をご存じの方がいましたらご教授お願いいたします。 上記のマクロ使用環境はExcel2003です。
- ベストアンサー
- その他(プログラミング・開発)
- エクセルマクロで行を変えて千回カット&ぺースト
下記のコードでB,C,D・・・と行を1,000回変えて同じ作業をしたいのですが、どのようにしたらよいか分かりません。 どなたかお詳しい方アドバイスをお願いします。 Range("A18:A32").Select Selection.Cut Destination:=Range("B3:B17") ←B,C,D・・と変えてカットしたい。 Rows("18:32").Select Selection.Delete Shift:=xlUp Range("A18:A32").Select Selection.Cut Destination:=Range("C3:C17") Rows("18:32").Select Selection.Delete Shift:=xlUp Range("A18:A32").Select Selection.Cut Destination:=Range("D3:D17") Range("D3:D17").Select End Sub
- ベストアンサー
- Excel(エクセル)
- VBAで行の削除
お世話になります。 下記の様に行を削除しようとしていますが、 行を削除していくと、1行ずつずれていく為、 結果全部削除されません。 どのようにしたらうまく(空白のセルの行のみ) 削除出来ますでしょうか。 ご教示頂きたく宜しくお願い致します。 記 For k = 2 To r If Sheets("sheet1").Cells(k, 9) = "" Then Rows(k).Select Selection.Delete Shift:=xlUp End If Next k
- ベストアンサー
- Visual Basic
お礼
お答えいただきどうもありがとうございます。 複数のファイル(4つ)がある場合どのようにすればいいかご存知でしょうか。 3行目から5行目までを単純に重ねたり、2行目から6行目を単純に重ねたり、ErrorHandlerという名前を順に2~4にしてみましたが駄目でした。 >本来は、別の方法もありますが この方法はどのようなものでしょうか。 よろしくお願いします。