『VBAでの転記について』(金ちゃん)
エクセルのマクロフィルへの転記について
vbaの有識者の方、ご教授願います。
<やりたい事>
同一フォルダ内にある別のエクセルファイル"テスト****"から始まるファイル名の"サンプル"シートにある
B11セルからI11セルまでで、B列にデータが入っている最下行までデータ取得しコピーし、
そして、マクロファイルのSheet2のB10セルに取得した全データをコピペするコードを以下に記載しておりますが、上手く貼り付けができません。
どこが悪いかお手数ですがご指摘願います。
宜しくお願い致します。
Sub Sample()
Dim bkName As String bkName = Dir(ThisWorkbook.Path & "\テスト*.xlsx") Application.ScreenUpdating = False Do While bkName <> "" Dim ws As Worksheet Set ws = Workbooks.Open(ThisWorkbook.Path & "\" & bkName).Worksheets("サンプル") With ThisWorkbook.Worksheets("Sheet2") Dim pasteRow As Long pasteRow = .Cells(Rows.Count, "B").End(xlUp).Row pasteRow = IIf(pasteRow < 10, 10, pasteRow + 1) Range("B11:I" & Cells(Rows.Count, "I").End(xlUp)).Copy .Cells(pasteRow, "B") End With ActiveWorkbook.Close False bkName = Dir() Loop Application.ScreenUpdating = True End Sub
< 使用 Excel:Microsoft365、使用 OS:Windows10 >
範囲指定の仕方があまいのでは・・・。
(通りすがり) 2025/05/28(水) 14:55:51
ステップ実行して確認しましょう
ぱっと見でアヤシイのはここ
Range("B11:I" & Cells(Rows.Count, "I").End(xlUp)).Copy .Cells(pasteRow, "B") を ws.Range("B11:I" & ws.Cells(ws.Rows.Count, "I").End(xlUp)).Copy .Cells(pasteRow, "B") に修正
蛇足ですが、 ActiveWorkbook.Close False Activeなんちゃらは、操作したい対象がほんとにAcitiveなのか保証されるときしか使わない方が吉 ws.Parent を使うか、Workbooks.Openで返るWorkBookオブジェクトを変数に入れて使う (´・ω・`) 2025/05/28(水) 14:59:06
ご指摘ありがとうございます。
早速試しに↓のコードに修正してみましたが、なぜか1行しか貼り付けられませんでした。。実際には1000行ぐらいあるのですが、、、
ws.Range("B11:I" & ws.Cells(ws.Rows.Count, "I").End(xlUp)).Copy .Cells(pasteRow, "B")
(金ちゃん) 2025/05/28(水) 15:11:35
ステップ実行したんですか?
>B列にデータが入っている最下行までデータ取得しコピーし と書いてるのに、コードを見るとI列の最終行を取得しているようですが、 I列にちゃんとデータ入ってますか? (´・ω・`) 2025/05/28(水) 15:30:54
失礼いたしました。
無事解決いたしました。
ありがとうございました。
(金ちゃん) 2025/05/28(水) 15:40:05
365オンリーなら ws.Range("B11:.I" & ws.Rows.Count).Copy という書き方をしてもいいかもしれません (´・ω・`) 2025/05/28(水) 15:45:14
承知いたしました。
ご助言ありがとうございます。
(金ちゃん) 2025/05/28(水) 17:18:37
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.