• ベストアンサー

WSHによるExcelのセルコピー&ペーストの方法

【やりたいこと】 WSHを利用して 1.あるExcelファイル(Aとする)を開く 2.別のExcelファイル(Bとする)を開く 3.Aの特定のシートの特定のセル範囲をコピー 4.Bの特定のシートに、3でコピーしたセル範囲をペースト 5.B上書き保存&閉じる 6.A閉じる 【現状】 以下のようなコードを書いてみたのですが、 ファイルの開閉はできますがコピー&ペーストが 全くできていないようです。 何が問題なのかよくわからず質問させていただきました。 かなり素人なので無駄も多いですが、ぜひご教授願います。 よろしくお願い致します。 ------------------------------------- Set xl1 = Wscript.CreateObject("Excel.Application") xl1.Visible = false Set book1 = xl1.WorkBooks.Open(A) Set mysheet1 = book1.worksheets(特定のシート) Set xl2 = Wscript.CreateObject("Excel.Application") xl2.Visible = false Set book2 = xl2.WorkBooks.Open(B) Set mysheet2 = book2.worksheets(特定のシート) mysheet1.Activate xl1.Range("A1").CurrentRegion.Select xl1.Selection.Copy mysheet2.Activate xl2.Range("A1").Select xl2.Selection.Pastespecial 'ファイルクローズ book2.Close false xl2.Quit set mysheet2 = Nothing set book2 = Nothing Set xl2 = Nothing book1.Close false xl1.Quit set mysheet1 = Nothing set book1 = Nothing Set xl1 = Nothing --------------------------------

質問者が選んだベストアンサー

  • ベストアンサー
  • sam_inoue
  • ベストアンサー率47% (27/57)
回答No.2

>Set xl1 = Wscript.CreateObject("Excel.Application") >Set xl2 = Wscript.CreateObject("Excel.Application") これだとExcelのインスタンスが2つできてしまいます。 2ブックを開くのにExcelを2つ立ち上げる必要はありません。 Set xl1 = Wscript.CreateObject("Excel.Application") xl1.Visible = false Set book1 = xl1.WorkBooks.Open(A) Set mysheet1 = book1.worksheets(特定のシート) Set book2 = xl1.WorkBooks.Open(B) Set mysheet2 = book2.worksheets(特定のシート) ・ ・ で良いはずです。

その他の回答 (2)

  • sam_inoue
  • ベストアンサー率47% (27/57)
回答No.3

>mysheet1.Activate >xl1.Range("A1").CurrentRegion.Select >xl1.Selection.Copy >mysheet2.Activate >xl2.Range("A1").Select >xl2.Selection.Pastespecial ここもNGでしょう。 RangeはSheetに属します。 mysheet1.Activate mysheet1.Range("A1").CurrentRegion.Select mysheet1.Selection.Copy mysheet2.Activate mysheet2.Range("A1").Select mysheet2.Selection.Pastespecial とするか、 mysheet1.Range("A1").CurrentRegion.Copy mysheet2.Range("A1") だけでも良いと思います。 このあたりはExcelVBA内で検証できるはずです。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

最大の原因は、book2を保存してないことです。 book2.save book2.close とします。 また、他の注意点として、 Set xl1 = Wscript.CreateObject("Excel.Application") とした時に、現在のカレントディレクトリは、VBScriptのファイルがあったフォルダとは違う場合があるということです。開くファイルをフルパスで指定します。 あと、xl2は、エクセルを別に起動するというようなことですが、 xl1.WorkBooks.Open(B) で開けます。

