G列の最終行を調べる際下記のように記述したところ
変数Lrには1が代入されます。
Lr = Datasheet.Cells(Rows.count, 7).End(xlUp).Row
実際は数万行ありG列には途中に空白はありません。
確認の為、該当のシートのG列の最終行(1048576行)までカーソルを移動し「Ctrl+↑」で確認しましたが、目標のセルまでカーソルが移動致しました。
下記のようにRangeのEndプロパティを使うと正しく変数に代入できました。
Lr = Datasheet.Range("G1").End(xlDown).Row
作成しているプロシージャはMainプロシージャからCallで呼び出してシートのコピー処理をして戻すFunctionとなります。
該当プロシージャは下記のように1列目の最終行の最終行を調べて元データからコピーしておりますが、こちらは正しく最終行の代入ができております。
With Datasheet
Lr = .Cells(Rows.count, 1).End(xlUp).Row
.Cells(Lr, 1).PasteSpecial
End With
Rangeを使えば動くので問題はないのですが、何故、正しく代入できないのか、
違いがわからず今後の為に参考にさせて頂ければ思います。
ご教授よろしくお願い致します。
参考までコードを載せておきます。
Function FileCopy() Dim MenuSheet As Excel.Worksheet Dim DataSheet As Excel.Worksheet Dim Target As String Dim Lr As Long Set MenuSheet = Workbooks("XXX.xlsm").Worksheets.Item("YYY") Set DataSheet = Workbooks("XXX.xlsm").Worksheets.Item("ZZZ") Target = MenuSheet.Cells(2, 3).Value With Datasheet .AutoFilterMode = False Lr = .Cells(Rows.count, 7).End(xlUp).Row '←G列の最終行番号を取得したいのですが正しく代入できません。(1が代入されてしまいます) 'Lr = .Range("G1").End(xlDown).Row '←こちらは正しくG列の最終行番号が代入できます。 End With DataSheet.Range("A1").AutoFilter 7, Target With DataSheet.Range("A1").CurrentRegion.Offset(1, 0) .Resize(.Rows.count - 1).EntireRow.Delete End With DataSheet.Range("A1").AutoFilter With OriginalSheet '←Public変数 参照元シート Lr = .Cells(Rows.count, 1).End(xlUp).Row '←こちらは正しく代入できます。 .Range(Cells(2, 1), Cells(Lr, 21)).copy End With With DataSheet Lr = .Cells(Rows.count, 1).End(xlUp).Row '←こちらは正しく代入できます。 .Cells(Lr, 1).PasteSpecial End With Application.CutCopyMode = False End Function
【追記】
G列の最終行番号を取得する理由
まだ、コード化していないのですが、変数TargetとG列の最終行をマッチングさせたい。
次のようなコードを考えております。
If Datasheet.Cells(Lr, 7).Value <> Target Then
MsgBox "エラーメッセージ"
exit function
End if
回答2件
あなたの回答
tips
プレビュー