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

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

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

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

Q&A

解決済

3回答

3176閲覧

別ブックのシートに行を追加する方法

mi_ku

総合スコア10

VBA

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

0グッド

0クリップ

投稿2020/06/01 04:30

Book2.xlsmのシート(シート名:売却)に表があります。
その一番下に最終行をコピーして追加したいです。

上記操作をBook1.xlsmで行いたいのですが、開くブックがその都度変わります。
開くブックはBook1のC1に記載されています。

これを実行したく、以下のようなコードを作成してみましたが、何も変化がありませんでした。
エラーも出てきません。

どこをどうしたら実行できるようになるか教えていただけませんでしょうか?
よろしくお願いいたします。

Sub 追加() Dim wb1 As Workbook Workbooks.Open Filename:= _ "C:\Users\ファイル\" & Range("C1").Value Set wb1 = ActiveWorkbook With wb1.Worksheets("売却") With Cells(Rows.Count, "A").End(xlUp).Resize(1, 30) .Copy .Offset(.Rows.Count) With .Columns(1) .AutoFill .Resize(.Rows.Count * 2), xlFillMonths End With End With End With End Sub

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

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

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

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

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

guest

回答3

0

ExcelVBA

1Option Explicit 2 3Sub 追加2() 4 Dim wbkNew As Workbook 5 Dim rngNew As Range 6 Dim rngList As Range 7 Const cmyPath As String = "C:\Users\ファイル\" 8 Const cmyCount As Long = 30 9 10 Set rngList = ThisWorkbook.Worksheets(1).UsedRange 11 Set wbkNew = Workbooks.Open(cmyPath & rngList.Range("C4").Value) 12 With wbNew.Worksheets("売却").UsedRange 13 Set rngNew = .Resize(cmyCount).Offset(.Rows.Count - cmyCount) 14 End With 15 16 With rngList(rngList.Rows.Count + 1, 1) 17 rngNew.Copy .Cells 18 With .Resize(cmyCount + 1).Offset(-1) 19 .Cells(1).AutoFill .Cells, xlFillMonths 20 End With 21 End With 22 23 wbkNew.Close False 24End Sub

こういうことでしょうか?
もう少し丁寧に手順を書いた方がいいかも?

開いたブックがアクティブになる前に、次々命令が実行されても、
アクティブブックは開いたブックとは限りません。
Workbooks.Openメソッドは、関数と同様に返り値があるので、
それを変数に受けて再利用しましょう。

投稿2020/06/01 06:15

mattuwan

総合スコア2163

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

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

mi_ku

2020/06/01 06:47

mattuwanさん、ありがとうございました。 いただいたコードでパスを変更して実行してみたところ、「オブジェクトが必要です」と出てしました。 他にどこか変更すべき点はございましたでしょうか?
mattuwan

2020/06/01 22:11

あ、しつれいしました。 どの行でエラーが出ましたか? >With wbNew.Worksheets("売却").UsedRange With wbkNew.Worksheets("売却").UsedRange タイプミスですね。
mi_ku

2020/06/02 01:09

wbkは修正したのですが、9行目でエラーになりました。
mattuwan

2020/06/02 05:37

9行目ってどこから数えて9行目でしょうか?
mattuwan

2020/06/02 05:50

>Set rngNew = .Resize(cmyCount).Offset(.Rows.Count - cmyCount) ここですかね? 貼り付け先の左上のセルがわかればいいから、 Set rngNew = .cells(1).Offset(.Rows.Count) こうですね^^;失礼しました。 -30したら、元の表が30より少なかったら、存在しないセルを指定することになるので、 「オブジェクトが必要です」と言われたんだと思われます。 言い訳すると、やりたいことがいまいちわかってないので動作確認ができません^^;
mi_ku

2020/06/02 07:52

ありがとうございます。 勉強になりました。 説明下手ですみません。 また何かありましたらよろしくお願いいたします。
guest

0

アクティブなオブジェクトを前提とするコードはバグの元ですので、明示的に対象オブジェクトを指定しましょう。

とりあえず下記のように変更して動作を確認してください。

vba

1Sub 追加() 2 Dim wb1 As Workbook 3 Set wb1 = Workbooks.Open(FileName:= _ 4 "C:\Users\ファイル\" & Range("C1").Value) 5 6 With wb1.Worksheets("売却") 7 With .Cells(wb1.Rows.Count, "A").End(xlUp).Resize(1, 30) 8 .Copy .Offset(1) 9 With .Columns(1) 10 .AutoFill .Resize(2), xlFillMonths 11 End With 12 End With 13 End With 14End Sub

投稿2020/06/01 05:33

hatena19

総合スコア34075

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

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

hatena19

2020/06/01 06:11

完全に被った(;^ω^)
mi_ku

2020/06/01 06:16

hatena19さん、ありがとうございました。 色々調べながら作成してみたのですが、バグの元になるものだったのですね。 素早いアドバイスありがとうございました。
mi_ku

2020/06/01 06:49

教えていただけてとても助かります。
guest

0

ベストアンサー

アクティブ前提の作りになっているので、タイミング等でうまく思った通りに動いていないようです。
オブジェクト指定の作りにしたところ問題なく動きました。
また6行目のCellsにピリオドが抜けていたので追加しています。

VBA

1Sub 追加() 2 Dim wb1 As Workbook 3 Set wb1 = Workbooks.Open("C:\Users\ファイル\" & Range("C1").Value) 4 5 With wb1.Worksheets("売却") 6 With .Cells(Rows.Count, "A").End(xlUp).Resize(1, 30) 7 .Copy .Offset(.Rows.Count) 8 With .Columns(1) 9 .AutoFill .Resize(.Rows.Count * 2), xlFillMonths 10 End With 11 End With 12 End With 13End Sub 14

投稿2020/06/01 05:24

ttyp03

総合スコア17000

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

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

mi_ku

2020/06/01 06:14

ttyp03さん、ありがとうございました。 おかげさまで希望通りになりました。 ピリオドが抜けていた件ですが、抜けたままでも動いてしまうものなのでしょうか?
ttyp03

2020/06/01 06:37

ピリオドを付けないとWithで指定したシートではなく、現在アクティブのシートが対象になります。 ここの処理においてはアクティブのシートがたまたま目的のシートになっているようで、問題はないようですが、明示的にどのシートというのを指定すべきなので、ピリオドを追加しました。
mi_ku

2020/06/01 06:49

そうだったのですね。 たまたまだったのですね。 アドバイスありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問