○第50回目 ちょっとした小物、コピー編
データの編集作業でよく使うのがコピーです。コピーにもいろいろありますが何をよく使いますか。その上位から2、3をマクロ化するととても便利です。当然ショートカットキー化もします。
しかし、全面的なコピーは、すでにショートカットキーがなされているので、マクロ化は不要です。それ以外のもので有益なものを考えてください。
筆者の例でいえば、"計算式のコピー"と"値と数値の書式のコピー"です。これはかなり使用します。
通常の処理では、範囲を指定してCtrl+C、貼り付け場所にカーソルを移してAlt+E+Sのあとに上矢印キーを二回動かして計算式の貼付けを選択、エンターキーを押すということになります。
これを、範囲を指定しショートカットキーでマクロを呼び出し(最大でもCtrl+Shift+X)、張り付け場所にカーソルを移動しエンターキーとなります。上の場合とは、"Alt+E+Sをしそのあとに上矢印キーを二回動かして"というキー操作が不要となります(計算式・書式の張り付けの場合は、上矢印キーを三回動かしてとなります)。
これはお勧めです。
処理を分解しますと、
指定座標の取得=⇒今まで結構出てきている基本処理
コピーの処理=⇒マクロの記録で把握
コピー先の座標の指定=⇒これも定番の処理
張り付けの処理=⇒マクロの記録で把握
となります。
座標はコピー元、張り付け先とも、一つのセル及び範囲セルの可能性があります。
これを分け、別々に作成するのはめんどくさいので、一つにまとめます。
'指定範囲の取得
AAA = Selection.Address
p1 = InStr(AAA, ":")
If p1 <> 0 Then
AAA1 = Left(AAA, p1 - 1)
retu1 = Range(AAA1).Column
gyo1 = Range(AAA1).Row
AAA9 = Mid(AAA, p1 + 1)
retu9 = Range(AAA9).Column
gyo9 = Range(AAA9).Row
Else
AAA1 = AAA
retu1 = Range(AAA1).Column
gyo1 = Range(AAA1).Row
AAA9 = AAA1
retu9 = retu1
gyo9 = gyo1
End If
gyo_cnt = gyo9 - gyo1 + 1
retu_cnt = retu9 - retu1 + 1
すべての場合に同じものを使うのは、多少無駄があるのですが、大体の処理はこれ一つでできますので、便利な道具となります。
次は、張り付け先の座標の指定です
Set セル範囲 = Application.InputBox(Prompt:="貼り付けるセル範囲を選択してください", Default:=XXX, Left:=10, Top:=2, Type:=8)
AAA2 = セル範囲.Address
※Default値は必要な場合のみ。
Dim セル範囲 As Range の定義が必要
最後は、コピー処理です("値と数値の書式"の場合)。
Range(AAA).Copy 'AAAはコピーもとの座標
Range(AAA2).PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False 'AAA2は張り付け先の座標
Application.CutCopyMode = False 'コピー選択を解除
これを組み立てて、ショートカットキーを当てはめれば完了です。
※筆者はこれにシートの移動機能を付加したものも使用しています。シートを越えてもコピーが出来るという売りです。デフォルト値として同一シートを指定していますので、同一シートへのコピーの場合は、最小限としてエンターキーが1回余計に必要となります。シートをかえる場合は、シート番号の入力が更に必要となります。
どちらを常用するかは、使う人の感覚ですね。(エンターキーの操作が余計になります)

0 件のコメント:
コメントを投稿