質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

3回答

3307閲覧

Rangeでエラーが出て来る。

PITI

総合スコア6

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2017/10/17 01:26

###前提・実現したいこと
大量に選択した行を削除したい

###発生している問題・エラーメッセージ

アプリケーション定義またはオブジェクト定義のエラーです。

###該当のソースコード

VBA

1ActiveSheet.Range("2:2,4:4,6:6,8:8,10:10,12:12,14:14,16:16,18:18,20:20,22:22,24:24,26:26,28:28,30:30,32:32,34:34,36:36,38:38,40:40,42:42,44:44,46:46,48:48,50:50,52:52,54:54,56:56,58:58,60:60,62:62,64:64,66:66,68:68,70:70,72:72,74:74,76:76,78:78,80:80,82:82,84:84,86:86,88:88,90:90,92:92,94:94,96:96,98:98,100:100,102:102,104:104,106:106,108:108,110:110,112:112,114:114").Select 2 ActiveSheet.Selection.Delete Shift:=xlUp

###補足情報(言語/FW/ツール等のバージョンなど)
行を選択をfor 構文で表す方法も教えてもらいたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

エラーの原因は範囲指定の数が多いせいでしょうかね。
44個(88:88まで)なら動きました。
ループで回す複数選択は下記のようにすればできますが、結局deleteでエラーになりました。

vba

1 For r = 2 To 114 Step 2 2 Union(Selection, ActiveSheet.Range(r & ":" & r)).Select 3 Next

見たところ、単純に2行目から1行おきに行を削除しているだけのようですので、次のようにしてみてはいかがでしょうか。

VBA

1 For r = 2 To 114 / 2 2 ActiveSheet.Range(r & ":" & r).Delete 3 Next

上記のように「SelectしてSelectionを対象に処理」ということをしなくても処理はできます。
このようなコーディングの癖をつけておくと、幅が広がると思いますよ。

投稿2017/10/17 03:08

ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Range("アドレス")のアドレスは確か255文字までしか処理できず、エラーになったと思います。

"2:2,4:4,・・・,114:114" を ","で Split し、
各アドレス(例 2:2)毎に Range型変数にSet し、
更に Application.Union で1つのRange型変数に統合すれば、
一括削除が出来るようになります。
※ただし、アドレスが少ないと処理が早く、
多すぎると(100個を超えるくらい?)処理が遅くなるので注意してください。

※詳細は各単語を調べてください
※出来るだけSelectionに頼らない方が確実です

捕捉:一応、ttyp03さんのコードについて言及しておこうかと思います
誤:For r = 2 To 114 / 2
正:For r = 2 To 114 step 2
↑この処理だと、上部の行が先に削除され、下部の行削除が意図しない結果になるかと
良:For r = 114 to 2 step -2

投稿2017/10/18 08:47

ExcelVBAer

総合スコア1175

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

質問のコードの

ActiveSheet.Selection.Delete Shift:=xlUp

Selection.Delete

に修正すると動作しませんか?

投稿2017/10/17 01:50

coco_bauer

総合スコア6915

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

coco_bauer

2017/10/17 01:58

[補足説明] Selection (選択されているもの全て)は、最上位(Global)のクラスで、他のクラスのメンバーではありません。 他のクラスのメンバーではないという事は、ActiveSheet(Worksheetクラス)のメンバーでもありませんから、"Activesheet.Selection”のところでエラーになるのでsす。 "ActiveSheet.Selection"を"Selection”に変更することでこのエラーは無くなります。また、選択しているのが行なので、xlUpの指定は不要です。(セルを削除する際には、xlUp,xlLeftなどの指定が意味を持ちます)
PITI

2017/10/17 02:03

ActiveSheet.Range("2:2,4:4,6:6,8:8,10:10,12:12,14:14,16:16,18:18,20:20,22:22,24:24,26:26,28:28,30:30,32:32,34:34,36:36,38:38,40:40,42:42,44:44,46:46,48:48,50:50,52:52,54:54,56:56,58:58,60:60,62:62,64:64,66:66,68:68,70:70,72:72,74:74,76:76,78:78,80:80,82:82,84:84,86:86,88:88,90:90,92:92,94:94,96:96,98:98,100:100,102:102,104:104,106:106,108:108,110:110,112:112,114:114").Select Selection.Delete に変えましたが、上の文で先程同様のエラーが出てしまいました。
coco_bauer

2017/10/17 03:01

Range関数の引数に書く文字列には、255文字までという制限があります。質問のコードの引数は、255文字を軽く超えていそうですから、255文字を超えないいくつかに分割して、SelectとSelection.Deleteを何度か繰り返すようなコードにしてみてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問