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

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

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

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

Q&A

解決済

3回答

2520閲覧

選択範囲のコピーと別ファイルへのペースト

tuckQ

総合スコア64

VBA

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

0グッド

0クリップ

投稿2019/11/23 15:29

編集2019/11/24 02:56

前提・実現したいこと

VBAを使って、複数ファイルの内容を1つのファイルに統合するプログラムを書こうとしています。

発生している問題・エラーメッセージ

元ファイルの内容をコピーして、新しいブックのシートにペーストするコードの部分でエラーが発生します。

実行時エラー'438' オブジェクトは、このプロパティまたはメソッドをサポートしていません。

というエラーが発生します。

該当のソースコード

デバッグすると下記の行が指定されます。

.Range(.Cells(1, 1), .Cells(EndRow, Endcolumn)).Copy Workbooks(NewBook).Wroksheets(NewSht).Rows(1)

全体のソースは下記となります。

Sub IntegPro() '変数宣言 Dim MacroBook As String Dim MacroSht As String Dim InputPath As String Dim OutputPath As String Dim Outputfile As String Dim InputFile As String Dim i As Integer Dim NewBook As String Dim NewSht As String Dim EndRow As Long Dim Endcolumn As Integer Dim DataBook As String Dim Datasht As String '実行ファイルとシートの定義 MacroBook = ActiveWorkbook.Name MacroSht = ActiveSheet.Name '新規ブックを作成し、それのブックとシートを定義する Workbooks.Add NewBook = ActiveWorkbook.Name NewSht = ActiveSheet.Name '入力パスや出力パス、出力ファイルの定義 With Workbooks(MacroBook).Worksheets(MacroSht) .Activate InputPath = .Cells(2, 3).Value & "\" OutputPath = .Cells(3, 3).Value & "\" Outputfile = .Cells(4, 3).Value End With '入力ファイルを定義 i = 0 Do While Workbooks(MacroBook).Worksheets(MacroSht).Cells(7 + i, 3).Value <> "" 'ファイルを開く Workbooks.Open InputPath & Workbooks(MacroBook).Worksheets(MacroSht).Cells(7 + i, 3).Value '定義する DataBook = ActiveWorkbook.Name Datasht = ActiveSheet.Name 'データファイルの最終行と最終列を記憶する With Workbooks(DataBook).Worksheets(Datasht) EndRow = .Cells(Rows.Count, 1).End(xlUp).Row Endcolumn = .Cells(1, Columns.Count).End(xlToLeft).Column '開いたファイルのデータ部分をコピペする。(1回目だけデータ名もコピペする) If i = 0 Then '1回目だけ .Range(.Cells(1, 1), .Cells(EndRow, Endcolumn)).Copy Workbooks(NewBook).Wroksheets(NewSht).Rows(1) Else: '2回目以降 .Range(.Cells(2, 1), .Cells(EndRow, Endcolumn)).Copy Workbooks(NewBook).Wroksheets(NewSht).Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) End If 'データファイルを閉じる Workbooks(DataBook).Close SaveChanges:=False End With i = i + 1 Loop '統合したファイルを名前を付けて保存 Workbooks(NewBook).Worksheets(NewSht).Activate ActiveWorkbook.SaveAs Filename:= _ OutputPath & Outputfile & ".xlsx", FileFormat:= _ xlOpenXMLWorkbook, CreateBackup:=False '閉じる ActiveWindow.Close End Sub

試したこと

末尾のRows(1)の部分をCells(1,1)に指定したり試してみましたが、原因がわかりません。

補足情報(FW/ツールのバージョンなど)

.Range(.Cells(1, 1), .Cells(EndRow, Endcolumn)).Copy

の部分は、元ファイルでの動作になります。

Workbooks(NewBook).Wroksheets(NewSht).Rows(1)の部分の、
下記変数は、VBAで新規作成したブックを指定しています。
NewBook
NewSht

解決方法をご存知の方、ご教示のほどよろしくお願い致します。

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

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

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

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

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

segavvy

2019/11/23 17:04

以下のようなコードだと思うのですが、手元の環境では動いてしまいました。何か差異はありそうでしょうか。環境はWindows 10、Excel 2016です。 Sub test() With ActiveSheet EndRow = 1 Endcolumn = 5 NewBook = "Book2" NewSht = "Sheet1" .Range(.Cells(1, 1), .Cells(EndRow, Endcolumn)).Copy Workbooks(NewBook).Worksheets(NewSht).Rows(1) End With End Sub
hatena19

2019/11/24 01:41

NewBook, NewSht の変数宣言、代入部分のコードも提示してください。 おそらく、NewBook, NewSht がString型でなくオブジェクト型で宣言しているのが原因のような予感。
tuckQ

2019/11/24 02:57

回答いただきありがとうございます。 NewBook, NewSht がString型で指定しているのですが、うまくいっておりません。 全体のコードを追記しましたので、ご確認いただければ幸いです。
guest

回答3

0

ベストアンサー

Wroksheets -> worksheets
Rows(1) -> Cells(1,1)
ですかね。

投稿2019/11/24 03:45

MrIgat

総合スコア54

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

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

hatena19

2019/11/24 04:02

