Использование VBA Excel для создания грамматически правильного списка - PullRequest
0 голосов
/ 09 октября 2019

Мне нужно найти способ написать список, используя ',' и 'и' правильным образом, основываясь на различном количестве элементов в списке. См. Демонстрацию ниже:

Apples + Oranges + Bananas = Apples, Oranges and Bananas
Apples + Oranges + Pineapples + Bananas = Apples, Oranges, Pineapples and Bananas
Apples + Oranges = Apples and Oranges

Моим первым предположением было бы создать список или массив значений, а затем использовать какую-то функцию 'n-1' или 'last', чтобы поместить слово 'AND' междупоследние два предмета и поместите символ «,» между всеми остальными предметами.

К сожалению, я все еще довольно новичок в VBA, поэтому мне не удалось продвинуться вперед, ни одно руководство или кодекс не был оценен по достоинству.

С наилучшими пожеланиями,

Гарт введите описание изображения здесь

1 Ответ

1 голос
/ 09 октября 2019

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

=IF(COUNTA(A1:D1)=2,A1&" and "&B1,TEXTJOIN($A$5:$B$5,TRUE,A1:D1))

В A5, поставьте только запятую ипространство. В B5 введите , and (обратите внимание, что после and есть пробел).

enter image description here

Редактировать: я буду работать на VBAответ ... но держите это, так как я узнал, что вы можете иметь несколько разделителей в одном TEXTJOIN(), который я не знал!

Edit2: После просмотра ваших данных вы все равно можете использовать формулу. Опять же, поместите где-нибудь , и , and (я использовал A8:B8 здесь):

Введите это как формулу массива:

=TEXTJOIN($A$8:$B$8,TRUE,IF(B1:B4="YES",A1:A4,""))

enter image description here

И VBA (немного обманывают, поскольку я просто использую эту формулу, но она работает):

Sub t()
Dim output As String
output = Evaluate("=TEXTJOIN($A$8:$B$8,TRUE,IF(B1:B4=""YES"",A1:A4,""""))")
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...