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

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

ただいまの
回答率

90.62%

  • VBA

    1733questions

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

Rangeでエラーが出て来る。

受付中

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 258

PITI

score 2

前提・実現したいこと

大量に選択した行を削除したい

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

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

該当のソースコード

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
    ActiveSheet.Selection.Delete Shift:=xlUp

補足情報(言語/FW/ツール等のバージョンなど)

行を選択をfor 構文で表す方法も教えてもらいたいです。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

+2

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

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

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

質問のコードの

    ActiveSheet.Selection.Delete Shift:=xlUp


    Selection.Delete


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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/10/17 10:58

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

    キャンセル

  • 2017/10/17 11: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

    に変えましたが、上の文で先程同様のエラーが出てしまいました。

    キャンセル

  • 2017/10/17 12:01

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

    キャンセル

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.62%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • VBA

    1733questions

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