Обратитесь к ячейке в соседнем столбце таблицы в функции VBA - PullRequest
0 голосов
/ 30 ноября 2018

Я пытаюсь создать функцию в Excel VBA, которая ссылается на соседнюю ячейку в той же таблице и в той же строке, в которой будет находиться функция. По сути, я пытаюсь найти термин VBA для выражения следующегообычная ссылка на таблицу Excel:

[@[columnname]]

Мне нужно использовать эту ссылку только для базового оператора IF.

Мне кажется, что ответ на эту проблему долженбыть очевидным, но я просто не могу понять это.

изображение фиктивной таблицы
Редактировать: добавлено это изображение, чтобы показать, что я хочу сделать.Я в основном хочу создать более конкретный оператор if, который будет проверять, является ли значение в ячейке той же строки, что и PIK или начисленные проценты (но в столбце «Тип действия»), «Начальной настройкой».это тупая версия, но мне просто нужно понять концепцию создания ссылки.

Отредактированный код ответа (спасибо, кстати), чтобы соответствовать моим потребностям:

`Function IfAdvance(ifTrue As Variant, ifFalse As Variant)

Dim c As Range, lo As ListObject, f As Range

Set c = Application.Caller 'or Application.ThisCell
                           ' = the cell containing the formula

For Each lo In c.Worksheet.ListObjects
    If Not Intersect(c, lo.DataBodyRange) Is Nothing Then

        'locate the column header of interest
        Set f = lo.HeaderRowRange.Find("Action Type", , xlValues, xlWhole)

        If f.Value = "Initial Set-Up" Then
            MyTableUDF = ifTrue
        Else
            MyTableUDF = ifFalse
        End If
        Exit Function
    End If
Next lo

MyTableUDF = "Not in a Table!"

End Function`

но не былне может заставить его работать, к сожалению.

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

Как оказалось, единственной концепцией, которую мне действительно нужно было знать, был application.caller.Оттуда я смог выяснить текущую строку и привязать ее к определенному столбцу.Спасибо всем, кто нашел время !!

Function IfInitialSetup(ifTrue As Variant, ifFalse As Variant)

Dim rownum As Long
Dim colnum As Long
Dim str As String

rownum = Application.Caller.row
colnum = Sheet3.Range("Table14[Action Types]").Column
str = Sheet3.Range(Sheet3.Cells(rownum, colnum).Address).Value

If str = "Initial Set-Up" Then
    IfInitialSetup = ifTrue
    Else
    IfInitialSetup = ifFalse
End If

End Function
0 голосов
/ 01 декабря 2018

Не совсем понятно, что вы хотите сделать, но вот пример, который звучит похоже на ваше описание

Function MyTableUDF()

    Dim c As Range, lo As ListObject, f As Range

    Set c = Application.Caller 'or Application.ThisCell
                               ' = the cell containing the formula

    For Each lo In c.Worksheet.ListObjects
        If Not Intersect(c, lo.DataBodyRange) Is Nothing Then

            'locate the column header of interest
            Set f = lo.HeaderRowRange.Find("Col2", , xlValues, xlWhole)

            If Not f Is Nothing Then
                MyTableUDF = c.EntireRow.Cells(f.Column) / 2 'for example
            Else
                MyTableUDF = CVErr(xlErrNA)
            End If
            Exit Function
        End If
    Next lo

    MyTableUDF = "Not in a Table!"

End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...