[[20220614151536]] 『別シートのコピペ方法を教えてください』(あるす君) ページの最後に飛ぶ

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

 

『別シートのコピペ方法を教えてください』(あるす君)

https://dolphinpg.net/program/excel-vba-selectrange/?unapproved=1172&moderation-hash=0df915adb30cdae047ffe48529b417d3#comment-1172

上記のサイトでInputボックスでセル範囲を指定させることができるのですが、別シートのセル範囲を指定しても正常に動きません。
どうしたらいいでしょうか。

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


>正常に動きません。

どんな動作が「正常」なのですか?

(わからん) 2022/06/14(火) 15:41


Selectすらできません。
コピーして貼り付けしたいです。
(あるす君) 2022/06/14(火) 15:57

>Selectすらできません。

Selectする必要があるとは思えませんが、どうしても選択したいなら下記を変更すればいいです。

    cellRange.Select
     ↓
    cellRange.Parent.Select
    cellRange.Select

(わからん) 2022/06/14(火) 16:26


ありがとうございます!
(あるす君) 2022/06/14(火) 16:36

コピーして貼り付けしたいです。

cellRange.Copy で良くないですか ?

後は、コピペしたいシートでペースト !!

(ROM) 2022/06/14(火) 16:58


 上記のサイトのInputボックスコード
 Sub selectRange()
     Dim cellRange As Range

     On Error Resume Next
     Set cellRange = Application.InputBox("処理範囲をドラッグして選択してください", "処理範囲の指定", Type:=8)

     If cellRange Is Nothing Then Exit Sub
     cellRange.Select

 End Sub
 シートに関係なく範囲選択できましたけど。
 >コピーして貼り付けしたいです。 
 このコードでコピーして貼り付けしたいと考えているんじゃないですよね。。
(???) 2022/06/14(火) 17:54

>Set cellRange = Application.InputBox("処理範囲をドラッグして選択してください", "処理範囲の指定", Type:=8)

これで、コピーモードは解除されますね。

尚、2007では選択できませんでした。
インプットボックス用のエラートラップを外すとエラーになります。
普通は、直後に On Error goto 0 でエラートラップ解除ですか。
(ファイブジー) 2022/06/14(火) 19:41


 コピー元も貼り付け先も可変なら、手作業で実行したほうが早い気がしますが、
 一連のマクロの中という建付けなんでしょうか。

 現在困っているのが、貼り付け先の指定ということなのか、明確に書いたほうがいいですよ。

 皆さんのご指摘も参考にさせてもらうと、例えば、こんな書き方ができると思います。
 (キャンセルを想定することが必須なのかも不明ですが、それがなければもっと簡単になりますね。)

 Sub selectRange()
     Dim cellRange As Variant
     Dim pasteRange As Variant

     'コピー元の選択
     On Error Resume Next
     Set cellRange = Application.InputBox("処理範囲をドラッグして選択してください", _
                                          "処理範囲の指定", Type:=8)
     On Error GoTo 0
     If TypeName(cellRange) <> "Range" Then Exit Sub

     ' 貼り付け先の選択
     On Error Resume Next
     Set pasteRange = Application.InputBox("処理範囲をドラッグして選択してください", _
                                          "処理範囲の指定", Type:=8)
     On Error GoTo 0
     If TypeName(pasteRange) <> "Range" Then Exit Sub

     'コピーペイスト
     cellRange.Copy pasteRange
     Application.Goto pasteRange
 End Sub

(γ) 2022/06/16(木) 17:26


RefEditを使うとか?
2つとか複数選べるようになる。

最近のエクセルにあるのか解りません。
バグがあるといわれつつ、いつの間にか無くなってたり?

注意事項
http://addinbox.sakura.ne.jp/Excel_Tips08.htm#S2
(ファイブジー) 2022/06/16(木) 23:24


 説明が前後しますが、こういうことでしょう。

 ・Sheet1がアクティブな状態で、マクロを実行し、
 ・Sheet2のセルを選択したとします。
 ・マクロが終了すると、
   Sheet1がアクティブになっている
 このことをもって、「動作していない」という判断になったのでしょう。

 マクロをスタートさせたときのシート選択に戻る、
 というのを仕様にしているものと思います。

 こうしたSelectすることを目標にするようなコードはミスリードするのかもしれません。
 通常はSelectなどということはしませんから。

 ただ注目すべきは、cellRangeが正しく設定されていることです。
 これは、下記のコードで確認できます。
 Sheet2のセルがセットされることが分かります。イミディエイトウインドウを見て下さい。

 Sub selectRange()
     Dim cellRange As Range
     On Error Resume Next
     Set cellRange = Application.InputBox("処理範囲をドラッグして選択してください", "処理範囲の指定", Type:=8)
     If cellRange Is Nothing Then Exit Sub
     Debug.Print cellRange.Address(external:=True)   '■この部分を追加
     cellRange.Select
 End Sub

 コードに追加する処理のなかで、そのcellRangeを利用できます。
 例えば、私が提示したようなコードが一例です。

 -------------
 【余談】
 RefEditですか。ありましたねえ、そう言えば。
 強制終了したり、参照設定のなかでエラーを起こす代表格として悪名高いものでしたね。
 今でも生き延びているのでしょうか。存在すら忘れていました。
 その他のコントロールには残っているようです。
(γ) 2022/06/17(金) 07:34

 >これで、コピーモードは解除されますね。
 範囲選択するのであってコピーモード解除じゃありません。
 点滅している枠線を取り除くことを言います。
 コピーモード解除は
 Application.CutCopyMode = True
 です。
(???) 2022/06/17(金) 09:43

 (ROM) 2022/06/14(火) 16:58 のお手伝い
 Sub selectRange()
     Dim cellRange As Range
     On Error Resume Next
     Set cellRange = Application.InputBox("処理範囲をドラッグして選択してください", "処理範囲の指定", Type:=8)
     If cellRange Is Nothing Then Exit Sub
     cellRange.Copy  '(ROM) 2022/06/14(火) 16:58
 End Sub
(???) 2022/06/17(金) 10:22

ああ、すでにコピー状態であって、貼り付け先を指定するもの
ではなかったのか?

>コピーして貼り付けしたいです。

これの意味がよく解らなかった。
コピー元を指定させて、コピー先を指定って
普通(手作業)のコピペと変わらないのでは!

(ファイブジー) 2022/06/17(金) 10:37


コメント返信:

[ 一覧(最新更新順) ]


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