質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

コピー

元のオブジェクトを破壊することなく、オブジェクトの複製を生成することをコピーと呼びます。

Q&A

解決済

2回答

5213閲覧

ブック間貼り付け

xhdl78

総合スコア13

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

コピー

元のオブジェクトを破壊することなく、オブジェクトの複製を生成することをコピーと呼びます。

0グッド

0クリップ

投稿2017/05/16 05:07

編集2017/05/16 05:22

Private Sub CommandButton21_Click()

'■指定したフォルダのXLS系ファイルを選択して、開く

Dim OpenFileName As String ChDrive "C" ChDir "C:\Users\Desktop\123" OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls?") If OpenFileName <> "False" Then Workbooks.Open OpenFileName Else MsgBox "キャンセルされました" End If

'■直前作業したWindowsに戻す

Windows(2).Activate

'■ B2~H2 データある行まで選択してコピー

Range("B2:H2").Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy

'■直前作業したWindowsに戻す

Windows(2).Activate

'■シート[0]に貼り付けしたい部分に先にデータクリアします

Sheets("0").Select **'ここまではできました。

'以降にエラーが出ました。 進行できなくなったので。
**
エラー内容
実行時エラー 1004
RangeクラスSelect メソッドが失敗しました。

Range("A1:N150").Select Application.CutCopyMode = False Selection.ClearContents

'■選択した範囲シート[0]に貼り付け

' Range("B2").Select
' Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
' :=False, Transpose:=False

お手数ですがが、教えてください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ttyp03

2017/05/16 05:14

具体的にどこの行で止まりますか?エラーメッセージは?聞かなくても回答できるように最低限の情報は載せてくださいね。
coco_bauer

2017/05/16 05:17

二つ目の"Windows(2).Activate"では、同じworkbookが選択されるのではないですか? SelectやActivateの対象は、workbookやworksheetを明示的に使うべきだと思います。
xhdl78

2017/05/16 05:28 編集

coco_bauerさん コメントいただいてありがとうございました。二つ目のwindows(2)は 先開いたブックに戻りました。目的は作業したブック選択した内容を 先開いたブックに貼り付けの準備です。開いたブックがシートの選択可能ですですが、セルの選択はできないです。
guest

回答2

0

ベストアンサー

質問のコードからは、何がしたいのか理解できません。
.xlsファイルを選択して開いた後、元々開いていたBookに戻ってデータをCopy。
そして、また元々開いていたBookに戻ってデータを貼り付けしようとしているのですから。

本当は、元々開いていたBookのシート[0]に、選択して開いた.xlsファイルのデータをコピーしたいのではないでしょうか?

もし、そうだとするとコードは以下のような感じになるのでは?

Excel

1Private Sub CommandButton21_Click() 2 Dim origWorkbook as workbook, selectedWorkbook as workbook '元のbookと選択して開くbookを保存する変数を用意しておきます。 3 Dim OpenFileName As String 4 5 Set origWorkbook = activeWorkbook '元のworkbook 6 7'■指定したフォルダのXLS系ファイルを選択して、開く 8 ChDrive "C" 9 ChDir "C:\Users\Desktop\123" 10 OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls?") 11 If OpenFileName <> "False" Then 12 set selectedWorkbook = Workbooks.Open OpenFileName '選択して開いたbook 13 Else 14 MsgBox "キャンセルされました" 15 End If 16 17 selectedWorkbook.Activate 'これが無くても選択して開いたbookがactivateされているはずだが、念のため。(この行の手前に別のbookをActivateするようなコードが入ると想定外の動作が起きるので、この行を入れておくと安全) 18 19'■ B2~H2 データある行まで選択してコピー 20 Range("B2:H2").Select 21 Range(Selection, Selection.End(xlDown)).Select 22 Selection.Copy 23 24'■元のbookに戻る Windows(2).Activateに比べて、どのbookがActivateされるのかが判り易い。 25 origWorkbook.Activate 26 27'■貼り付ける先のシート[0]をActivate 28 Sheets("0").Activate 29 30 Range("A1:N150").Select 31 Application.CutCopyMode = False 32 Selection.ClearContents 33 34'■選択した範囲シート[0]に貼り付け 35 36 Range("B2").Select 37 Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks :=False, Transpose:=False 38 39End Sub

投稿2017/05/16 09:14

coco_bauer

総合スコア6915

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

xhdl78

2017/05/17 02:36

'■元のbookに戻る Windows(2).Activateに比べて、どのbookがActivateされるのかが判り易い。 丁寧な説明 ありがとうございました。理解しました。
guest

0

原因は詳しく調べていませんが、以下のどちらかの対処でうまくいくのではと思います。

1. エラーになるRangeのコードを次のように修正する。

VBA

1Sheets("0").Select 2Range("A1:N150").Select 34Sheets("0").Range("A1:N150").Select 5

2. コードを標準モジュールに置く

こちらの場合、コードの修正は不要です。

投稿2017/05/16 06:18

ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

xhdl78

2017/05/17 02:37

ご回答いただいてありがとうございました。無事解決できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問