Превратить вложенную формулу в VBA - PullRequest
0 голосов
/ 29 января 2019

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

Моя формула:

=IF(ISNUMBER(SEARCH("*10*",D2,6)),"word1",IF(ISNUMBER(SEARCH("*15*",D2,1)),"word2",IF(ISNUMBER(SEARCH("*1*",D2,1)),"word3",IF(ISNUMBER(SEARCH("*20*",D2,1)),"word4",IF(ISNUMBER(SEARCH("*30*",D2,1)),"word5")))))

Мне нужно убедиться, что поиск 1 следует после 10 или 15, так что формула не возвращает слово 3 для всех ячеек, содержащих «1».

В столбце A содержится текст, который иногда содержит орфографические ошибки, поэтому единственное общее значение - этономера.Вот почему я хочу выполнить поиск по номерам в тексте, чтобы вернуть слово 12345.

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

╔═══════════╦═════════╦═══════════╦═════════╗  
║    AGE    ║  NAME   ║ LAST NAME ║ PROGRAM ║  
╠═══════════╬═════════╬═══════════╬═════════╣  
║ 10 YE OLD ║ ANNE    ║ BROWN     ║ word1   ║  
║ AGE 10    ║ ALLY    ║ SMITH     ║ word1   ║  
║ 15 YO     ║ MATT    ║ JANES     ║ word2   ║  
║ 15        ║ DENNIS  ║ JOHNSON   ║ word2   ║  
║ 10Y OLD   ║ DIANA   ║ WILLIAMS  ║ word1   ║  
║ 20yr      ║ JORDAN  ║ BROWN     ║ word4   ║  
║ 30 YR OLD ║ MELISSA ║ RODRIGUEZ ║ word5   ║  
╚═══════════╩═════════╩═══════════╩═════════╝  

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

10 YE OLD
AGE 10
15 YO
15
10Y OLD
20yr
30 YR OLD

1 Ответ

0 голосов
/ 30 января 2019

Вы можете попробовать это, я протестировал его, и он работал для меня, используя целые числа, как вы указали (10,15,5,1,30,20), и изменил его на "word1" и т. Д. Если вы искалидиапазон, т. е. 1, но менее 10, выбранный случай может быть обновлен.Вы должны вставить имя и расширение своей книги, а также имя листа, где указано в коде.

Sub Select_Case()
Dim RNG As Range
Dim ws As Worksheet
Dim TextTest As String
Dim AllColumn As Variant

Set ws = Workbooks("<EnterYourWorkbookName.Extension_Here>").Worksheets("<EnterYourSheetNameHere>")
AllColumn = ws.Range(ws.Cells(2, 4), ws.Cells(1, 4).End(xlDown).Offset(1, 0)) 'assumes heading in row 1 and no breaks in data

    For i = 2 To UBound(AllColumn) 'assumes heading, no headin i = 1
        TextTest = ws.Cells(i, 4).Value
        Set RNG = ws.Cells(i, 4) 'rows then columns if you need to change it later, this should be where you want to output your data
        Select Case TextTest
            Case Is = 10
                RNG = "word1"
            Case Is = 15
                RNG = "word2"
            Case Is = 1
                RNG = "word3"
            Case Is = 20
                RNG = "word4"
            Case Is = 30
                RNG = "word5"
            'Case else (utilize if you have a catch all just in case it is something not predicted)
                'what to do
        End Select
    Next i
End Sub

Дайте мне знать, если вам нужны небольшие настройки.

...