[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『マクロ内容の見直し』(付箋)
自分の作業を記憶させた、列の並び替えと削除が混ざっているマクロがあります。
無駄な作業も含まれているはずで、少し動作が重いです。
同じ動作かつ、軽くしようと自分でコード?の修正をしてみたのですが
上手くいかず困っています。
見直して頂けないでしょうか?
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
もこな2様
ご指導ありがとうございます。
そういったテクニックがあるのですね。やってみます!
(付箋) 2019/05/29(水) 12:59
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.