「A」の前に「:」がありません
Range("A" & i & ":A" & LastCol - 1)
ファローアップ
私があなたのコメントを調べた後、私はあなたのコードにたくさんのエラーを見ました
1)i
として調光しましInteger
た。これにより、最後の行が32,767を超える場合、Excel2007以降でエラーが発生する可能性があります。に変更してLong
ください。このリンクをご覧になることをお勧めします。
トピック:整数、長整数、およびバイトのデータ型
リンク: http: //msdn.microsoft.com/en-us/library/aa164754%28v=office.10%29.aspx
上記のリンクから引用
整数変数は-32,768から32,767の範囲の値を保持でき、長整数変数は-2,147,483,648から2,147,483,647の範囲の値を保持できます。
2)最後の列を見つけていますが、どのシートにありますか?このようにパスを完全に修飾する必要があります。
If WorksheetFunction.CountA(Sheets("Sheet1").Cells) > 0 Then
LastCol = Cells.Find(What:="*", After:=[A1], _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column
End If
同じことが
With Sheets("Sheet1")
Set DatesRange = Range("B2" & LastCol)
End With
あなたは前にDOTを逃していますRange
これは正しい方法です...
.Range("B2....
またRange("B2" & LastCol)
、あなたが望む範囲をあなたに与えることはありません。範囲を作成する方法については、以下のコードを参照してください。
3)変数を使用していますLastColumn
が、を使用していますLastCol
。Option Explicit
このリンクも参照することをお勧めします(リンクのポイント2を参照)を使用することを強くお勧めします。
トピック:「Err」は人間です
リンク:http ://www.siddharthrout.com/2011/08/01/to-err-is-human/
4)ある場合はどうなり.CountA(Sheets("Sheet1").Cells) = 0
ますか?:)代わりにこのコードをお勧めします
If WorksheetFunction.CountA(Sheets("Sheet1").Cells) > 0 Then
LastCol = Cells.Find(What:="*", After:=[A1], _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column
Else
MsgBox "No Data Found"
Exit Sub
End If
5) ActiveSheet.Rows.Count
最後のアクティブな行は表示されません。そのシートの行の総数が表示されます。データがある列Aの最後の行を取得することをお勧めします。
あなたはそのためにこれを使うことができます
With Sheets("Sheet")
LastRow =.Range("A" & .Rows.Count).End(xlup).row
End With
LastRow
代わりにを使用する毎回インクリメントする必要がないように、ActiveSheet.Rows.Count
を使用することもできます。例えばFor Loop
i
For i = 1 to LastRow
6)最後に、を使用しないでくださいEnd
。理由は非常に単純です。これは、電源オフボタンを使用してコンピュータを切り替えるようなものです。Endステートメントは、Unload、QueryUnload、Terminateイベント、またはその他のVisual Basicコードを呼び出さずに、コードの実行を突然停止します。また、他のプログラムによって保持されているオブジェクト参照(存在する場合)は無効になります。
7)チャットでのあなたのイメージに基づいて、あなたはこれをやろうとしていると思いますか?これは、ループを使用しないコードを使用します。
Option Explicit
Sub FindFill()
Dim wsI As Worksheet, wsO As Worksheet
Dim DatesRange As Range
Dim LastCol As Long, LastRow As Long
If Application.WorksheetFunction.CountA(Sheets("Sheet1").Cells) = 0 Then
MsgBox "No Data Found"
Exit Sub
End If
Set wsI = Sheets("Sheet1")
Set wsO = Sheets("Sheet2")
With wsI
LastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
LastRow = .Range("A" & .Rows.Count).End(xlUp).Row
Set DatesRange = .Range("B1:" & Split(Cells(, LastCol).Address, "$")(1) & 1)
.Columns(1).Copy wsO.Columns(1)
DatesRange.Copy
wsO.Range("B2").PasteSpecial xlPasteValues, _
xlPasteSpecialOperationNone, False, True
.Range("B2:" & Split(Cells(, LastCol).Address, "$")(1) & LastCol).Copy
wsO.Range("C2").PasteSpecial xlPasteValues
End With
End Sub