前提・実現したいこと
テーマ:転記元ファイルからマクロ実行し、転記先ファイルへ照合と転記
①転記元ファイルのセルA2から最終行(セルへ入力済)の値(A2,A3,A4...)に対して、
転記先ファイルのセルA2から最終行(セルへ入力済)の値(A2,A3,A4...)を照合
②合致した場合は、転記先該当セル(A2,A3,A4...)へ上書き
③合致しない場合は、転記先最終行(セルへ入力済)の次行へ転記
④マクロ実行完了後、転記先ファイルは閉じる
条件:マクロ実行の範囲として、常にA2以降の入力済セル全行を照合
発生している問題・エラーメッセージ
・"インデックスが有効範囲にありません"というエラーが発生してしまいます。 ・別ブックへの複数ある検索値を1つずつ照合し転記するコードも記載したのですが、 正解が分からずご相談させていただきました。
該当のソースコード
VBA
1Sub 別ブックへの転記△2() 2Const TenkiMoto As String = "C:\テスト" '転記元ファイルパス 3Const TenkiSaki As String = "C:\Users\nakagami\Desktop\サンプル" '転記先ファイルパス 4Dim TM As Workbook '転記元ファイル名変数 5Dim TS As Workbook '転記先ファイル名変数 6Dim lastrowM As Long '転記元最終行数取得 7Dim lastrowS As Long '転記先最終行数取得 8Dim wsM As Worksheet '転記元ワークシート変数 9Dim wsS As Worksheet '転記先ワークシート変数 10Dim i As Long '転記元行数カウンタ 11Dim j As Long '転記先入力カウンタ 12Dim numberM As Variant '転記元検索値 13Dim resultS As Variant '転記先検索結果 14 15 Set TM = ThisWorkbook 'このマクロがあるファイルが転記元 16 Set TS = Workbooks.Open(TenkiSaki & "\転記先.xlsx") '転記先ファイル名を変数格納 17 18 Set wsM = TM.Worksheets(1) '転記元シートを変数格納 19 Set wsS = TS.Worksheets(1) '転記先シートを変数格納 20 21 lastrowM = wsM.Cells(wsM.Rows.Count, 1).End(xlUp).Row '転記元シート最終行数抽出 22 lastrowS = wsS.Cells(wsS.Rows.Count, 1).End(xlUp).Row '転記先シート最終行数抽出 23 24 For i = 2 To lastrowM '転記元検索値が存在するまで繰り返す 25 numberM = wsM.Cells(i, 1).Value '転記元検索値を変数格納 26 If WorksheetFunction.CountIf(wsS.Range("A2").Resize(lastrowS - 1, 1), numberM) = 0 Then 27 lastrowS = lastrowS + 1 28 wsS.Cells(lastrowS, 1) = numberM 29 wsS.Cells(lastrowS, 2) = wsM.Cells(i, 2).Value 30 wsS.Cells(lastrowS, 3) = wsM.Cells(i, 3).Value 31 Else 'こちらから合致した場合の上書き処理をしたいと考えております。 32 33 End If 34 Next i 35 TS.Close SaveChanges:=True 36 37End Sub 38
●転記元ファイル中身
●転記元ファイルパス:C:\テスト\転記元.xlsm
●転記先ファイル中身
●転記先ファイルパス:C:\Users\nakagami\Desktop\サンプル\転記先.xlsx
ここにより詳細な情報を記載してください。
エラーはどこで(どのときに)起きていますか?
また、そのときデバッグモードになるかと思いますが
各変数には何が入っていますか?
> ・"インデックスが有効範囲にありません"というエラーが発生してしまいます。
”何処で”それが発生するのでしょうか?
ご連絡ありがとうございます。
はい、デバッグモードになります。
エラーはC:\Users\nakagami\Desktop\サンプル\転記先.xlsxの行で発生してしまいます。変数はNothingになっています。
実現したいことの記述 と 説明画像 と コード が微妙に食い違ってます。
画像から想像すると、転記元のC列の値が転記先のC列になかったら、転記先最終行の次行に転記
その際、A列は転記元そのままではなく転記先の中での連番(最終行の値+1)を、
B,C列は転記元の値をセットする、という仕様なのかな、と思えます。
あと、フォルダパスは C:\Users\jabe\Desktop\サンプル とかがいいかもです。
エラーは、たぶんWorkbooks(xxxxx) の使い方が正しくないために起きていると思われます。
以下のいずれかのようにすれば解消すると思います。
Workbooks(1) ・・・いま開いている1つ目のブック
Workbooks("転記元.xlsm") ・・・フルパスではNG
連絡ありがとうございます。
言葉足らずで申し訳ありません。今回は連番せず番号不一致の場合のみあらたに転記と考えています。
フォルダパス気を付けます。
なるほどです。変数の勢いでフルパスを入れていました。
回答1件
あなたの回答
tips
プレビュー