[[20230606140447]] 『ActiveWindow.SmallScrollについて』(会社員) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『ActiveWindow.SmallScrollについて』(会社員)

普段使用しているマクロの改修を行うことになったのですが
お恥ずかしながら独学の初心者のため
こちらでご質問させてください。

<改修前のコード>
Sub test()

    Columns("A:D").Select
    Selection.Delete Shift:=xlToLeft
    Columns("C:C").Select
    Selection.Delete Shift:=xlToLeft
    Columns("E:P").Select
    Selection.Delete Shift:=xlToLeft
    Range("L19").Select
    ActiveWindow.SmallScroll Down:=-6
    Columns("B:O").Select
    Columns("B:O").EntireColumn.AutoFit
    Rows("2:2").Select
    ActiveWindow.FreezePanes = True
    ActiveWindow.SmallScroll Down:=-27
    Rows("1:1").Select
    Selection.AutoFilter
    Range("A2").Select
End Sub

<改修後のコード(予定)>
Sub test()

    Columns("A:D").Delete
    Columns("C").Delete
    Columns("E:P").Delete
    Columns("B:O").EntireColumn.AutoFit
    Rows("2:2").Select
    ActiveWindow.FreezePanes = True
    Rows("1:1").AutoFilter
    Range("A2").Select
End Sub

・このマクロを使って別ファイルのCSVを編集しています。
・編集するCSVファイルのデータはA1:AG500までデータが入っています。(ところどころ空白有)

質問?@
改修前コードに記載されている「ActiveWindow.SmallScroll Down:=●」が分からずネットで調べると、
ウインドウの文字列を下へ●行スクロールする、という意味でした。
この改修前コードの場合、「ウインドウの文字列を下へ-6行(マイナスだから上へ6行?)スクロール」
という意味なのでしょうか…

質問?A
?@に関係している内容ですが、選択している「Range("L19")」には
この体制調整マクロにおいて起点となる重要なデータは入っていません。
(ファイルは毎週更新するためL19の中身は可変します。)
例えると、下記表の「いちご(B5)」を選択しているようなものです。

表?@ 名前 数量
1 りんご 5個
2 みかん 10個
3 ばなな 3個
4 いちご 7個
5 ばなな 9個

前後のコード等を見ても、この部分を起点に何か行っているような描写はないし
不要と考え「ActiveWindow.SmallScroll Down」と一緒にコードを削除するつもりですが、
大丈夫そうでしょうか
(私が気づいていないだけで、これを削除することによって他コードへの影響ってあったりするのでしょうか。)

伝わりにくかったらすみません、どなたか分かる方よろしくお願いいたします。

< 使用 Excel:Microsoft365、使用 OS:Windows10 >


環境依存文字を使用したため文字が不自然に変換されていますね。。。
 質問?@ →質問1
 質問?A →質問2
です、よろしくお願いいたします。
(会社員) 2023/06/06(火) 14:08:12

マクロを記録するとそうなります。それがマクロの記録の限界です。
汎用的にするには、知識に裏打ちされたそれなりのアレンジが必要となります。
ただし、ActiveWindow.SmallScroll Down:=XX 等は絶対削除しても構いません。

(名無し) 2023/06/06(火) 14:15:09


あと、Range("L19").Selectも削除していいですよ。
その後、Columns("B:O").Select してるでしょ。
あと、最初のほうの列削除は知りませんよ。
その時のデータのみ有効だったのか、汎用的なものなのかが不明なので。

(名無し) 2023/06/06(火) 14:22:55


>あと、最初のほうの列削除は知りませんよ。
>その時のデータのみ有効だったのか、汎用的なものなのかが不明なので。

これって、どういう意味でしょうか?
もう少し分かりやすく説明していただけないでしょうか
(会社員) 2023/06/06(火) 15:15:36


>あと、最初のほうの列削除は知りませんよ。
>その時のデータのみ有効だったのか、汎用的なものなのかが不明なので。

    Columns("A:D").Delete
    Columns("C").Delete
    Columns("E:P").Delete
の部分が全てのファイルに対して有効なのか、
マクロを記録したファイルに対してだけ有効なのかが分からないので
安易に「削除していい」とか「こうしたらいい」とは言えない、という意味だと思いますよ。
( 'ふ') 2023/06/07(水) 09:55:14

横からですが何点か。

■1
>改修前コードに記載されている「ActiveWindow.SmallScroll Down:=●」が分からずネットで調べると〜
調べてわかったと思いますが、【マクロの記録】のときに画面をスクロールしたものがコード化されたものであって運用時には必要ありません。(削除してOKです)

■2
【マクロの記録】ではそのまま記録されますが、VBAの世界では基本的にシートやセル(オブジェクトといいます)をきちんと明示すれば、いちいちアクティブにしたり選択したりする必要はありません。
一方で、【標準モジュール】でシートの指定をしない場合ActiveSheetを指定したとみなされるルールです。
よって、必須ではありませんが、対象のオブジェクトを指定する書き方に慣れておいた方がよいと思います。

■3
上記で基本的には〜と書きましたが、ウィンドウ枠の固定をする場合は、例外的に対象のセルをアクティブ(選択)する必要があります。

 【参考】
https://excel-ubara.com/excelvba1/EXCELVBA370.html

■4
ということを踏まえると↓のように整理すればOKかと思います。

    Sub test改()
        With ActiveSheet
            Range("A:D,G:G,J:U").Delete
            .Columns("B:O").AutoFit

            .Rows("2:2").Select
            ActiveWindow.FreezePanes = True

            .Rows("1:1").AutoFilter
            .Range("A2").Select
        End With
    End Sub

■5
なお、【別ファイルのCSV】とのことですが、そもそもCSVはエクセルブックの一種ではなくテキストファイルです。
少し難しくはなりますが、データ取り込み時に不要な列は除外するという制御も可能です。
最近[[20230603073422]]で話題に上がりましたので興味があれば読んでみてください。

(もこな2 ) 2023/06/07(水) 12:10:44


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.