関連するQ&A

  • クリップボードの内容をEXCELに貼付け

    クリップボード内容をエクセルのシートに貼り付けることをvbで行おうとしています。 1回目はできるのですが、2回目にはエラーが出てしまいます。(貼り付けるセルを指定したときに) 現状のコードを添付します。おかしなところがわかる方、教えて下さい。 '------------------------------------------------------- 'エクセルを起動させる '------------------------------------------------------- Public Sub ExcelProc() Dim xl2 As Excel.Application Dim xl2Book As Object Dim xl2Sheet As Object Dim ELSFileName As String 'エクセルの起動 Set xl2 = CreateObject("excel.application") xl2.Visible = True xl2.Workbooks.Open ("d:\test.xls") Set xl2Book = xl2.ActiveWorkbook Set xl2Sheet = xl2Book.Worksheets(1) 'D10にクリップボードの内容を貼り付ける xl2Sheet.Select Range("d10").Select ActiveSheet.Paste '保存するファイル名を作成 ELSFileName = "c:\test10.xls" '保存 ChDir "C:\" ActiveWorkbook.SaveAs FileName:=ELSFileName, FileFormat:=xlNormal, _ Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _ CreateBackup:=False Set xl2Sheet = Nothing xl2Book.Close True Set xl2Book = Nothing xl2.Quit Set xl2 = Nothing End Sub この関数を2度実行させたらエラーになります。 Range("d10").Select 'この箇所でエラーになる。 お願いします。

  • VBscriptでのエクセルの起動について

    phpで開発しているのですが 問題はVBscriptでの問題と思われますのでここで 質問させてください。 vbscript上で Dim xl Dim book, sheet Set xl = CreateObject("Excel.Application") xl.Visible = false Set book = xl.WorkBooks.Add("http://**/****.xls") xl.DisplayAlerts = False -------- phpでのエクセルへのデータ操作 -------- xl.DisplayAlerts = true xl.visible = true set book = Nothing Set xl = Nothing という形でエクセルを起動して、データを挿入してから 画面上に表示という事をしています。 このときに、エクセルはちゃんと起動してくるのですが アクティブウインドウになってくれません。 タスクバーのボタンがピコピコ点滅するだけです。 クリックすると前面に表示されるのですが。。。 どうにか、自動的に前面に出すことはできないでしょうか?

  • ACCESSからexcelを操作

    accessのVBからEXCELのデータ編集を行う際、 最後エクセルを開放しているつもりなのですが、できていないようです。 ※タスクマネージャーにエクセルのタスクが残っており、 該当のファイルを開くと白くなっている。閉じて再度開くと正常動作する。 いくつかの帳票がありますが、 現象が起こるものと起こらないものがあります。 試しに Xls_app.ScreenUpdating = Trueにしてみるとタスクには残っているが 問題なく開けます。 Xls_app.ScreenUpdating = Falseだとタスクにも残るし、ファイルを開くと白くなっているような感じです。 しかし発生原因がわからず、再発するような気もするので根本原因を 突き止めたいです。 Excel起動時 ---------------- Set Xls_app = CreateObject("Excel.Application") Set Xls_book = Xls_app.Workbooks.Open(STR_out_file) Set Xls_sheet = Xls_book.Worksheets(STR_sheet1) Set Xls_sheet2 = Xls_book.Worksheets(STR_sheet2) 'DEBUG Xls_app.Visible = False Xls_app.ScreenUpdating = False Xls_app.UserControl = True ' Xls_app.Visible = True ' Xls_app.ScreenUpdating = True Private Sub Excel終了()----------------------- Xls_book.Close (True) Xls_app.Quit Set Xls_sheet = Nothing Set Xls_sheet2 = Nothing Set Xls_book = Nothing Set Xls_app = Nothing End Sub

  • AccessでExcelのプロセスが消せない

    Access2007を使用してExcelへ出力するプログラムを作っております。 On Error時にExcelのプロセスが消せなくて困っています。 正常に終了した場合は消えているのですが、On Error時には消せないと言うのはなぜでしょう? どなたか教えてください! ロジックは以下の通りです。 Dim xls, Book, newSheet As Object Private Sub cmd02_Click() On Error GoTo Err_cmd02_Click '処理A '処理B '処理C 'ExcelFile出力 Call ExcelOut Exit_cmd02_Click: Exit Sub Err_cmd02_Click: MsgBox ERR.Description 'ExcelがOpenしているかの判断 If bolExcelFlag = True Then 'Open中だったらClose Set newSheet = Nothing Book.Close SaveChanges:=False Set Book = Nothing xls.Quit Set xls = Nothing End If Resume Exit_cmd02_Click End Sub Private Sub ExcelOut() 'Excelオブジェクト作成 Set xls = CreateObject("Excel.Application") '新しいブックを追加 Set Book = xls.Workbooks.Add '新しいシートを追加 Set newSheet = Book.Worksheets(1) 'ExcelFlagをOn bolExcelFlag = True 'ヘッダー出力 Call HeaderOut 'ExcelFile編集メイン Call MainOut '最終のSub Total編集 Call BreakOut 'フッター出力 Call FooterOut 'ファイルの保存 Book.SaveAs (strOutFileName) '各オブジェクトのClose Book.Close xls.Quit Set newSheet = Nothing Set Book = Nothing Set xls = Nothing 'ExcelFlagをOff bolExcelFlag = False End Sub 以上、よろしくお願いいたします。

  • Bookの参照をはずした形式でペーストする方法 エクセル

    以下2つのファイルがあります。 □Book1  Sheet1   A1セル =Sheet2!A1  Sheet2   A1セル 1 □Book2  Sheet1   A1セル =[Book1]Sheet2!A1  Sheet2   A1セル 2 Book2,Sheet1,A1セルは、 Book1,Sheet1,A1セルをコピーペーストした結果です。 この状態では、Book2,Sheet1,A1セルには"1"が表示されます。 Book2,Sheet1,A1セルに"2"を表示するために、 Book1,Sheet1,A1セルのコピーを Book2,Sheet1,A1セルに"=Sheet2!A1"としてペーストで入力したいのですが、 普通にペーストしたときは、上記の結果、 「形式を選択して貼り付け」→「数式」としても同じ結果となってしまいます。 どのようにすれば、Bookの参照をはずした形式でペーストできるのでしょうか。 よろしくお願いします。 Excel2003

  • エクセルのVBAで、異なるブック間でのコピー&ペースト

    こんばんは。 エクセルのVBAで、異なるブック間でのコピー&ペーストに関しての質問です。 現在アクティブになっているシートのB4セルをコピーして、 現在開いているシートのブックとは異なる特定の ブック(”Book1")の特定のシート(”Sheet1”)のC5セルに貼り付けたい場合、 ●●●の部分に何と表現すればよいか教えてください。 Range("B4").Copy Destination:=●●● よろしくお願いいたします。

  • JavaScriptで開いたエクセルが閉じない

    題名は25文字しか入力できないので、題名と本文が不適当ですが・・・ htmlのソースにVBScriptとJavaScriptを用いて以下の事をやらせようとしました。 (1)VBScriptで、既存のエクセルファイルを開く (2)JavaScriptで、先に開いたエクセルファイルのセルを参照して値を表示させる (3)VBScriptで、開いているエクセルファイルを閉じる ソースは以下のように書きました。 <html> <head> <title>TEST</title> </head> <body> <script language="VBScript"> Dim app Dim book Dim sheet Set app = CreateObject("Excel.Application") app.Visible = false Set book = app.Workbooks.Open("○△□.xlsx")  Set sheet = book.Worksheets("Sheet1") </script> <script language="JavaScript"> document.write (sheet.Cells(1,2)); document.write (sheet.Cells(2,2)); </script> <script language="VBScript"> book.Close() app.Quit() Set sheet = Nothing Set book = Nothing Set app = Nothing </script> </body> </html> これをIEで開くと、正しくセルの値を表示させることはできました。しかし、更新をかけると、メモリにエクセルが居座ってしまい、タスクマネージャーのプロセスを見ると、「EXCEL.EXE」が更新のたびに増えてしまいました。 マイクロソフトのサポート(http://support.microsoft.com/kb/266088/ja)によると、Javascriptからエクセルを開くとこのような症状が出ると書いてありますが、VBScriptで開いたエクセルをJavascriptで参照しても同じことなのでしょうか? また当方、先のサポートページの内容を正しく理解できておらず、この問題を解決できておりません。どなたかアドバイスいただけたらと思います。

  • エクセルVBAについて

    <sheet1>フォーマット(コピーするシート) <sheet2>    A列    B列 ○○支店  15 △△支店  10 ××支店  28 ■■支店  25 ◎◎支店  18 sheet1のフォーマットをsheet2のB列の数コピーして、sheet2のA列の支店別に新しいブックへ保存するという作業のマクロを組みたいのですがどのようにしたらよいでしょうか?お教えください。VBAに関しまして初心者で、勉強しているのですがいまいちわかりません。どうぞよろしくお願いします。 今、一つだけコピーして保存するということはできていますが、上記のように全部を自動的にしたいのですが・・・ Sub グラフをコピーして別ブックへ保存() Dim mySheet As Worksheet Set mySheet = ActiveWorkbook.Worksheets("グラフ") mySheet.Copy ActiveWorkbook.SaveAs Filename:="大阪第一" '別名を付けてブックを保存する ActiveWorkbook.Close '別名ブックを閉じる End Sub よろしくお願いします。

  • 他のブックからシートをコピーする

    ExcelVBA勉強中の者です。 他のブックのsheet1をコピーし、使用中のブックのsheet1にペーストする事を目的に ネットの情報を参考に以下のコードを作成しました。 Sub test() Dim book1 As Workbook '変数book1をワークブック型で宣言 Dim book2 As Workbook '変数book2をワークブック型で宣言 Set book1 = Application.ActiveWorkbook 'アクティブになっているブックをbook1へセット Application.ScreenUpdating = False '画面の更新を止める '↓アドレスのブックを開く事までbook2にセット(ReadOnly:=Trueで読み込み専用) Set book2 = Application.Workbooks.Open("C:\Documents and Settings\AAA\デスクトップ\他のブック.xls", ReadOnly:=True) book2.Sheets("Sheet1").Copy after:=book1.Worksheets("sheet1") Set book1 = Nothing '変数book1を開放 book2.Close SaveChanges:=False 'book2を閉じる(SaveChanges:=Falseで保存せずに終了) Application.ScreenUpdating = True '画面の更新を再開する Set book2 = Nothing '変数book2を開放 End Sub 動作としては上手くいったのですが、 book2.Sheets("Sheet1").Copy after:=book1.Worksheets("sheet1") の部分でペースト先を変数book1のsheet1と指定しているにも関わらず sheet1(2)という新しいシートが作成され、そちらへペーストしてしまいます。 思うに「コピーしたシートを挿入する」という動作であると思われますが、 これをペーストするという表記が出来ず困っております。 お手数お掛けしますがどなたかご助力お願い致します。 *Excelのバージョンは2002を使用しております。

  • エクセルマクロで、他ブックからオートフィルタ抽出

    エクセルで別ブックで作成してあるカレンダーから、稼働日を判断して指定した期間の日付をオートフィルターを使って抽出したいのですが、うまくいきません。 このようなコードを記述しましたが、別ブックでオートフィルターを使用する事はできるのでしょうか? Dim book1 As Workbook '変数book1をワークブック型で宣言 Dim book2 As Workbook '変数book2をワークブック型で宣言 Dim today As Date Set book1 = Application.ActiveWorkbook 'アクティブになっているブックをbook1へセット Application.ScreenUpdating = False '画面の更新を止める '↓アドレスのブックを開く事までbook2にセット(ReadOnly:=Trueで読み込み専用) Set book2 = Application.Workbooks.Open("\\sv\C1\\稼働日カレンダー.xls", ReadOnly:=True) today = Date maxdate = cdate("2014/3/3") ' book2.Worksheets("DATA").Cells.Copy Destination:=book1.Worksheets("Sheet1").Range("A1") '----オートフィルタでデータを抽出 With book2.Worksheets("Sheet1").Range("A1").CurrentRegion .AutoFilter .AutoFilter Field:=1, Criteria1:=">=" & today, Operator:=xlAnd, Criteria2:="<=" & maxdate ' .AutoFilter Field:=2, Criteria1:="=" & 1 '----抽出データをコピー&貼り付け .Copy ActiveSheet.Range("A" & maxrow) .AutoFilter End With ' Range("A1").Select Application.ScreenUpdating = True Set book1 = Nothing '変数book1を開放 book2.Close SaveChanges:=False 'book2を閉じる(SaveChanges:=Falseで保存せずに終了) Application.ScreenUpdating = True '画面の更新を再開する Set book2 = Nothing '変数book2を開放

専門家に質問してみよう