Функція Excel для вставки змінних у рядок


2

Шукаєте спосіб досягти наступного. Уявіть, що у мене є 2 колонки

A    |   B
---------------
NAME |   SURNAME
---------------
Ned  | Stark
Arya | Stark
Sansa| Bolton

Я хотів би, щоб стовпець С містив таке: "Наступним, хто помре, буде прізвище NAME. Ура!"

тому для досягнення цього я б створив формулу на кшталт

=concatenate(The next to die will be,A2,' ',B2,'. Cheers!')

а потім потягніть її вниз усі мої ряди

але це тривіальний приклад. іноді у мене може бути більше 20 стовпців, і результуюча рядок є набагато складнішим. Має бути приємніший спосіб зробити це? Я думаю як еквівалент функції c # "Формат", наприклад

=Format('The next to die will be {0} {1}. Cheers!',A2,B2)

Будь-які пропозиції?


Якщо ви копіюєте формулу, вам потрібно створити її лише один раз, і об'єднати купу посилань на комірки займає менше часу, ніж писати це питання. Не ясно, в чому проблема.
fixer1234

Я не погоджуюсь. Якщо у мене є 20 стовпців, а результуюча рядок - 200 символів, всіяна апострофами і комами (я генерую заяви sql), це може зайняти віки і може бути дуже схильним до помилок. Є й інші способи зробити це (я можу написати додаток C #, щоб створити вихід, або я могла б зробити об'ємну вставку sql і використовувати збережені програми для важкого підйому). Але це не було питанням мого запитання, я шукаю кращого рішення Excel для конкатенації
Crudler

1
Я думаю взяти участь у використанні Sansa Boltonзамість цього Sansa Stark.
jcbermu

1
сподівався, що хтось підбере це :) трохи полеміки привертає погляд на мене: P
Crudler

Відповіді:


2

1-й варіант:

="The next to die will be "& A2 & ' '& B2 & ". Cheers!"

2-й варіант:

(для хардкор-користувачів)

Створіть власну функцію:

Function myString(ParamArray Vals() As Variant)
    Separator1 = "{"
    Separator2 = "}"
    finalString = ""
    initialString = Vals(0)
    found = True
    firstpos = 1
    While found = True
        pos = InStr(firstpos, initialString, Separator1)
        If pos = 0 Then
            found = False
            endpartval = Mid(initialString, firstpos)
            finalString = finalString + endpartval
        Else
            stringParts = Mid(initialString, firstpos, pos - firstpos)
            pos1 = InStr(pos, initialString, Separator2)
            firstpos = pos1 + 1
            varNumber = Mid(initialString, pos + 1, pos1 - pos - 1)
            finalString = finalString + stringParts + Vals(varNumber + 1)
        End If
    Wend
    myString = finalString
End Function

Для роботи вам потрібно відкрити VBA / Macros з ALT+ F11, після чого в ThisWorkbook вставити новий модуль і вставити код.

Тепер у будь-яку клітинку можна поставити

=mystring("The next to die will be {0} {1}. Cheers!",A2,B2)

чи що завгодно. Майте на увазі, що спочатку слід переходити рядок, а потім посилання на комірки.

Це дійсно:

=mystring("The next to die will be {0}, {3} and {2}. Cheers!",A2,B2,B3)

Це не так:

=mystring(A2,"The next to die will be {0}, {3} and {2}. Cheers!",B2,B3)

0

У Excel немає такої функції, яку ви можете використовувати SUBSTITUTE, але вона все ще буде довгою:

=SUBSTITUTE(SUBSTITUTE("The next to die will be {1} {2}","{1}",A2),"{2}",B2)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.