任意の列の最後の行を見つけるために、次の関数を作成しました。
Public Function GetLastRow(ByVal rngToCheck As Excel.Range) As Long
Dim rngLast As Excel.Range
rngLast = rngToCheck.Find(What:="*", SearchOrder:=Excel.XlSearchOrder.xlByRows, SearchDirection:=Excel.XlSearchDirection.xlPrevious)
If rngLast Is Nothing Then
GetLastRow = rngToCheck.Rows.Count
Else
GetLastRow = rngLast.Rows.Count
End If
End Function
この機能は、プロジェクトで何度かダイナミック レンジを扱うときにいつでも使用します。ここで、列 F の最後の行を検索したいのですが、F2 から始めます。行 F1 は見出しであるため、無視する必要があります。ただし、そうではなく、String から Double に変換できないというエラーが表示されます。これは、F1 が文字列 (列のタイトル) であり、他のすべてがデータであるためです。
場合によっては行 1 から下に、時には行 2 から下に移動する必要があるため、関数を変更したくありません。 F1 は文字列で、残りの列は Double であるため、もちろんエラーになります。
Dim xlWB As Excel.Workbook = CType(Globals.ThisWorkbook.Application.ActiveWorkbook, Excel.Workbook)
Dim xlWSEmployee As Excel.Worksheet = CType(CType(xlWB.Sheets("byEmployee"), Excel.Worksheet), Excel.Worksheet)
Dim xlWSPosition As Excel.Worksheet = CType(CType(xlWB.Sheets("byPosition"), Excel.Worksheet), Excel.Worksheet)
Sub renameColumns()
With xlWSPosition
Dim colValue As Excel.Range
For Each colValue In .Range("F2:F" & GetLastRow(.Cells)) 'Change range as needed
If colValue.Value > 0 Then
'used offset instead of range,ie (E1:E)
.Range(colValue.Address).Offset(0, -1).Value = "N"
Else
.Range(colValue.Address).Offset(0, -1).Value = "Y"
End If
Next
End With
End Sub