はじめて質問させていただきます。
excel 2000のvbaでRange("B:C,D:E,F:G,H:I,J:K,L:M,P:Q,T:U,V:W,Z:AA,AB:AC,AD:AE,AF:AG,AL:AM,AN:AO,AP:AQ,AR:AS,AT:AU,AV:AW,AX:AY,AZ:BA,BB:BC,BD:BE,BF:BG,BH:BI,BL:BM,BN:BO,BP:BQ,BR:BS,BT:BU,BV:BW,BX:BY,BZ:CA,CB:CC,CD:CE,CF:CG,CH:CI,CJ:CK,CL:CM,CN:CO,CP:CQ,CR:CS,CT:CU,CV:CW,DB:DC,DD:DE").Select
のように非常に長い文字列で範囲を指定した場合、「Rangeメソッド失敗'_Global'オブジェクト」というようなメッセージが出ます。
最後のDD:DEをやめたり、連続する列をまとめるとエラーになりません。
どうも文字列に制限があるように思いますが、回避方法をご存知の方ご教示ください。
No.4ベストアンサー
- 回答日時:
range("文字列")で「一度に指定できる複数範囲」は制限があるみたいです。
試した限りでは範囲の個数ではなく単純に"文字列"が255文字を超えるとダメみたいです。
ただ、複数に分けてunionでつなげるのは大丈夫のようです。
Union(Range("B:C,D:E,F:G,H:I,J:K,L:M,P:Q,T:U,V:W,Z:AA,AB:AC,AD:AE,AF:AG,AL:AM,AN:AO,AP:AQ,AR:AS,AT:AU,AV:AW,AX:AY,AZ:BA,BB:BC,BD:BE,BF:BG,BH:BI,BL:BM,BN:BO,BP:BQ,BR:BS,BT:BU,BV:BW,BX:BY,BZ:CA,CB:CC,CD:CE,CF:CG,CH:CI,CJ:CK,CL:CM,CN:CO,CP:CQ,CR:CS,CT:CU,CV:CW,DB:DC"), Range("DD:DE")).Select
>ある条件で、ペアになっている行を削除するのですが、削除するのに時間がかかるので、一辺にまとめて選択して、削除しようというのが目的です。
と言うなら、下のようにチェックしながらunionでつなげるなら大丈夫のようです。
Sub sample()
Dim col As Integer
Dim rng As Range
For col = 2 To チェックする最終列 Step 2
If 削除する列ペア Then
If rng Is Nothing Then
Set rng = Range(Columns(col), Columns(col + 1)) '何も無いrangeをunionするとエラーになるので
Else
Set rng = Union(rng, Range(Columns(col), Columns(col + 1)))
End If
End If
Next
rng.Select
End Sub
当然の事だけど、Excel2007以外では列の最大は256(IV)。
hotosysさん初めまして。
丁寧なご意見有難うございました。
hotosysさんの方法で試したところうまく行きました。>(^0^)<
有難うございました。
No.3
- 回答日時:
回避するというよりも、別の方法になってしまいますが・・・
実際の作業が不明ですが、かなり大量の列のセット(2行ずつ)を削除したいということでしょうか?
どのような基準で消去する列が決るのかわかりませんが、ご質問のようにvbaで列を固定で(直接)記載するとなると、その組合せ毎に実行文を記載しなくてはならないですよね?(組合せがいくつあるのかも不明ですが)
列をペアで消去するルーチン(といっても一行で済みますが)を、条件判断しながらループで回せばいいのではないでしょうか?
<例>(iとi+1列を消去するとして)
While ~~ ' ループの条件
'消去する列iを設定する条件判定(=文中のある条件)
Cells(1, i).Resize(1, 2).EntireColumn.Delete '2行を消去
Wend
(大きい方の列から削除していったほうが、列番号がずれないので計算が簡単なはずです。)
もう一点。
実行速度を気になさっているようですが、列をSelectしてからDeleteするよりも、↑のように直接Deleteしたほうが速いはずです。
また、vba実行中は
Application.ScreenUpdating = False
としておいて、実行内容を画面表示に反映させないようにすれば、見かけの速度は格段と速くなります。
(最後に trueに戻すのを忘れずに。)
この回答への補足
fujillinさんアドバイス有難うございました。
私の方法はfujillinさんのアドバイスと似たような方法で、resizeはしていませんが、2列をselectしないで同時にdeleteしています。
また,画面の更新もしていません。この状況で、かなり時間がかかっているので困っているわけです。
No.2
- 回答日時:
>ある条件で、ペアになっている行を削除するのですが、削除するのに時間がかかるので、一辺にまとめて選択して、
行ではなく列ですよね。
ある条件で上記範囲が削除対象となるのなら、別段ペア(2列)毎に
引数を与えず、まとめても良いようにしか思えないですけど。。。
仮に、For Each ~ Nextでの範囲として引数が多くなっていると
言うのならわかりますが。
>rangeの指定で文字列数に制限があるのかどうかで
については、
>最後のDD:DEをやめたり、連続する列をまとめるとエラーになりません。
の段階で気づかれていると思います。
No.1
- 回答日時:
例えば、
>B:C,D:E,F:G,H:I,J:K,L:M
なら
B:Mでもいいのでは?
2列ずつ指定しているのが不明ですが。何か理由があるのでしょうか?
この回答への補足
有難うございます。
この質問の背景をご説明いたします。
ある条件で、ペアになっている行を削除するのですが、削除するのに時間がかかるので、一辺にまとめて選択して、削除しようというのが目的です。
私の知りたいのは、rangeの指定で文字列数に制限があるのかどうかで、もしそうならば何か解決方法を考えなければならないと思っています。
n-junさんのご質問のように、選択行に連続する部分があった場合、その連続部分をつなげることは確かに効果がありますが、連続部分がない場合解決することは出来ないと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
マクロ 最終列をコピーして最終...
-
B列の最終行までA列をオート...
-
vba 2つの条件が一致したら...
-
DataGridViewに空白がある場合...
-
SetDlgItemTextの使い方について
-
セルに値が入っていた時の処理
-
VBAで、離れた複数の列に対して...
-
rowsとcolsの意味
-
ExcelVBAでテキストルーレット...
-
VBAでのリスト不一致抽出について
-
マクロについて。S列の途中から...
-
IF関数について
-
Changeイベントでの複数セルの...
-
文字列の結合を空白行まで実行
-
難問 VBA 今日の日付より前に対...
-
エクセルVBA シートモジュール...
-
VBAで重複した値のセルに色付け...
-
データグリッドビューの一番最...
-
【Excel VBA】 B列に特定の文字...
-
A列B列どちらにもあるのを抽...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
B列の最終行までA列をオート...
-
Worksheets メソッドは失敗しま...
-
Excelで、あるセルの値に応じて...
-
vba 2つの条件が一致したら...
-
Cellsのかっこの中はどっちが行...
-
URLのリンク切れをマクロを使っ...
-
文字列の結合を空白行まで実行
-
データグリッドビューの一番最...
-
【VBA】2つのシートの値を比較...
-
VBA 何かしら文字が入っていたら
-
IIF関数の使い方
-
VBAを使って検索したセルをコピ...
-
Changeイベントでの複数セルの...
-
VBAの構文 3列置きにコピーし...
-
VBAのFind関数で結合セルを検索...
-
【Excel VBA】 B列に特定の文字...
-
VBAで指定範囲内の空白セルを左...
-
VBAでのリスト不一致抽出について
-
セルに値が入っていた時の処理
-
VBAコンボボックスで選択した値...
おすすめ情報