私はExcelテンプレートを作成しようとしています(データの量はケースごとに異なります)、それは次のようになります:
すべての偶数行には「顧客」があり、すべての奇数行に「元帳」を配置したいと思います。基本的には、列Cにデータが存在するようになるまで、すべての奇数行に「元帳」を配置する必要があります。次のコードがあります。
'========================================================================
' INSERTING LEDGERS for every odd row (below Customer)
'========================================================================
Sub Ledgers()
Dim rng As Range
Dim r As Range
Dim LastRow As Long
LastRow = .Cells(.Rows.Count, "C").End(xlUp).Row
Set rng = .Range("C5:C" & LastRow)
For i = 1 To rng.Rows.Count
Set r = rng.Cells(i, -2)
If i Mod 2 = 1 Then
r.Value = "Ledger"
End If
Next i
End Sub
しかし、それは私にエラーメッセージを与えます無効または修飾されていない参照。エラーが発生した場所を教えてください。
どうもありがとう!
コマンドが.
のように.Cells
で始まる場合は、次のようなwith
ステートメント内にあると想定します。
With Worksheets("MySheetName")
LastRow = .Cells(.Rows.Count, "C").End(xlUp).Row
Set rng = .Range("C5:C" & LastRow)
End With
したがって、セルが含まれると予想されるワークシートの名前を指定する必要があります。
モジュールの上部でOption Explicit
を使用して、すべての変数を宣言することを強制するのは良い考えではありません(i As Long
の宣言に失敗しました)。
あなたのコードは…に減らすことができます
Option Explicit
Public Sub Ledgers()
Dim LastRow As Long
Dim i As Long
With Worksheets("MySheetName")
LastRow = .Cells(.Rows.Count, "C").End(xlUp).Row
'make sure i starts with a odd number
'here we start at row 5 and loop to the last row
'step 2 makes it overstep the even numbers if you start with an odd i
'so there is no need to proof for even/odd
For i = 5 To LastRow Step 2
.Cells(i, "A") = "Ledger" 'In column A
'^ this references the worksheet of the with-statement because it starts with a `.`
Next i
End With
End Sub
ステップ2でループして、インデクサー変数の1行おきに行を取得します。
Sub Ledgers()
Dim rng As Range
Dim LastRow As Long
LastRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, "C").End(xlUp).Row
Set rng = ActiveSheet.Range("C5:C" & LastRow)
For i = 1 To LastRow step 2
rng.Cells(i, 1) = "Ledger" 'In column A
Next i
End Sub