- ベストアンサー
実行時エラーの対処とセルの配置変更に伴うマクロ修正
- 条件が一致時の転記マクロの実行時エラーの対処方法について相談です。
- エクセルのセルの配置が変わったため、マクロを修正しても実行時エラーが発生しています。
- 作成したマクロは、IDデータ.xlsの時間とIDが一致したものをID管理票.xlsのD列に転記する処理を行うものです。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは! 前回回答した者です。 >lastRow6 = wS2.Cells(Rows.Count, "A").End(xlUp).Row lastRow6 は変数の宣言をしていませんので、当然エラーとなるはずです。 尚、当方の変数の宣言のやり方が判り難いのでこのようなコトになると思いますが、 もう一度コードを訂正して載せてみます。 尚、今回は「管理票Sheet」は5行目が項目行でデータは6行目以降にあるのですね。 そして、各Sheet(5種類)は質問文を拝見するとDもしくはE列まで何らかのデータが入っているようですので、 今回はF列を作業用の列としてみました。(前回はD列が作業用の列) ↓のコードで試してみてください。 (コード内の★印の行が変更で、若干の説明を加えています) Sub Sample3() Dim i As Long, k As Long, lastRow1 As Long, lastRow2 As Long Dim wS1 As Worksheet, wS2 As Worksheet Application.ScreenUpdating = False Set wS2 = Workbooks("ID管理票.xls").Worksheets(1) lastRow2 = wS2.Cells(Rows.Count, "A").End(xlUp).Row '★lastRow2 は「ID管理票Sheet1」の最終行 '▼「ID管理表票Book」のシート1、C~E列データ消去 If lastRow2 > 1 Then Range(wS2.Cells(6, "C"), wS2.Cells(lastRow2, "C")).ClearContents '★「lastRow2」はそのまま Range(wS2.Cells(6, "E"), wS2.Cells(lastRow2, "E")).ClearContents '★「lastRow2」はそのまま End If '▼「ID管理票、シート1」のF列を作業用の列として使用 Range(wS2.Cells(6, "F"), wS2.Cells(lastRow2, "F")).Formula = "=A6&""_""&B6" '★「ID管理票Sheet」のF6~F列最終行の・・・ '▼「IDデータBook」のシート1~最終シートまでループ With ThisWorkbook For k = 1 To .Worksheets.Count Set wS1 = .Worksheets(k) lastRow1 = wS1.Cells(Rows.Count, "A").End(xlUp).Row '▼「IDデータBook」の各SheetのF列を作業用の列として使用 If lastRow1 > 1 Then Range(wS1.Cells(2, "F"), wS1.Cells(lastRow1, "F")).Formula = "=A2&""_""&B2" '★作業列をF列に変更 '▼「ID管理票Book、シート1」の作業列(F列)でフィルタを掛ける '表示されている行のC列に「IDデータBook」の○番目シートのC列データを、E列にはシート名を! For i = 2 To lastRow1 '★ wS2.Rows(5).AutoFilter field:=6, Criteria1:=wS1.Cells(i, "F") '★5行目が項目行なので5行目でフィルタを掛ける If wS2.Cells(Rows.Count, "A").End(xlUp).Row > 5 Then '★表示されている最終行が6行目以降にあれば Range(wS2.Cells(6, "C"), wS2.Cells(lastRow2, "C")).SpecialCells(xlCellTypeVisible) = wS1.Cells(i, "C") '★ Range(wS2.Cells(6, "E"), wS2.Cells(lastRow2, "E")).SpecialCells(xlCellTypeVisible) = wS1.Name '★ End If Next i '▼「IDデータBook、各Sheet」の作業列を消去 wS1.Range("F:F").ClearContents End If Next k End With '▼オートフィルタを解除、「ID管理票、シート1の作業列(F列)を消去 wS2.AutoFilterMode = False wS2.Range("F:F").ClearContents Application.ScreenUpdating = True End Sub こんな感じではどうでしょうか?m(_ _)m
お礼
tom04様 今回もご対応頂き誠にありがとうございます。 非常に恥ずかしい話でありますが、 回答を拝見させてようやくわかりました。 lastlow2の部分は変数宣言してたですね この部分を普通の行の最終項目だと思っていました。 お恥ずかしい限りです。 再三の質問で丁寧な対応と 分かりやすいコメント含めて参考になると同時に 自分の力不足を実感するばかりです。 修正して頂いたコードで問題ありません! 実データするのが少し時間かかるので 確認後、ベストアンサーに選ばせて頂きます。 前回の対応に引き続き 今回のご対応ありがとうございます!!
補足
返答、遅くなり申し訳ありません 無事、実際のデータで動きました。 2度の質問の丁寧な対応に感謝致します。 ほんとうにありがとうございます