Поиск имени заголовка активной ячейки с помощью VBA в Excel

#vba #excel

#vba #excel

Вопрос:

У меня есть таблица, созданная из списка данных. Как найти текст заголовка каждого столбца

Таблица

Когда я выбираю заголовок activecell, он подсвечивается оранжевым цветом, но я хочу получить это значение с помощью Visual Basic. Я могу найти адрес листа Excel, но мне нужен заголовок столбца таблицы

    Private Sub Worksheet_Change(ByVal Target As Excel.Range)
      MsgBox Target.Value 
      MsgBox ActiveCell.Address
   End Sub
  

Ответ №1:

Это вернет заголовок столбца, если переданная ячейка находится в таблице

 Function TableHeader(cl As Range) As Variant
    Dim lst As ListObject
    Dim strHeading As String

    Set lst = cl.ListObject

    If Not lst Is Nothing Then
        TableHeader = lst.HeaderRowRange.Cells(1, cl.Column - lst.Range.Column   1).Value
    Else
        TableHeader = ""
    End If
End Function
  

Ответ №2:

 strCurrentColName = Cells(ActiveCell.ListObject.Range.Row, ActiveCell.Column).Value
  

Ответ №3:

Если под заголовком столбца вы подразумеваете ячейку в первой строке того же столбца, в которую было внесено изменение, вы можете создать заголовок с использованием ячеек, т. е.

 Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    MsgBox Target.Value
    MsgBox ActiveCell.Address amp; vbNewLine amp; "Column header is " amp; Cells(1, Target.Column)
End Sub
  

Если ваш заголовок был в строке 2, вы бы использовали Cells(2, ActiveCell.Column) etc

[Обновлено после комментария ниже]

 Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim rng1 As Range
Set rng1 = Target.End(xlUp)
MsgBox "First value before a blank cell/top of sheet is " amp; rng1.Value
End Sub
  

Комментарии:

1. 1 сПасибо, это то, что я хочу, но если таблица находится в центре листа, это не сработает!!

2. Если ваша таблица непрерывна, вы можете использовать мой обновленный код выше, чтобы найти заголовок

3. Спасибо, но моя таблица не является непрерывной, но первое решение работает, поскольку я сделал так, чтобы моя таблица всегда отображалась сверху ;): D

4. Никаких проблем 🙂 Если есть способ определить верхнюю часть таблицы, то его можно легко адаптировать (т.Е. Найти и использовать определенное слово «Регион разработки», если оно всегда находится в верхнем левом углу, Используйте имя диапазона, чтобы «отметить» верхнюю часть таблицы и т. Д.)

Ответ №4:

Я искал в Интернете хороший способ найти значение заголовка любой заданной ячейки в таблице и после небольшого мозгового штурма придумал это рабочее решение, которым, как я думал, я поделюсь.

     Target.Offset(1 - Target.Row).Value
  

Если ваши заголовки не находятся в строке 1, измените 1 на любую строку, в которой они оказались.