For Nextについて

画像

Visual Basic | Excel39閲覧xmlns="http://www.w3.org/2000/svg">25

ベストアンサー

0

ThanksImg質問者からのお礼コメント

できました! 一気に構文が短くなってすっきりしました。 ありがとうございます。また何かありましたらよろしくお願いします。

お礼日時:6/18 10:42

その他の回答(2件)

0

Range("B1").Select Selection.End(xlDown).Select ActiveCell.Offset(rowOffset:=1, columnOffset:=0).Select Selection.PasteSpecial Paste:=xlPasteValues ここでB1セルから下方向に空白ではないセルの1つ下を選択 としていますので、毎回B2セルで止まってその下のセルにしか貼り付けできません。 もう一回Selection.End(xlDown).Selectを入れれば次の空白前のセルには到達できます。 一応、やりたいことは下記で出来るだろうなというコード載せておきますのでご参考に。 Sub 転記() Dim Info1 As Range, Info2 As Range Dim i As Long Dim Sht1 As Worksheet, Sht2 As Worksheet Application.ScreenUpdating = False Set Sht1 = Sheets(1) Set Sht2 = Sheets(2) For i = 0 To 10 Set Info1 = Sht1.Cells(2 + i, 2) If Info1 <> "" Then Info1.Copy Set Info2 = Sht2.Range("B:B").Find("") If Not Info2 Is Nothing Then Info2.PasteSpecial Paste:=xlPasteValues End If Set Info2 = Nothing End If Next i Application.CutCopyMode = False Sht1.Activate Set Sht1 = Nothing Set Sht2 = Nothing Application.ScreenUpdating = True End Sub

1

一個一個コピーするのは、セルへのアクセスが増え、実行速度が落ちます。 セルは、「点」で捉えるのではなく、「面」で捉えると高速になります。 あと、SelectやActivateは、速度低下を招き、プログラムが解りにくくなりいいことは1つもありません。これらのメソッドは使用することなくコーディング可能です。早く習得しましょう。 Sub 転記改() Application.ScreenUpdating = False On Error Resume Next Worksheets("Sheet1").Range("B2:B11").SpecialCells(xlCellTypeConstants).Copy Worksheets("Sheet2").Cells(Rows.Count, 2).End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValues On Error GoTo 0 Application.CutCopyMode = False Application.ScreenUpdating = True End Sub

1人がナイス!しています