2016-11-03 16 views
0

私は列Aで日付の月を見つけて、列Bに結果を貼り付けようとしています。どちらもヘッダーを持ち、列Aは日付を持ち、列Bは月です。私は、VBAコードは、単にここで列Avba範囲クラスのオートフィルメソッドが失敗しました

の月を計算しているしたいと思い、私のコードは、これまでのところです

Sub Month() 
Dim ws As Worksheet 
Dim lastrow As Long 
Set ws = Worksheets("Sheet1") 
ws.Cells(2, "B") = "=Month(A2)" 
lastrow = Range("A" & Rows.Count).End(xlUp).Row 
Range("B2").AutoFill Destination:=Range("B2:B" & lastrow), Type:=xlFillDefault 
End Sub 

しかし、私はエラーを失敗したと私は変更しようとしたレンジクラスのオートフィル方法を取得しておきますオートフィルタイプは動作しません。あなたがそれを行うより速い方法を知っているなら、私にも教えてください。 (PLZ、機能が優れていない)

enter image description here

lastrowの値は、あなたがそれを説明するためにいくつかのロジックを追加する必要がある2.ある場合は、このコードは失敗し、

+1

.Formula = "=Month(A2)"を使うのか?そして、あなたがこのコードを実行するとき、 'Selection'オブジェクトは何ですか?シートは保護されていますか? –

+0

私は両方を試みたが、彼らはまだ私に同じエラーを与えている。私はws.Cells(2、 "B")= "= Month(A2)"を選択しようとしていたと思う。 – sc1324

+0

それはB2だけを記入し、それから私にエラーを与える。 – sc1324

答えて

1

、ありがとうございました。また使用するように改訂されましたbetter method of finding "last row"

Sub month() 
Dim ws As Worksheet 
Dim lastrow As Long 
Dim startCell As Range 

Set ws = Worksheets("sheet1") 
With ws 
    Set startCell = .Cells(2, 2) ' or .Range("B2") 
    lastrow = startCell.EntireColumn.Find("*", AFter:=startCell, SearchDirection:=xlPrevious).Row 
    If lastrow = startCell.Row Then lastrow = lastrow + 1 
    startCell.Formula = "=Month(A2)" 
    startCell.AutoFill Range(startCell, startCell.Cells(lastrow)), xlFillDefault 
End With 
End Sub 
0

"送信先には送信元範囲が含まれている必要があります"。 linkを参照してください。セルを選択してください。適用したい場合は、セルに数式が* *このコードを実行するアクティブされたときにどのようなワークシート

Sub Month() 
    Dim ws As Worksheet 
    Set ws = Worksheets("Sheet1") 
    ws.Cells(2, "B") = "=Month(A2)" 
    ws.Cells(2, "B").Select 
    Selection.AutoFill Destination:=Range("B2:B" & Cells(Rows.Count, "B").End(xlUp).Row), Type:=xlFillDefault 
End Sub 
関連する問題