Могу ли я установить значение ячейки с помощью пользовательской функции, которая ссылается на другую ячейку? - PullRequest
0 голосов
/ 12 октября 2019

Я хотел бы создать настраиваемую функцию для электронной таблицы, которую я создаю для отслеживания вымышленной футбольной лиги. Мне нужно преобразовать полное имя в аббревиатуру, чтобы я мог настроить систему, в которой турнирная таблица должна проверять только результаты для «ABBR R», где R - это W (Win), L (Потеря) или T (Tie). Я знаю, что могу сделать это в обычном Excel, используя вложенную формулу if then else, но у меня есть шестнадцать команд для проверки, и это будет ужасно неэффективно.

=If(C6="Arizona Vipers","ARZ",If(C6="Atlanta Warriors","ATL",If(C6="Calgary Bandits","CGY",If(C6="Columbus Express","CLM",If(C6="Detroit Firebirds","DET",If(C6="Hartford Minutemen","HFD",If(C6="Montreal Bucks","MTL",If(C6="New Jersey Sharks","NJ",If(C6="Portland Beavers","POR",If(C6="Salt Lake City Rams","SLC",If(C6="San Antonio Knights","SA",If(C6="San Diego Sailors","SD",If(C6="St. Louis Eagles","STL",If(C6="Toronto Bulls","TOR",If(C6="Vancouver Timberwolves","VAN",If(C6="Vegas Aces","VEG",""))))))))))))))))

Я попытался создать VBA, чтобы посмотреть, смогу ли я получитьон распознает одну команду, используя этот метод.

Function checkTeam(a)
    Dim abbr As String
    Set abbrCell = Application.ThisCell
    currCell = Application.ThisCell
    If a = "Arizona Vipers" Then
        currCell.Value = "ARZ"
    End If
End Function

Я ожидаю, что ячейка с функцией checkTeam будет изменена на abbr, в данном случае «ARZ», но я не получаю вывод. Я не очень хорош в VBA и знаю, что что-то упустил.

Ответы [ 3 ]

0 голосов
/ 12 октября 2019

как сказал Тим, пользовательская функция воздействует только на ячейку (с несколькими странными исключениями).

Если его ответ не ясен ... эта функция, вероятно, даст вам то, что вы хотите. Входным значением будет ячейка с полным именем.

Function checkTeam(theFullName) As String
    Dim tName As String: tName = theFullName

    If InStr(1, tName, "Atlanta", vbTextCompare) > 0 Then
        checkTeam = "ATL"

    ElseIf InStr(1, tName, "Arizona", vbTextCompare) > 0 Then
        checkTeam = "ARZ"

    'etc etc
    End If
End Function

??

0 голосов
/ 12 октября 2019

Тим прав. Естественный способ сделать это в Excel - настроить таблицу подстановки и ввести формулу vlookup, чтобы перевести полное название вашей команды в сокращение.

Как правило, составьте список на отдельном листе.

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

Если вы используете заголовки для этого списка, не включайте их в вызов vlookup.

При указании таблицы поиска используйте префиксы $, чтобы предотвратить изменение диапазона при автоматическом заполнении - например LookupSheet! $ A $ 2: $ B $ 17

Помните, что вы ищете перевод, поэтому ваш последний аргумент vlookup должен быть ЛОЖНЫМ, чтобы получить точное совпадение.

Ваша формула для аббревиатуры может выглядеть как

= vlookup (c6, LookupSheet $ A $ 2: $ B $ 17,2, False)

0 голосов
/ 12 октября 2019

Функция, используемая на листе, может возвращать только значение на листе. Обычно вы просто делаете что-то вроде этого:

Function checkTeam(a)
    If a = "Arizona Vipers" Then
        checkTeam = "ARZ"
    End If
End Function

Это похоже на то, что вы могли бы сделать проще с помощью таблицы поиска и VLOOKUP, хотя

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