Подтвердить что ты не робот

Есть ли эквивалент printf или String.Format в Excel

Я, кажется, трачу большую часть своего времени на электронные таблицы, работающие над такими формулами, как:

="some text '" & A1 & "', more text: '" & A2 &" etc."

Было бы гораздо быстрее использовать строку printf или String.Format, например

=String.Format ("Some text '{0}', more text: '{1}'",A1,A2)

Есть ли что-то подобное в Excel, или я могу вызвать CLR без написания макроса?

4b9b3361

Ответ 1

Нет, но вы можете создать наивный просто достаточно, добавив следующее в модуль VBA

 
public function printf(mask As String, ParamArray tokens()) as String
    dim i as Long
    for i = 0 To ubound(tokens)
        mask = replace$(mask, "{" & i & "}", tokens(i))
    next
    printf = mask
end Function

...

=printf("Some text '{0}', more text: '{1}'", A1, A2)

Ответ 2

Вы можете использовать функцию ТЕКСТ -

Вы можете сохранить строку формата где-нибудь в ячейке, как я сделал

У меня есть значение "BUY "#" CREDITS" в моей ячейке D1 В моей ячейке A5 у меня значение 5000. когда я хочу отобразить форматированную строку, которую я использую, =TEXT(A5,$D$1)

Он установит значение ячейки в BUY 5000 CREDITS

Ответ 3

Я обновил код Alex, чтобы вы могли использовать %s для каждой вставки.

Вместо:

=printf("Some text '{0}', more text: '{1}'", A1, A2)

Вы можете использовать:

=printf("Some text '%s', more text: '%s'", A1, A2) 

Как и оригинальный sprintf.

Обновленный код:

Public Function Printf(mask As String, ParamArray tokens()) As String
   Dim i As Long

   For i = 0 To UBound(tokens)          
      mask = Replace$(mask, "%s", tokens(i), , 1)
   Next

   Printf = mask

End Function

Ответ 4

на самом деле нет функции CONCATENATE

=CONCATENATE("some text '",A1,"', more text: '",A2," etc.")

но это не лучше, чем использование & по-моему

Ответ 5

Интересный вопрос... Я думал то же самое.. как построить строку без необходимости прерывать длинное предложение в некоторых отдельных частях между Числами. И поскольку я не хочу создавать функцию VBA (которая будет намного умнее)

= > вот мое решение...

ПОДСТАВИТЬ (P253; O252; "A1A" ; 1)

где

= > P253 - моя длинная строка с меткой "A1A" для # 1 = > O252 - это значение метки # 1

и т.д. (даже если не моя потребность), если другие значения.. = ПОДСТАВИТЬ (ПОДСТАВИТЬ (ПОДСТАВИТЬ (P253; O251; "A1A" ; 1); O252; "А2"; 1); O253; "А2О"; 1)

Ну, я полагаю, даже в #C должна существовать многополярная примитивная функция для sprintf (....% s,% s,% d..)

Ник