#vba #excel
#vba #excel
Вопрос:
Итак, все, что я хочу сделать, это создать функцию для оптимизации того, как я могу сегментировать данные сводной таблицы. Эти данные поступают в разных формах, таких как «245896321 — Name», «name» или «name23123», и я хочу, чтобы они возвращали полное имя человека, если ячейки содержат определенные тексты (фамилия человека), но он возвращает только #VALUE!
Заранее спасибо! Ты прекрасна!
Также я прошу прощения, если мое кодирование режет вам глаза, только что начал свое приключение в мире программирования два дня назад, если вы хотите предложить изменения, не стесняйтесь! 🙂
Function Financeiro (Line) as String
'=IF(ISNUMBER(SEARCH("*Person*", Line)), "Person Name")
If Application.WorksheetFunction.IsNumber(Application.WorksheetFunction.Search("*Ormelli*", Line)) Then
Financeiro = "Fernando Ormelli"
ElseIf Application.WorksheetFunction.IsNumber(Application.WorksheetFunction.Search("*Fortuna*", Line)) Then
Financeiro = "Ricardo Fortuna"
ElseIf Application.WorksheetFunction.IsNumber(Application.WorksheetFunction.Search("*Manocchio*", Line)) Then
Financeiro = "Ricardo Manocchio"
ElseIf Application.WorksheetFunction.IsNumber(Application.WorksheetFunction.Search("*Stanquini*", Line)) Then
Financeiro = "Helder Stanquini"
ElseIf Application.WorksheetFunction.IsNumber(Application.WorksheetFunction.Search("*Ivanete*", Line)) Then
Financeiro = "Ivanete Leite"
ElseIf Application.WorksheetFunction.IsNumber(Application.WorksheetFunction.Search("*Freitas*", Line)) Then
Financeiro = "João Freitas"
ElseIf Application.WorksheetFunction.IsNumber(Application.WorksheetFunction.Search("*Khan*", Line)) Then
Financeiro = "Marcelo Khan"
ElseIf Application.WorksheetFunction.IsNumber(Application.WorksheetFunction.Search("*Filho*", Line)) Then
Financeiro = "Marco Filho"
ElseIf Application.WorksheetFunction.IsNumber(Application.WorksheetFunction.Search("*Rocha*", Line)) Then
Financeiro = "Natalia Rocha"
ElseIf Application.WorksheetFunction.IsNumber(Application.WorksheetFunction.Search("*Carvalho*", Line)) Then
Financeiro = "Vinicius Carvalho"
ElseIf Application.WorksheetFunction.IsNumber(Application.WorksheetFunction.Search("*SAE*", Line)) Then
Financeiro = "SAE"
ElseIf Application.WorksheetFunction.IsNumber(Application.WorksheetFunction.Search("*Raphael*", Line)) Then
Financeiro = "Raphael Vieira"
Else
Financeiro = "Manual"
End If
End Function
Комментарии:
1.
Financeiro = Manual
:Manual
переменная определена где-то еще, или вы забыли добавить кавычки вокруг нее?2. Я просто забыл добавить кавычки, но ошибка все еще сохраняется. Но спасибо и за это, Тим!
3. Вместо того, чтобы вызывать вашу функцию из ячейки рабочего листа, создайте небольшой подраздел и вызовите его оттуда: вы увидите, где ошибка.
Sub Tester():Debug.Print Financeiro("blah"): End Sub
4. Я прошу прощения, если мое кодирование режет вам глаза, я только начал свое приключение в мире программирования два дня назад — как только вы заставите свой код работать так, как задумано, зайдите в Code Review , вы многому научитесь! =)
5. Будет сделано! Спасибо за совет!
Ответ №1:
Application.WorksheetFunction.Search
выдаст ошибку времени выполнения, если совпадения нет: попробуйте вместо этого что-то вроде:
If Application.WorksheetFunction.IsNumber(Application.Search("*Ormelli*", Line)) Then
'...
Исключение WorksheetFunction
переключает поведение с запуска ошибки во время выполнения на возврат значения ошибки.
Или просто используйте:
If Line Like "*Ormelli*" Then
'...
что, я думаю, легче следовать.