2016-10-10 3 views
0

Итак, все, что я хочу сделать, это создать функцию для оптимизации того, как я могу сегментировать данные сводной таблицы. Эти данные поступают в разных формах, таких как «245896321 - Name», «name» или «name23123», и я хочу, чтобы он возвращал полное имя человека, если ячейки содержат конкретные тексты (фамилия человека), но возвращает только значение #VALUE!Elseif возвращает #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 
+0

'Financeiro = Manual':' Ручная' переменная, определенная где-то в другом месте, или вы забыли добавить к ней кавычки? –

+0

Я просто забыл добавлять цитаты, но ошибка все еще сохраняется. Но спасибо за это, Тим! –

+0

Вместо того, чтобы вызывать свою функцию из ячейки листа, создайте небольшой Sub и вызовите его оттуда: вы увидите, где ошибка. 'Sub Tester(): Debug.Print Financeiro (" blah "): End Sub' –

ответ

1

Application.WorksheetFunction.Search выбросит ошибку времени выполнения, если нет спички: попробуйте вместо что-то вроде:

If Application.WorksheetFunction.IsNumber(Application.Search("*Ormelli*", Line)) Then 
'... 

Опуская WorksheetFunction переключает поведение от запуска ошибки во время выполнения, чтобы вместо возвращении значения ошибки.

Или просто использовать:

If Line Like "*Ormelli*" Then 
'... 

, который я думаю, что легче следовать.

Смежные вопросы