3

Excel で VBA を使用する:

複数のテーブルを持つシートがたくさんあります。これらのテーブルに共通しているのは、ProductID 列と LotNumber 列だけです。製品 ID 列のデータは、検証または操作する必要があります。現在選択されているセルの現在のテーブルのテーブル行インデックス番号を取得する方法が必要です。テーブルの行とシートの行が一致しないため、ActiveCell 参照を使用できません。途中で他のテーブルがあるため、列で最後に使用されたセルを見つけることはできません。

このサブをさまざまなワークブックで使用できるようにする必要があります。

ここに私がこれまでに持っているコードがあります。

Const tblUNLABELED As String = "tblUnLabel"

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    StopAppEvents
    Dim ws As Worksheet

    Set ws = ActiveSheet
    Dim intRow As Integer
    Dim strTest As String
    If Not Intersect(ActiveCell, _
                     ActiveSheet.Range(tblUNLABELED & "[LotNumber]")) Is Nothing Then
        'go to the product entered in this table row and Ucase(ProductID)
        strTest = ws.ListObjects(tblUNLABELED).Range(intRow, "[ProductID]")
        ws.ListObjects(tblUNLABELED).Range(intRow, "[ProductID]") = UCase(strTest)
    End If

    RestartAppEvents

End Sub

どんな助けでも大歓迎です。

4

2 に答える 2

6

これは、Range の ListObject プロパティを使用して、ActiveCell が含まれるテーブルの列名と行番号を示します。ActiveCell がテーブルに含まれていない場合は、そのことを示すメッセージが表示されます。行番号 0 は、ActiveCell がテーブルのヘッダー行にあることを意味します。

Sub PrintActiveCellTableData()

    Dim cell As Excel.Range
    Dim lo As Excel.ListObject
    Dim loCol As Excel.ListColumn
    Dim loRowNum As Long

    Set cell = ActiveCell
    If cell.ListObject Is Nothing Then
        Debug.Print "No ActiveCell ListObject"
        Exit Sub
    End If

    Set lo = cell.ListObject
    With lo
        Set loCol = .ListColumns(cell.Column - (.HeaderRowRange.Cells(1).Column) + 1)
        loRowNum = cell.Row - .HeaderRowRange.Row
    End With

    Debug.Print "Table Name: "; lo.Name; "  ListColumn: "; loCol.Name; "  Row:"; loRowNum

End Sub
于 2012-09-29T15:21:25.117 に答える
1

選択したセルがいずれかのテーブル内にあり、テーブルが空のセルで囲まれている場合、ActiveCell.CurrentRegion はテーブルを含む範囲を提供する必要があり、そこから作業できます。

ActiveCell.Row - ActiveCell.CurrentRegion.Row + 1

現在のテーブル内のアクティブなセルの (1 ベースの) 行番号を返します

于 2012-09-29T15:11:30.507 に答える