プロが教えるわが家の防犯対策術!

いつもお世話になっております。

この度、初心者知識でお恥ずかしながら下記のマクロを構築したのですが、
データが入っていない場合は
★Range(Selection, Selection.End(xlDown)).SelectEnd(xlDown)
の処理をせずその上の
■Range(Selection, Selection.End(xlToRight)).Select
の処理で止め選択範囲をコピーしたく
その際はどの様な構文になるのかご教示いただきたく質問させていただきました。

Sub 指定範囲選択()

Sheets("Sheet3").Select
Range("A1").Select
Range(Selection, Selection.End(xlToRight)).Select 'A1~右端を選択(※Qセルまで)
Selection.AutoFill Destination:=Range("A1:Q200"), Type:=xlFillDefault 'A1~Q200セルまでオートフィル
Range("A1:Q200").Select

'C1セルを0以外でフィルター
ActiveSheet.Range("A1").CurrentRegion.AutoFilter _
Field:=3, _
Criteria1:="<>0"

Range("B2").Select
■Range(Selection, Selection.End(xlToRight)).Select
★Range(Selection, Selection.End(xlDown)).Select
Selection.Copy

End Sub

またこの構築にするともっと短くできるなどございましたら重ねてよろしくお願い申し上げます。

A 回答 (2件)

こんにちは



説明が全く無いので、何をしたいのかさっぱりわかりませんけれど・・

>データが入っていない場合は、★の処理をせずその上の
>■の処理で止め選択範囲をコピーしたく
そのままを記述すれば良いだけでは?
「データが入っていない」というのがどのセルのことなのか不明ですけれど、★の1行を条件で実行するようにして、
 If Range("B2") <> "" Then ★
とすれば良いだけのような・・・?
(意味が違う場合は、条件式の部分を修正すれば宜しいでしょう)


>もっと短くできるなどございましたら
なさりたいことが、さっぱりわかりませんけれど、こんなことかも。

Range("A1:Q1").AutoFill Range("A1:Q200")
Range("A1:Q200").AutoFilter Field:=3, Criteria1:="<>0"
Range(Range("B2"), Range("B2").End(xlToRight)).Select
If Range("B2") <> "" Then Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
    • good
    • 0
この回答へのお礼

fujillin様、いつもお世話になっております。

回答ありがとうございます。
If Range("B2") <> "" Then Range(Selection, Selection.End(xlDown)).Select
こちらで理想の処理が実現できました。
この様な形で組み込めるのですね。
勉強になりました。
ありがとうございます。

お礼日時:2022/09/03 19:39

こんにちは


想像の範疇で回答するのは、過去の経験から意味が無いかも知れませんが
(違う意図でしたら読み飛ばしてください)

説明のままだと選択する意味を感じませんし、後のコピーもなんで
AutoFilterするのとなります

なので想像で
>の処理をせず
>★Range(Selection, Selection.End(xlDown)).SelectEnd(xlDown)
のような選択をしたいと言う事では無いかと・・
つまり、AutoFilter結果をコピーしたいのかな・・と思いました

AutoFilter結果をコピーする為の範囲指定は下記を参考にしてください
http://officetanaka.net/excel/vba/tips/tips155c. …
もし、分かり難ければ 「VBA AutoFilter結果をコピーする」などで検索して確認してみましょう

なんとなくしか分からなくても 同じような処理をしたい場合に
検索キーワードだけ覚えておけば、何とかなると思いますし
色々添削するうちに覚えてしまうと思います(良き時代です)

AutoFillしてAutoFilterで結果が変わると言う事はC1は少なくとも数式が入っていると思われますが、

>データが入っていない と "<>0" は意味が違いますのでこれも注意した方が良いと思いました

>もっと短くできるなど
基本的に記録マクロなどで記録される
Select や Selection は つなげ、省く事が出来ます
言葉にすると理解できるかと・・
りんごを選択しました。選択したものをください この命令は
りんごをくださいと同じ

Sheets("Sheet3").Select
Range(Range("A1"), Range("A1").End(xlToRight)).Select 'A1~右端を選択(※Qセルまで)



Sheets("Sheet3").Select はこの場合、省かない方が良いと思います
(Sheets("Sheet3").Selectが記録されている場合、他のシートから記録されたモノなので省くとエラーになる)

もし、省く場合は 全てのRangeの前にSheets("Sheet3").を書く必要があり、Selectも書いてはダメです
(Sheet3シートに配置したボタンなどで必ずSheets("Sheet3")で実行する場合は可)

大分脱線してしまいました、この辺りは失敗しながら覚えてください
    • good
    • 0
この回答へのお礼

Qchan1962様、回答ありがとうございます。

「データが入っていない と "<>0" は意味が違います」
分かりやすいご説明ありがとうございます。
勉強になります。
別シートの作業で関数が入っているセルに0が表示されている場合もあるのですが、こちらの処理を分岐させたい場合には<> "0" Thenの表記で分岐させることができましたのでこちらも重ねて活用させていただきます。

また提示いただきましたサイトも参考に勉強していこうと思います。
ありがとうございました。

お礼日時:2022/09/03 19:53

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A

このカテゴリの人気Q&Aランキング