私もそれを疑いましたか、実験してみたら、Rows(1)でもエラーなくコピーできました。
MrIgat

2019/11/24 04:22

>実行時エラー'438' このエラーは、「Wroksheets」のスペル違いと思います。 >Rows(1)でもエラーなくコピーできました。 Rows(1)にすると、私の環境ではすべての列(XFD列まで)にペーストされます。 今回の場合は左上のセルだけにするのが適切かと思いました。
hatena19

2019/11/24 04:39

「Wroksheets」あっ、たしかにスペルミスですね。気が付かなかった。(;^ω^) 原因はこれですね。 Rows(1) は私の環境では、コピー元のセル範囲と同じサイズにペーストされますね。 ただ、Cells(1,1) の方が誤解されることがないので適切ですね。
MrIgat

2019/11/24 05:26 編集

Rows()でも問題ない場合を検証してみましたら、私の環境ではcopyするセルの列数が5列以上の場合は、Rowsでも問題ありませんでした。 4列未満の場合はXFD列までペーストされました。
hatena19

2019/11/24 05:26

検証ありがとうござます。そうなんですね。私も勉強になりました。 ただ、わざわざRows(1)を使うメリットはないと思いますので、Cells(1,1) がいいですよね。
tuckQ

2019/11/24 05:52

ご指摘のように、Wroksheets -> worksheetsが原因だったようで、修正したところ、正常に動作しました。初歩的なミスで恐縮です。ありがとうございました!
guest

0

~~実際のブックがないと検証は難しいので原因は分かりませんが、~~iruyasさんの回答のスペルミスが原因だと思われます。

下記の点を考慮して書き直してみました。(今後のコーティング時のご参考にしてください。)

  • Activeなオブジェクトを対象とすることを前提にしたコードは避ける。

(読みづらいし、想定したものがアクティブでなかったりとバグの原因になりやすい)

  • 変数をString型にしてオブジェクト名でオブジェクトを参照せずに、変数をオブジェクト型にして直接参照したほうがシンプルになりコードが読みやすい。

vba

1Sub IntegPro() 2 3 '変数宣言 4 Dim MacroBook As Workbook 5 Dim MacroSht As Worksheet 6 Dim InputPath As String 7 Dim OutputPath As String 8 Dim Outputfile As String 9 Dim InputFile As String 10 Dim i As Integer 11 Dim NewBook As Workbook 12 Dim NewSht As Worksheet 13 Dim DataBook As Workbook 14 Dim DataSht As Worksheet 15 Dim EndCell As Range 16 17 '実行ファイルとシートの定義 Activeなのが前提のコードは避けるべき 18 Set MacroBook = ThisWorkbook 19 Set MacroSht = MacroBook("入力パスや出力パス、出力ファイルの定義してあるシート名") 20 21 '新規ブックを作成し、それのブックとシートを定義する 22 Set NewBook = Workbooks.Add 23 Set NewSht = NewBook.Worksheets(1) 24 25 '入力パスや出力パス、出力ファイルの定義 26 With MacroSht 27 InputPath = .Cells(2, 3).Value & "\" 28 OutputPath = .Cells(3, 3).Value & "\" 29 Outputfile = .Cells(4, 3).Value 30 End With 31 32 i = 0 33 Do While MacroSht.Cells(7 + i, 3).Value <> "" 34 35 'データファイルを開く 36 Set DataBook = Workbooks.Open(InputPath & MacroSht.Cells(7 + i, 3)) 37 'データシートを定義する 38 DataSht = DataBook.Worksheets(1) 39 40 With DataSht 41 'データファイルの最終セルを記憶する 42 Set EndCell = .Range(.Cells(Rows.Count, 1).End(xlUp), _ 43 .Cells(1, Columns.Count).End(xlToLeft)) 44 45 '開いたファイルのデータ部分をコピペする。(1回目だけデータ名もコピペする) 46 If i = 0 Then 47 48 '1回目だけ 49 .Range(.Cells(1, 1), EndCell).Copy NewSht.Cells(1, 1) 50 51 Else 52 53 '2回目以降 54 .Range(.Cells(2, 1), EndCell).Copy _ 55 Destination:=NewSht.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) 56 57 End If 58 59 'データファイルを閉じる 60 DataBook.Close SaveChanges:=False 61 62 End With 63 i = i + 1 64 Loop 65 66 '統合したファイルを名前を付けて保存 67 NewBook.SaveAs Filename:=OutputPath & Outputfile & ".xlsx", _ 68 FileFormat:=xlOpenXMLWorkbook, _ 69 CreateBackup:=False 70 71 '閉じる 72 NewBook.Close 73End Sub

投稿2019/11/24 03:52

編集2019/11/24 05:30
hatena19

総合スコア33620

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

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

tuckQ

2019/11/24 05:50

全体的なコードの書き換えまでして頂きありがとうございました。アドバイス頂いた点、再学習して今後に活かせるようにしたいと思います!
guest

0

>下記変数は、VBAで新規作成したブックを指定しています。

その部分のコードも提示してください。

投稿2019/11/24 01:26

iruyas

総合スコア1067

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

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

tuckQ

2019/11/24 02:58

ご回答ありがとうございます。 全体のコードを追記しましたので、ご確認いただければ幸いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問