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

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

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

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

Q&A

解決済

1回答

5538閲覧

ブック間の転記がうまくいかない

退会済みユーザー

退会済みユーザー

総合スコア0

VBA

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

0グッド

0クリップ

投稿2020/06/25 09:23

編集2020/06/26 06:27

ブック間の転記について教えてください。
ブックAにブックBの情報を転記する作業をVBAで行いたいのですがうまくいかない箇所があります。

ブックA、Bは同じフォルダに格納されています。
ブックAにVBAを書いています。

ブックBを開き、シート1のA列をコピー
ブックAのA2に貼り付ける
ブックBを開き、シート2のC列をコピー
ブックAの最終行+1行目に貼り付ける※ここがうまくいかない

デバックしながら進めると、シート1の情報はうまく貼りつくのですが、
貼り付けた時の範囲選択が解除されず?範囲選択の色がついています。この為、シート2のA列もブックAのセルA2から貼りついてしまいます。
(シート1で貼り付けたものの上に上書きされてしまう)

貼付け先の行をnewrow =cells(rows.count,"A").end(xlup).row+1として
繋げていきたいのですが、どこが間違っていますでしょうか。

sub test() dim fname as string dim ws1,ws2 as worksheet fname = dir(thisworkbook.path & "\B*.xlsx") workbooks.open thisworkbook.path & "\" & fname Set ws = ThisWorkbook.Worksheets("sheet1") set ws1 = workbooks(fname).worksheets("sheet1") set ws2 = workbooks(fname).worksheets("sheet2") endrow = ws1.cells(rows.count,"A").end(xlup).row endrow1 = ws2.cells(rows.count,"A").end(xlup).row newrow = ws.cells(rows.count,"A").end(xlup).row + 1 ws1.Range("A2:A" & endrow1).copy ws.Range("A" & newrow).pastespecial paste:=xlpastevalues Application.CutCopyMode = False ws2.Range("C2:C" & endrow1). Copy ’ここで、A列の最終行+1から貼付けたいのですが、デバックでみてみるとnewrowに2が入っていて A2から貼りついてしまう。 ws.Range("A" & newrow).PasteSpecial paste:=xlpastevalues Application.CutCopy Mode = false End sub

宜しくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

ws1,ws2を定義して処理していますから、記述は全てこのシート名を付けて記載した方が良いです。
cells、range、rowsという単体ではなく、
ws1.cells、ws1.range、ws1.rowsと言う様にします。
先ずは、どのシートか明確にした記述を行い、曖昧さを無くすことが必要と思います。
(下記参考URL)
https://teratail.com/questions/261430

投稿2020/06/26 00:23

tosi

総合スコア553

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

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

退会済みユーザー

退会済みユーザー

2020/06/26 05:53

有難うございます。ほかにもミスがありましたので併せて修正しました。 が、やはりできません。 変数newrowがうまく動いていないようです。newrow =cells(rows.count,"A").end(xlup).row + 1で下に繋げていきたいのですが、どこが間違っていますでしょうか。
tosi

2020/06/26 06:12 編集

newrow =cells(rows.count,"A").end(xlup).row + 1 は newrow =ws1.cells(ws1.rows.count,"A").end(xlup).row + 1 としないと駄目だと思います。 (ws1かws2にするかはプログラムを良く見ない分かりませんが・・・)
退会済みユーザー

退会済みユーザー

2020/06/26 06:29

ありがとうございます。 Set ws = ThisWorkbook.Worksheets("sheet1")を追加したので、 newrow =ws.cells(ws1.rows.count,"A").end(xlup).row + 1としてみたのですが、 最終行+1が取得できませんでした、、、
tosi

2020/06/26 07:32 編集

ws.Select ws.Cells(ws.Rows.Count, "A").End(xlUp).Select newrow = Selection.Row+1 ではどうですか。 尚、ws1.rows.countはws.rows.countにした方が良いです。 (追記) .end(xlup)は画面セル移動させるコマンドなので、selectでシートを選択させて処理前に画面を出す必要があるかも知れません。
退会済みユーザー

退会済みユーザー

2020/06/26 10:46

シート選択でできました!! 勉強になりました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問