0

任意の列の最後の行を見つけるために、次の関数を作成しました。

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
4

3 に答える 3

1

頼りTryParseすぎるのは好きではありませんが、次のような場合に優れた機能を発揮します。

For Each colValue In .Range("F2:F" & GetLastRow(.Cells)) 'Change range as needed
    Dim curVal As Integer
    If (colValue.Value IsNot Nothing AndAlso Integer.TryParse(colValue.Value.ToString(), curVal)) Then
        If curVal > 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
    End If
Next
于 2013-09-17T21:32:33.990 に答える
1

次のように使用する前に、セルの値が数値かどうかを確認します。

If IsNumeric(colValue.Value) And colValue.Value > 0 Then
  ...
于 2013-09-17T21:34:05.167 に答える
0

あなたの答えは、 for ステートメントを使用することです

Dim fColumn As Integer
fColumn = 6
For i = 2 To GetLastRow(.Cells)
    If Cells(i, fColumn).Value > 0 Then
        Cells(i, fColumn).Offset(0, -1).Value = "N"
    Else
        Cells(i, fColumn).Offset(0, -1).Value = "Y"
    End If
Next i
于 2013-09-17T21:52:24.787 に答える