電子書籍の厳選無料作品が豊富!

どなたか、教えてください。
Sheet(1)からSheet(3)へ転記するコードです。
実行すると、
Dim di As Long: di = MaxRow のところが、
diが0,MaxRowが5になってしまいます。

Sub 理美容リスト作成()
Dim ws1 As Worksheet
Dim wsDate As Worksheet
Dim MaxRow As Long
Dim i As Long: i = 3
Dim di As Long: di = MaxRow

Set ws1 = Worksheets("理容")
Set wsDate = Worksheets("リスト")
MaxRow = wsDate.Cells(Rows.Count, 1).End(xlUp).Row + 1

With ws1
Do While .Cells(i, 1).Value <> ""
wsDate.Cells(di, 1).Value = .Cells(i, 1) 'フロア'
wsDate.Cells(di, 3).Value = .Cells(i, 3) 'お顔そり'
wsDate.Cells(di, 4).Value = .Cells(i, 4) '理容'
wsDate.Cells(di, 6).Value = .Cells(i, 6) '氏名'
wsDate.Cells(di, 7).Value = .Cells(i, 7) 'カナ'
wsDate.Cells(di, 8).Value = .Cells(i, 8) '備考'
wsDate.Cells(di, 9).Value = .Cells(i, 9) '担当'
wsDate.Cells(di, 10).Value = .Range("I1") '年月日'
i = i + 1: di = di + 1
Loop
End With
End Sub

A 回答 (4件)

No2です。


MaxRowは
MaxRow = wsDate.Cells(Rows.Count, 1).End(xlUp).Row + 1
で1加算されていますね。
No1の方の回答が正しいです。No2は無視してください。
    • good
    • 0
この回答へのお礼

丁寧に解答して下さり有難うございました。

お礼日時:2021/05/10 23:18

こんにちは



すでに回答は出ていますが・・・

>Dim di As Long: di = MaxRow のところが、
>diが0,MaxRowが5になってしまいます。
質問者様の勘違いだと思われます。

Dim ws1 As Worksheet
Dim wsDate As Worksheet
Dim MaxRow As Long
Dim i As Long: i = 3
Dim di As Long: di = MaxRow

Debug.Print "di=" & di & " MaxRow=" & MaxRow

などとしてみれば、
 di=0 MaxRow=0
と出力されるはずです。
要は、この時点では両方とも値は初期値(= 0)ということです。
その後、MaxRowには値が代入されているので値が変わりますが、diはそのままということ。

対応方法は、既出の通りです。
    • good
    • 0
この回答へのお礼

一度実行して、エラー、実行後のところにでるんですよね?
でも、普通に考えても、di,MaxDate は0ですよね。。?

皆様のおかげで、出来ました。
有難うございました。

お礼日時:2021/05/10 23:18

Dim di As Long: di = MaxRow


上記を実行した時点では、MaxRowの値は0なので、diには0が設定された状態になります。

MaxRowの次の行から転記すると思いますので、

MaxRow = wsDate.Cells(Rows.Count, 1).End(xlUp).Row + 1
の次の行へ

di = MaxRow + 1
を追加してください。
    • good
    • 0

MaxRow = wsDate.Cells(Rows.Count, 1).End(xlUp).Row + 1


の後に、
di = MaxRow
とすればよいのかな
    • good
    • 0
この回答へのお礼

早速の返信、ありがとうございました。

変数が多いと、途中で混乱してしまいます。
助かりました。

お礼日時:2021/05/10 23:17

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!