[[20160304103837]] 『別のBOOKのsheet1とを、別のBOOK(テンプレxltx)』(じゅん) >>BOT

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

 

『別のBOOKのsheet1とを、別のBOOK(テンプレxltx)のsheet2にコピーしたい。』(じゅん)

BookA TEST.xltx sheet1
BookB main.xlsx Testsheet1

BookBのTestsheet1を、bookAのsheet2に丸々コピーをしたいのですが、

bookB.Copy After:=Workbooks("D:\TEST.xltx").Sheets(2)
ではエラーになるのですが、何が間違っていますでしょうか??

< 使用 Excel:Excel2013、使用 OS:Windows7 >


BookBのシート名を指定していないから、とか?
(???) 2016/03/04(金) 11:22

★TEST.xlsx
→Sheet2を作成して、TEST.xlsxを開いて状態にしておく。

★もう1つのエクセルファイル(拡張子:.xlsまたは.xlsm)
→Sheet1を作成して、次のコードをModule1にコピペして、プログラム実行。

 Sub test()
     Dim shA As Worksheet, shB As Worksheet
     Set shA = Workbooks("TEST.xlsx").Sheets("Sheet2")
     Set shB = ThisWorkbook.Sheets("Sheet1")

     shA.Cells.Clear
     shB.Cells.Copy shA.Range("A1")
 End Sub
(マリオ) 2016/03/04(金) 11:24

こんにちは、回答ありがとうございます。
早速ためしてみたいと思います!!

(じゅん) 2016/03/04(金) 11:59


インデックスが有効範囲にありません。となります、、、。
(じゅん) 2016/03/04(金) 12:03

TEST.xlsxに、Sheet2は存在してますか?シート名を確認してみてください。
(マリオ) 2016/03/04(金) 12:20

 マクロ実行ブックのActivesheetだけをコピーして、マクロ実行ブックと同じフォルダ内に新規ブックを作成するマクロです。

 Sub test2()
     Dim shB As Worksheet
     Dim x As String, y As String, z As Variant
     Set shB = ThisWorkbook.ActiveSheet
     x = ThisWorkbook.Name
     y = Left(x, InStrRev(x, ".") - 1) & _
         "_copy (シート名:" & ActiveSheet.Name & ").xlsx"

     z = ThisWorkbook.Path & "\" & y

     shB.Copy
     ActiveWorkbook.SaveAs Filename:=z
     Workbooks(y).Close SaveChanges:=True
 End Sub
(マリオ) 2016/03/04(金) 12:27

すみません、出来ました!!ありがとうございます。
ただ、エクセルを×で閉じることが出来なくなりますので、'bookB.Parent.Closeで対応しようと思います。

BOOK1 起動時にsheet3まで出来るようにしています。
BOOK2 sheet1のみ
BOOK3 sheet1のみ

BOOK2のsheet1
BOOK3のsheet1
を、BOOK1のsheet2/sheet3へコピーしたいのです。

BOOKの2.3は閉じている状態で、BOOK1でマクロを実行させて、BOOK2、BOOK3の各々のシートをコピーしたい。
そのため、
Sub books_open()

Dim bookA As Worksheet, bookB As Worksheet, bookC As Worksheet

'指定ブックを開く
Set bookA = Workbooks.Open("D:\TEST.xltx").ActiveSheet
Set bookB = Workbooks.Open("D:\deta1.xlsx").ActiveSheet
Set bookC = Workbooks.Open("D:\deta2.csv").ActiveSheet

を用いてブックを開かせました。

この状態からのシートのコピーの記述は、どのようになりますでしょうか。。
よろしくお願いいたします。

(じゅん) 2016/03/04(金) 12:29


BookAのマクロで、BookBが開いてなければBookBを開いて、
BookBの「Sheet1」をBookAの「Sheet2」にコピーし、その後、BookBを閉じるのは簡単です。
BookBがエクセルファイル(deta1.xlsx)だからです。

ですが、BookC(deta2.csv)はcsvファイルですね。

 deta2.csvのシート「data2」をTEST.xltxの「Sheet3」にコピペすると、表示形式で問題が生じます。

 次の文字列をテキストにコピペして、data2.txtの名前で一度保存してください。
 *****************************
1月5日,25,1-5,025
 *****************************

 data2.txtの拡張子をcsvに変えた後、data2.csvを開いてみてください。
 *****************************
    |[A]   |[B]|[C]   |[D]
 [1]|1月5日| 25|1月5日| 25
 *****************************
 と表示されますね。

 csvの取込は、■QueryTables.Add(Connection:="TEXT;■を使用して、列ごと、
 表示形式を標準にするのか、文字列にするのかを指定するのが一般的なやり方かと思います。

 ★deta2.csvは、どういった内容になっているのかを教えてください!★
 deta2.csvで、表示形式を文字列で読み込むべき列と標準で読み込みべき列を特定するためです。
 列は可変でしょうか?すべて文字列として取り込んでもいいですか?

 次のmomoさんのプログラムを使うと、簡単です。
 http://www.excel.studio-kazu.jp/kw/20110209184943.html
[[20110209184943]] 『[談]シートレイアウトの投稿どうしてますか?』(momo) 

(マリオ) 2016/03/04(金) 14:13


 BookB(deta1.xlsx)の「Sheet1」をBookA(マクロ実行ブック)の「Sheet2」にコピーするマクロです。
 test3とtest4の違いが分かりますか?
 test3では、全てのセル内容をコピペしてます。
 test4ではシート自体をコピーしてます。
 処理速度としては、test4の方が速いです。

 Sub test3()
     Dim shA2 As Worksheet
     Dim bookB As Workbook
     Dim shB As Worksheet

     Set shA2 = ThisWorkbook.Sheets("Sheet2")
     Set bookB = Workbooks.Open("D:\data1.xlsx")
    'Set bookB = Workbooks.Open(ThisWorkbook.Path & "\data1.xlsx")
     Set shB = bookB.Worksheets("Sheet1")
     shA2.Cells.Clear
     shB.Cells.Copy Destination:=shA2.Range("A1") '全てのセル内容をコピペ
     bookB.Close
 End Sub

 Sub test4()
     Dim Sh As Worksheet
     Dim bookB As Workbook
     Dim shB As Worksheet

     Set bookB = Workbooks.Open("D:\data1.xlsx")
    'Set bookB = Workbooks.Open(ThisWorkbook.Path & "\data1.xlsx")
     Set shB = bookB.Worksheets("Sheet1")
     shB.Copy after:=ThisWorkbook.Worksheets(Worksheets.Count) 'シート自体をコピー
     '既にSheet1がある場合は、Sheet1(2)の名前のシートが追加される。

     For Each Sh In ThisWorkbook.Worksheets
        If Sh.Name = "Sheet2" Then
           Application.DisplayAlerts = False
           Sh.Delete
           Application.DisplayAlerts = True
        End If
     Next
     ActiveSheet.Name = "Sheet2" '追加されたシートの名前をSheet2にする。
     bookB.Close
 End Sub
(マリオ) 2016/03/04(金) 16:10

コメント返信:

[ 一覧(最新更新順) ]


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