[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『別シートのコピペ方法を教えてください』(あるす君)
上記のサイトでInputボックスでセル範囲を指定させることができるのですが、別シートのセル範囲を指定しても正常に動きません。
どうしたらいいでしょうか。
< 使用 Excel:Excel2019、使用 OS:Windows10 >
どんな動作が「正常」なのですか?
(わからん) 2022/06/14(火) 15:41
Selectする必要があるとは思えませんが、どうしても選択したいなら下記を変更すればいいです。
cellRange.Select ↓ cellRange.Parent.Select cellRange.Select
(わからん) 2022/06/14(火) 16:26
コピーして貼り付けしたいです。
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
これで、コピーモードは解除されますね。
尚、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
最近のエクセルにあるのか解りません。
バグがあるといわれつつ、いつの間にか無くなってたり?
注意事項
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.