[[20190529115924]] 『マクロ内容の見直し』(付箋) ページの最後に飛ぶ

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

 

『マクロ内容の見直し』(付箋)

自分の作業を記憶させた、列の並び替えと削除が混ざっているマクロがあります。
無駄な作業も含まれているはずで、少し動作が重いです。
同じ動作かつ、軽くしようと自分でコード?の修正をしてみたのですが
上手くいかず困っています。
見直して頂けないでしょうか?

    Range("B:D,F:J,L:X").Select
    Range("L1").Activate
    Selection.Delete Shift:=xlToLeft
    Range("E:G,I:K,M:V").Select
    Range("M1").Activate
    Selection.Delete Shift:=xlToLeft
    Range("I:R,T:U,W:AB").Select
    Range("W1").Activate
    Selection.Delete Shift:=xlToLeft
    Range("A1").Select

    Columns("F:F").Select
    Selection.Cut
    Columns("E:E").Select
    Selection.Insert Shift:=xlToRight
    Columns("I:J").Select
    Selection.Cut
    Columns("G:G").Select
    Selection.Insert Shift:=xlToRight
    Columns("J:J").Select
    Selection.Cut
    Columns("I:I").Select
    Selection.Insert Shift:=xlToRight
    Columns("C:C").Select
    Selection.Cut
    Columns("J:J").Select
    Selection.Insert Shift:=xlToRight
    Columns("A:A").Select
    Selection.Cut
    Columns("J:J").Select
    Selection.Insert Shift:=xlToRight
    Columns("A:A").Select
    Selection.Cut
    Columns("K:K").Select
    ActiveSheet.Paste
    Columns("A:A").Select
    Selection.Delete Shift:=xlToLeft
    Columns("B:B").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Columns("G:G").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Columns("J:J").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Range("A1").Select

< 使用 Excel:Excel2016、使用 OS:Windows7 >


 >少し動作が重いです。
 どのくらいの時間がかかるのでしょう?
(seiya) 2019/05/29(水) 12:34

動作が重い問題はさておきコードの整理の観点で。

>自分でコート゛?の修正をしてみたのですが 上手くいかず困っています。

ステップ実行というテクニックを使うと
1行ずつ実行して動きを確認できますから、まずはご自身でどの命令がなにをやっているのか理解されることをおすすめします。
https://www.239-programing.com/excel-vba/basic/basic023.html

また、手直しの方向として私なら

 ○○.Select
 Selection.××

となっている部分は

 ○○.××

と記述することができますので、その修正を行います。

さらに、今回は列を丸ごと操作する仕組みのようですから、挿入する命令と削除する命令に付いている引数の[Shift]は省略可能ですし、理由は違いますが[CopyOrigin]も既定値であるものを指定していますので省略が可能ですから、当該部分も修正します。

なお、今回のケースに限れば「○○.Activate」は関係ないので、整理するときに削っても構わないと思います。

このほか、質問とは関係ないですが「列の並び替え」と仰っていますが実際にはカット&インサートをしているだけなので、もしかしたら、本当に【並び替え】をするほうが良いのかもしれません。
(Excel2016なら列方向の並び替えもできるはずですし、マクロの記録でどのような命令を使えば良いのかも調べられます)

おまけで。
今回は複雑ではないので、好きにすればよいとおもいますが、今後条件分岐やループ処理をするような場合が出てくると思います。
そんなときには、インデントをつけてコードを見やすくすることをおすすめします。
http://kabu-macro.com/vba_apply/vba_indent.html

(もこな2) 2019/05/29(水) 12:51


 同じ結果になればよい

 ということなら、短くできます。

     Dim e
     For Each e In Array(Array("k", "i"), Array("a", "k"), Array("y", "a"), Array("ac", "d"), Array("e", "m"))
         Columns(e(0)).Cut Columns(e(1))
     Next
     Range("a:a,d:d,i:i,k:k,m:m").EntireColumn.Hidden = True
     Cells.SpecialCells(12).Clear
     Columns.Hidden = False
(seiya) 2019/05/29(水) 12:56

seiya様
時間としては1分ぐらいかかる状態です。

もこな2様
ご指導ありがとうございます。
そういったテクニックがあるのですね。やってみます!
(付箋) 2019/05/29(水) 12:59


コメント返信:

[ 一覧(最新更新順) ]


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