[[20170224191852]] 『ボタンを押す毎に切り替えるには』(yama) ページの最後に飛ぶ

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

 

『ボタンを押す毎に切り替えるには』(yama)

マクロ初心者ですが よろしくお願いします。
以下は、2パターンのコピペを実行した記録ですが
フォームのボタンを1回押すごとにコピペする方法を
教授お願いします。
Sub Macro2()
'
' Macro2 Macro
'

'

    ActiveWindow.SmallScroll Down:=76
    Range("AH107:AN126").Select
    Selection.Copy
    ActiveWindow.SmallScroll Down:=-38
    Range("AH62:AJ63").Select
    ActiveSheet.Paste
ここで一度終了
================
    Range("AL88").Select
    ActiveWindow.SmallScroll Down:=57
    Range("AH128:AN147").Select
    Application.CutCopyMode = False
    Selection.Copy
    ActiveWindow.SmallScroll Down:=-57
    Range("AH62:AN63").Select
    ActiveSheet.Paste
    Range("AL87").Select
End Sub

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


3回目は、どこからどこにコピペするのでしょうか?

(マナ) 2017/02/24(金) 19:32


質問の意味がコードをみてわかりました。

(マナ) 2017/02/24(金) 19:38


マナさん
ありがとうございます。
この2パターンの交互です。
3回目はありません。
よろしくお願いします。
(yama) 2017/02/24(金) 19:39

こんなのでもよいですか?

 Sub test()

    With ActiveSheet.Shapes(Application.Caller)
        If .Name = "コピー1" Then
            Range("AH107:AN126").Copy Range("AH62")
            .Name = "コピー2"
        Else
            Range("AH128:AN147").Copy Range("AH62")
            .Name = "コピー1"
        End If
    End With

 End Sub

(マナ) 2017/02/24(金) 19:59


 こんな書き方もあるでしょうか。

 Option Explicit

 Dim flag As Boolean

 Sub Macro2()
     flag = Not flag
     If flag Then
         Range("AH107:AN126").Copy Range("AH62")
     Else
         Range("AH128:AN147").Copy Range("AH62")
     End If
 End Sub

 変数の永続性を考えると、モジュールレベルの変数ではまずいかもしれないですね。

 マナさんが提示された方法は、その点、完璧だと思います。
 このほか、シートにflagの値を保存しておくとか、色々な手段があるかもしれません。
 ただ、所詮、もう一度押せば選択肢は変わるのですから、
 余り凝らなくてもいいかなあと思ったりします。

 ===========================
 それよりもまず、マクロ記録のシェイプアップの仕方をマスターすることですね。
 ・SmallScrollメソッドは結果に関係しないとか、
 ・コピーメソッドは、貼り付け先の左上のひとつのセルを指定するだけでよい。
 ・コピーメソッドは、一行で書けるとか
 いったことですね。

(γ) 2017/02/24(金) 20:20


(マナ)さん
ありがとうございます。
完璧希望通りです。

(γ)さん
ありがとうございました。
>それよりもまず、マクロ記録のシェイプアップの仕方をマスターすることですね。
勉強します。
(yama) 2017/02/24(金) 20:48


私のは動作したんでしょうか?
そのことをむしろ書いていただきたいですね。

# よかれと思って書いたひと言に、カチンとこられているのでしょうかね。

 flag = Not flag
の意味はわかりますか?
Dim flag As Boolean
ということは、flagは True か False を取る変数です。

  flag = Not flag
とすることで、
flagが FalseならTrue に変更
flagが True ならFalseに変更しています。
その値によって、処理を分岐しています。
 
 flag = Not flag
といった書き方は割とよく出てくる書き方ですので、
頭の片隅に置いておかれると、役立つかもしれません。
老婆心ながら追加説明しました。

(γ) 2017/02/24(金) 21:21


コメント返信:

[ 一覧(最新更新順) ]


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