2016-07-20 9 views
0
Sub AutoFill() 

    Dim x As Long 
    Dim y As Long 
    Dim lastrow As Long 
    Dim lastcolumn As Long 

    Application.ScreenUpdating = False 
    Application.DisplayAlerts = False 

    lastcolumn = ActiveSheet.UsedRange.Column - 1 + ActiveSheet.UsedRange.Columns.Count 
    lastrow = ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count 

    For x = 2 To lastrow 
     If Cells(x, 2).Value = "" Then 
      Cells(x, 2).Value = Cells(x - 1, 2).Value 
      Cells(x, 3).Value = Cells(x - 1, 3).Value 
      Cells(x, 5).Value = Cells(x - 1, 5).Value 
     End If 
    Next x 

    Application.ScreenUpdating = True 

End Sub 

上記のコードでは、セルがいっぱいになりますが、最後の行がExcelシートの最後までいっぱいになります。 Excelシートの列BC & EにはすでにDが記入されています。コードの変更点は何ですか?Excelでのセルの自動入力VBAマクロ

+1

なぜ 'ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count' ??のhttp://stackoverflow.com/questions/71180/how-can-i-find-last-row-それに含まれているデータを含むExcelのシート – cyboashu

+0

あなたのコードは私のPC上のあなたの要件に応じて動作しています。 [確認](https://www.dropbox.com/s/kg380esjoyxb0o9/autofill_sample.xlsm?dl=0) – skkakkar

+1

lastRowでは、私はあなたの3つの列を比較し、そこから最後の行を取得したいと思います。 'UsedRange'は、私の経験上、いつも期待していた範囲を使用するとは限りません。 'lastRow = Max(cells(rows.count、5).End(xlUp)).Row、cells(rows.count、3).End(xlUp).Row、cells(rows.count、5).End(xlUp) .Row' *または* LastRow = Cells.Find( "*"、searchorder:= xlByRows、searchdirection:= xlPrevious).Row' – BruceWayne

答えて

1

Excel VBA Last Row: The Complete Tutorial To Finding The Last Row In Excel With VBA (And Code Examples)は、を使用して最後を決定するときにLookIn:=xlFormulasを使用することをお勧めします。

lastrow = Find(What:=” * ”, LookIn:=xlFormulas, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row 

あなたは、列DはすでにIに充填されていることを述べているので使用:

lastrow = Range("D" & Rows.Count).End(xlUp).Row 

列Eは、その後Cells(x, 2).Valueに充填されていない場合<> ""でなければなりません。

Sub AutoFill() 
    Dim x As Long 
    Dim y As Long 
    Dim lastrow As Long 
    Dim lastcolumn As Long 
    Application.ScreenUpdating = False 
    Application.DisplayAlerts = False 

    lastcolumn = ActiveSheet.UsedRange.Column - 1 + ActiveSheet.UsedRange.Columns.Count 
    lastrow = Range("D" & Rows.Count).End(xlUp).Row 

    For x = 2 To lastrow 

     If Cells(x, 2).Value = "" Then Cells(x, 2).Value = Cells(x - 1, 2).Value 
     If Cells(x, 3).Value = "" Then Cells(x, 3).Value = Cells(x - 1, 3).Value 
     If Cells(x, 5).Value = "" Then Cells(x, 5).Value = Cells(x - 1, 4).Value 

    Next x 
    Application.ScreenUpdating = True 

End Sub 
+0

ありがとうございます:-) –

+0

恐ろしい!私が助けることができてうれしい。 –

関連する問題