Макрос excel формулу в строку

Как выполнить преобразование между формулой и текстом / значением

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

ПРЕОБРАЗОВАТЬ ФОРМУЛЫ В ФАКТИЧЕСКИЕ ЗНАЧЕНИЯ

  • Нажмите F2 + F9, чтобы преобразовать формулы в фактические значения.
  • Используйте специальную вставку Excel для преобразования формул в фактические значения
    • Нажмите Alt + E + S + V (Специальная вставка Excel)
    • Используйте контекстное меню (Специальная вставка Excel)
  • Трюк с перетаскиванием правой кнопкой мыши для преобразования формул в фактические значения
  • Сценарий VBA (макрос) для преобразования формул в фактические значения
  • Преобразование формул в фактические значения одним щелчком мыши

ПРЕОБРАЗОВАТЬ ФОРМУЛЫ В ТЕКСТОВЫЕ СТРОКИ

  • Добавьте апостроф (‘) для преобразования формул в текстовые строки
  • Замена трюка (Ctrl + H) для преобразования формул в текстовые строки
  • Функция отображения формул в Excel для преобразования формул в текстовые строки
  • Сценарий VBA (макрос) для преобразования формул в текстовые строки
  • Преобразование формул в текстовые строки всего двумя щелчками мыши

ПРЕОБРАЗОВАТЬ ТЕКСТ В ФОРМУЛЫ

  • Сценарий VBA (макрос) для преобразования текста в формулы
  • Всего два клика, чтобы преобразовать текст в формулы

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

Вам необходимо скопировать фактические значения из файла Excel в другой файл ……
Вам нужно отправить другим людям файл Excel, но некоторые функции изменчивы, значение будет пересчитано, когда файл был открыт на другом компьютере с разными версиями Excel ……
Вы не хотите, чтобы получатель файла Excel знал, какие формулы вы использовали, потому что это результат вашей тяжелой работы; или ваша компания взимает с клиентов деньги за составление отчетов со сложными формулами. Поэтому вам нужно заменить формулы их результатами ……

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


ПРЕОБРАЗОВАТЬ ФОРМУЛЫ В ФАКТИЧЕСКИЕ ЗНАЧЕНИЯ

Перечисленные ниже методы помогут вам преобразовать формулы в их значения при одновременном удалении формул. Нажмите Ctrl + Z отменить, если вы хотите вернуть формулы.

Нажмите F2 + F9, чтобы преобразовать формулы в фактические значения.

Это работает только для одной ячейки, но очень легко использовать и запоминать. Подходит для групп, которым нужно отредактировать только одну или несколько ячеек. Конкретные шаги заключаются в следующем:

1. Наведите указатель мыши на ячейку и нажмите F2 или Двойной клик в ячейке, чтобы отредактировать ее.

2. Нажмите F9, а затем ENTER.


Используйте специальную вставку Excel для преобразования формул в фактические значения

Когда вы копируете или вырезаете и вставляете в Excel, все в исходных ячейках по умолчанию будет вставлено в целевые ячейки. Но иногда это может быть не то, что вам нужно. В Специальная вставка Функция в Excel позволяет вставлять только то, что вам нужно. Чтобы получить доступ к этой функции, мы перечислили 2 способа:

• Нажмите Alt + E + S + V (Специальная вставка Excel).

1. Скопируйте исходную ячейку или диапазон, который вы хотите преобразовать в значения.

2. УДЕРЖАТЬ Alt, и нажмите E, S и V с целью.

преобразование между текстовой формулой 03

3. Нажмите OK или нажмите ENTER.

преобразование между текстовой формулой 03

• Используйте контекстное меню (Специальная вставка Excel).

Если вы беспокоитесь, что не можете вспомнить ярлык, указанный выше, выполните следующие действия:

1. Скопируйте исходную ячейку или диапазон, который вы хотите преобразовать в значения.

2. Щелкните правой кнопкой мыши ячейку (я) назначения, выберите значок (Значения) внизу.

Или выполните следующие действия для получения более подробной информации:

1. Скопируйте исходную ячейку или диапазон, который вы хотите преобразовать в значения.

2. Щелкните правой кнопкой мыши целевую ячейку (я), выберите Специальная вставка.

преобразование между текстовой формулой 03

3. Нажмите Ценности и OK.

√ Небольшой совет: если в верхнем левом углу целевых ячеек есть зеленые треугольники, выберите диапазон ячеек, Кнопка трассировки ошибки (желтый значок с восклицательным знаком) появится. Щелкните по нему, выберите Преобразовать в число. Зеленые треугольники исчезнут.

преобразование между текстовой формулой 03


Трюк с перетаскиванием правой кнопкой мыши для преобразования формул в фактические значения

Если вам не нравится специальная вставка, вы можете преобразовать формулы в значения следующим образом:

1. Выберите исходную ячейку или диапазон ячеек.

2. Поместите курсор на границу ячейки (ячеек), теперь указатель изменится на указатель перемещения.

3. Щелкните правой кнопкой мыши (не отпускайте) указателем перемещения, перетащите ячейку в нужное место и отпустите (вы также можете перетащить ячейку в исходное место).

4. Нажмите Копировать сюда только как значения.


Сценарий VBA (макрос) для преобразования формул в фактические значения

Если вы привыкли использовать VBA (Visual Basic для приложений) в Excel, здесь у нас также есть код макроса для вас, сделайте следующее: (Обратите внимание, что после запуска кода макроса, указанного ниже, вы не сможете отменить действие. )

1. Выберите исходную ячейку или диапазон ячеек с формулами, которые вы хотите преобразовать в значения.

преобразование между текстовой формулой 03

2. Нажмите Alt + F11, Microsoft Visual Basic для приложений появится окно.

3. Нажмите Вставить, А затем нажмите Модули в раскрывающемся списке.

преобразование между текстовой формулой 03

4. Вставьте следующий код в Модули окно.

Sub ConvertFormulasToValues()
'Update by Extendoffice
    Dim xRg As Range
    Dim xCell As Range
    Dim xRet As VbMsgBoxResult
    Dim SLocation As String
    On Error Resume Next
    xRet = MsgBox("You can't undo this operation. " & "Click Yes to copy the workbook automatically?", vbYesNoCancel, "Kutools for Excel")
    Select Case xRet
        Case vbYes
            'Backup a copy of the workbook to the same location.
            ActiveWorkbook.SaveCopyAs Filename:=ActiveWorkbook.Path & "Backup" & " " & ActiveWorkbook.Name
            SLocation = ActiveWorkbook.Path & "Backup" & " " & ActiveWorkbook.Name
            MsgBox "The backup is: " & SLocation, vbInformation, "Kutools for Excel"
        Case vbCancel
            Exit Sub
    End Select
    'Please select the range which you want to convert formulas to values.
    Set xRg = Selection
    If TypeName(xRg) = "Range" Then
        For Each xCell In xRg
            If xCell.HasFormula Then
                xCell.Formula = xCell.Value
            End If
        Next
    End If
End Sub

5. Нажмите F5 для запуска кода. Если нужно, нажмите Да чтобы преобразовать формулы в их результаты при автоматическом копировании книги, диалоговое окно сообщит вам, где находится резервная копия. Нажмите Нет управлять преобразованием напрямую. Помните, вы не можете отменить эту операцию.

преобразование между текстовой формулой 03

После операции это выглядит так:

преобразование между текстовой формулой 03


Преобразование формул в фактические значения одним щелчком мыши

Для тех, кто не любит выполнять сложные шаги, Kutools for Excel — очень удобный инструмент для преобразования формул в значения и одновременного удаления формул в Excel. Это буквально займет у вас всего один щелчок, если у вас установлен Kutools:

1. Выберите диапазон исходных ячеек, найдите Диапазоны и ячейки группа во вкладке Кутулс.

2. Нажмите К фактическому.

преобразование между текстовой формулой 03

Теперь вы можете наслаждаться результатом.

преобразование между текстовой формулой 03

Нажмите, чтобы скачать Kutools for Excel на 30-дневную бесплатную пробную версию.


ПРЕОБРАЗОВАТЬ ФОРМУЛУ В СТРОКУ ТЕКСТА

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

Добавьте апостроф (‘) для преобразования формул в текстовые строки

An апостроф не позволяет Excel интерпретировать текстовую строку как формулу. Поэтому добавление апострофа всегда полезно, если вы хотите отобразить текстовую строку вместо результата формулы (текстовой строки). И это довольно просто, шаги следующие:

1. Выберите ячейку с формулой и нажмите F2 или Двойной клик в ячейке, чтобы отредактировать ее.

2. Добавьте апостроф (‘) до знак равенства (=).

преобразование между текстовой формулой 03

3. Нажмите ENTER, теперь вы увидите текстовую строку, отображаемую в ячейке.

преобразование между текстовой формулой 03


Замена трюка (Ctrl + H) для преобразования формул в текстовые строки

Однако в случае, если вы хотите отобразить все текстовые строки формул на текущем листе, Замените Функция в Excel — лучший выбор для решения проблемы.

1. Нажмите Ctrl + H, Вы увидите Найти и заменить окно.

2. Тип = в Найти то, что поле, введите знак равно в Заменить пунктом.

преобразование между текстовой формулой 22

3. Нажмите Заменить все. Вы увидите все формулы на текущем листе.

преобразование между текстовой формулой 23


Функция отображения формул в Excel для преобразования формул в текстовые строки

В Excel есть функция под названием Показать формулу скрыто во вкладке Формулы. Используя эту функцию, результаты формул можно легко преобразовать в текстовые строки формул:

Перейти на вкладку Формулы, найти Формула аудита группу, нажмите Показать формулу.

преобразование между текстовой формулой 24

Эта функция сделает видимыми все формулы на листе, например:

преобразование между текстовой формулой 25


Сценарий VBA (макрос) для преобразования формул в текстовые строки

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

1. Нажмите Alt + F11, Microsoft Visual Basic для приложений появится окно.

2. Нажмите Вставить, А затем нажмите Модули в раскрывающемся списке.

3. Вставьте следующий код в Модули окно.

Function ShowF(Rng As Range)
ShowF = Rng.Formula
End Function

4. Вернитесь на рабочий лист, введите формулу = ShowF (исходная ячейка) в ячейке назначения, например:

преобразование между текстовой формулой 28

5. Нажмите ENTER. Теперь вы увидите формулу.

преобразование между текстовой формулой 29


Преобразование формул в текстовые строки всего двумя щелчками мыши

Если вы не хотите удалять формулы, но вам нужно легко преобразовывать формулы в текстовые строки, Kutools for Excel это идеальный инструмент в Excel, который поможет вам:

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

преобразование между текстовой формулой 30

Вот как это выглядит после преобразования.

преобразование между текстовой формулой 31

Нажмите, чтобы скачать Kutools for Excel на 30-дневную бесплатную пробную версию.


ПРЕОБРАЗОВАТЬ ТЕКСТ В ФОРМУЛЫ

Допустим, у вас есть отчет, в котором показаны формулы и значения, или кто-то отправил вам файл Excel, в котором показаны формулы вместо их результатов.

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

Сценарий VBA (макрос) для преобразования текста в формулы

1. Нажмите Alt + F11, Microsoft Visual Basic для приложений появится окно.

2. Нажмите Вставить, А затем нажмите Модули в раскрывающемся списке.

преобразование между текстовой формулой 32

3. Вставьте следующий код в Модули окно.

Function Eval(Ref As String)
Application.Volatile
Eval = Evaluate(Ref)
End Function

4. Вернитесь на рабочий лист, введите формулу = Eval (исходная ячейка) в ячейке назначения, например:

преобразование между текстовой формулой 34

5. Нажмите ENTER. Теперь вы можете увидеть результат формулы.

преобразование между текстовой формулой 35


Всего два клика, чтобы преобразовать текст в формулы

Если у вас есть Kutools for Excel установлен в Excel для преобразования текста в формулы: Под Кутулс вкладку, вы можете просто щелкнуть Содержание и Преобразовать текст в формулу после выбора диапазона ячеек, который вы хотите преобразовать, например:

преобразование между текстовой формулой 36

Вот как это выглядит после преобразования.

преобразование между текстовой формулой 37

Нажмите, чтобы скачать Kutools for Excel на 30-дневную бесплатную пробную версию.


Лучшие инструменты для работы в офисе

Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%

  • Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон
  • Объединить ячейки / строки / столбцы и хранение данных; Разделить содержимое ячеек; Объедините повторяющиеся строки и сумму / среднее значение… Предотвращение дублирования ячеек; Сравнить диапазоны
  • Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
  • Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
  • Избранные и быстро вставляйте формулы, Диапазоны, диаграммы и изображения; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
  • Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии
  • Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
  • Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF
  • Группировка сводной таблицы по номер недели, день недели и другое … Показать разблокированные, заблокированные ячейки разными цветами; Выделите ячейки, у которых есть формула / имя

вкладка kte 201905


Вкладка Office — предоставляет интерфейс с вкладками в Office и значительно упрощает вашу работу

  • Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
  • Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
  • Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!

офисный дно

На чтение 4 мин. Просмотров 33.2k.

Итог: ознакомьтесь с 3 советами по написанию и созданию формул в макросах VBA с помощью этой статьи и видео.

Уровень мастерства: Средний

Автоматизировать написание формул

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

Поначалу написание формул в VBA может быть немного сложнее,
поэтому вот три совета, которые помогут сэкономить время и упростить процесс.

Совет № 1: Свойство Formula

Свойство Formula является членом объекта Range в VBA. Мы можем использовать его для установки / создания формулы для отдельной ячейки или диапазона ячеек.

Есть несколько требований к значению формулы, которые мы устанавливаем с помощью свойства Formula:

  1. Формула представляет собой строку текста, заключенную в кавычки. Значение формулы должно начинаться и заканчиваться кавычками.
  2. Строка формулы должна начинаться со знака равенства = после первой кавычки.

Вот простой пример формулы в макросе.

Sub Formula_Property()

  ' Формула представляет собой строку текста, заключенную в кавычки
  ' Начинается со знака =
  Range("B10").Formula = "=SUM(B4:B9)"

End Sub

Свойство Formula также можно использовать для чтения существующей формулы в ячейке.

Совет № 2: Используйте Macro Recorder

Если ваши формулы более сложные или содержат специальные
символы, их будет сложнее написать в VBA. К счастью, мы можем использовать
рекордер макросов, чтобы создать код для нас.

Create Formula VBA code with the Macro Recorder

Вот шаги по созданию кода свойства формулы с помощью средства записи макросов.

  1. Включите средство записи макросов (вкладка «Разработчик»> «Запись макроса»)
  2. Введите формулу или отредактируйте существующую формулу.
  3. Нажмите Enter, чтобы ввести формулу.
  4. Код создается в макросе.

Если ваша формула содержит кавычки или символы амперсанда, макрос записи будет учитывать это. Он создает все подстроки и правильно упаковывает все в кавычки. Вот пример.

Sub Macro10()
' Используйте средство записи макросов для создания кода для сложных формул с
' специальны символы и относительные ссылки

  ActiveCell.FormulaR1C1 = "=""Total Sales: "" & TEXT(R[-5]C,""$#,###"")"
    
End Sub

Совет № 3: Нотация формулы стиля R1C1

Если вы используете средство записи макросов для формул, вы
заметите, что он создает код со свойством FormulaR1C1.

Нотация стиля R1C1 позволяет нам создавать как относительные (A1), абсолютные ($A$1), так и смешанные ($A1, A$1) ссылки в нашем макрокоде.

R1C1 обозначает строки и столбцы.

Относительные ссылки

Для относительных ссылок мы указываем количество строк и
столбцов, которые мы хотим сместить от ячейки, в которой находится формула.
Количество строк и столбцов указывается в квадратных скобках.

Следующее создаст ссылку на ячейку, которая на 3 строки выше
и на 2 строки справа от ячейки, содержащей формулу.

Отрицательные числа идут вверх по строкам и столбцам слева.

Положительные числа идут вниз по строкам и столбцам справа.

Абсолютные ссылки

Мы также можем использовать нотацию R1C1 для абсолютных ссылок. Обычно это выглядит как $A$2.

Для абсолютных ссылок мы НЕ используем квадратные скобки. Следующее создаст прямую ссылку на ячейку $A$2, строка 2, столбец 1

При создании смешанных ссылок относительный номер строки или
столбца будет зависеть от того, в какой ячейке находится формула.

Проще всего использовать макро-рекордер, чтобы понять это.

Свойство FormulaR1C1 и свойство формулы

Свойство FormulaR1C1 считывает нотацию R1C1 и создает
правильные ссылки в ячейках. Если вы используете обычное свойство Formula с
нотацией R1C1, то VBA попытается вставить эти буквы в формулу, что, вероятно,
приведет к ошибке формулы.

Поэтому используйте свойство Formula, если ваш код содержит
ссылки на ячейки ($ A $ 1), свойство FormulaR1C1, когда вам нужны относительные
ссылки, которые применяются к нескольким ячейкам или зависят от того, где
введена формула.

Если ваша электронная таблица изменяется в зависимости от
условий вне вашего контроля, таких как новые столбцы или строки данных,
импортируемые из источника данных, то относительные ссылки и нотация стиля
R1C1, вероятно, будут наилучшими.

Я надеюсь, что эти советы помогут. Пожалуйста, оставьте
комментарий ниже с вопросами или предложениями.

 

Добрый вечер!

Вопрос, конечно, не жизненно важный, но все-таки.
В VBA прописана очень громоздкая формула,
activecell.formulaR1C1 = «=if(vlookup… очень много всего»
ее неудобно читать
можно ли ее разбить на несколько строчек?

Спасибо!

 

Sergei_A

Пользователь

Сообщений: 443
Регистрация: 05.01.2013

 

OSA913

Пользователь

Сообщений: 248
Регистрация: 03.01.2016

Подскажите как перенести на новую строку часть формулы, которую вставляю в массив vba? Пробелом и _ не переносится.

 

Александр П.

Пользователь

Сообщений: 1147
Регистрация: 16.03.2016

#4

08.11.2017 06:25:42

На примере из макрорекордера  

Код
 ActiveWorkbook.Worksheets("NNN.FFF").Sort.SortFields.Add Key:=Range("A1:A6") _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal

То есть, после нужного символа ставите пробел? затем «_» и затем enter

 

Михаил Лебедев

Пользователь

Сообщений: 2856
Регистрация: 17.01.2013

#5

08.11.2017 07:13:20

Код
activecell.formulaR1C1 = "=if(vlookup... первая часть от очень много всего" _
& " вторая часть от очень много всего" _
& " третья часть от очень много всего"

Всё сложное — не нужно. Всё нужное — просто /М. Т. Калашников/

 

OSA913

Пользователь

Сообщений: 248
Регистрация: 03.01.2016

Покажите пожалуйста в моем примере(модуль1). Заранее спасибо!

Прикрепленные файлы

  • Массив.xlsm (14.06 КБ)

 

В Вашем примере — абсурдное выражение написано. И оно не соответствует тому вопросу, который Вы задаете.
activecell.formulaR1C1 = «=if(vlookup… очень много всего» — речь идет о СТРОКОВОМ ВЫРАЖЕНИИ, которое записывается в активную ячейку.
Строковое — т.к. заключено в кавычки.
А в Вашем модуле1 Вы пытаетесь присвоить переменной типа Variant не распознаваемый программой набор символов.
Я так подозреваю, в надежде на чудо :)
Лучше приложите пример, в котором Ваша формула внесена в ячейку, так будет проще понять, что это за формула и что она вычисляет.

Всё сложное — не нужно. Всё нужное — просто /М. Т. Калашников/

 

OSA913

Пользователь

Сообщений: 248
Регистрация: 03.01.2016

#8

11.11.2017 02:52:43

Цитата
Михаил Лебедев написал:
что это за формула и что она вычисляет.

Так вопрос то был не об этом, а переносе строки. Но спасибо за подсказку, формула в массиве вроде правильно вычисляет но у меня тоже есть сомнения что это оптимальный вариант. Я создам отдельную тему с вопросом по поводу того как правильно записывать такого рода формулы и буду благодарен вам за помощь.

Перенос формул в макрос

anisimovaleksandr32

Дата: Понедельник, 25.01.2021, 12:44 |
Сообщение № 1

Группа: Пользователи

Ранг: Новичок

Сообщений: 40

Добрый день многоуважаемые форумчане!
Помогите с решением
В таблице в столбце 13 таблицы есть формула:

Которую хотел бы спрятать в макросы. Произвел запись макродекодером но терплю не удачу (((( почему то начинает ругаться

Аналогичная ситуация происходит и в двух других моих решениях
В столбце 14 данной таблице
И в ЗАКЛЮЧЕНИИ под таблицей…

Помогите пжл решить данные проблемы

[admin]Эта тема изначально не являлась готовым решением, но стала таковой в процессе решения задачи ТС
Универсальный макрос по переносу формул из ячеек листа в код VBA в сообщении № 17

К сообщению приложен файл:

7090601.xlsm
(81.0 Kb)

 

Ответить

Gustav

Дата: Понедельник, 25.01.2021, 15:35 |
Сообщение № 2

Группа: Друзья

Ранг: Старожил

Сообщений: 2398


Репутация:

986

±

Замечаний:
0% ±


начинал с Excel 4.0, видел 2.1

У Вас в коде пропал фрагмент формулы! Как корова языком слизала, а точнее — похоже, макрорекордер шалит не по-детски :(
Переводя на человеческий формат формулы (не R1C1), это средний коротенький фрагмент:
[vba]

Код

=ЕСЛИ(И(S18=»Раствор»;СЧЁТ(N31:N36)=3);СРЗНАЧ(N31:N36);ЕСЛИ(И(S18=»Раствор»;СЧЁТ(N31:N36)>3);»Только 3-и образца»;ЕСЛИ(СЧЁТ(N31:N36)>5;ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1)-НАИМЕНЬШИЙ(N31:N36;2))/4);2);ЕСЛИ(СЧЁТ(N31:N36)=5;ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1))/
4);2);ЕСЛИ
(СЧЁТ(N31:N36)=4;ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1))/3);2);ЕСЛИ(СЧЁТ(N31:N36)=3;ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1))/2);2);ЕСЛИ(СЧЁТ(N31:N36)<=2;ОКРУГЛ(СРЗНАЧ(N31:N36);2);)))))))

[/vba]
Вот этого фрагмента (в формате R1C1) и нет в Вашем макросе:
[vba][/vba]
И теперь если этот фрагмент (уже в формате R1C1)
[vba][/vba]
аккуратненько вставить в макрос в начало второй строки после переноса формулы на новую строчку:
[vba]

Код

Sub Макрос1()
    Range(«O31:O36»).Select
    ActiveCell.FormulaR1C1 = _
        «=IF(AND(R[-13]C[4]=»»Раствор»»,COUNT(RC[-1]:R[5]C[-1])=3),AVERAGE(RC[-1]:R[5]C[-1]),IF(AND(R[-13]C[4]=»»Раствор»»,COUNT(RC[-1]:R[5]C[-1])>3),»»Только 3-и образца»»,IF(COUNT(RC[-1]:R[5]C[-1])>5,ROUND(((SUM(RC[-1]:R[5]C[-1])-SMALL(RC[-1]:R[5]C[-1],1)-SMALL(RC[-1]:R[5]C[-1],2))/4),2),IF(COUNT(RC[-1]:R[5]C[-1])=5,ROUND(((SUM(RC[-1]:R[5]C[-1])-SMALL(RC[-1]:R[5]C[-1],1))/» & _
        «4),2),IF(COUNT(RC[-1]:R[5]C[-1])=4,ROUND(((SUM(RC[-1]:R[5]C[-1])-SMALL(RC[-1]:R[5]C[-1],1))/3),2),IF(COUNT(RC[-1]:R[5]C[-1])=3,ROUND(((SUM(RC[-1]:R[5]C[-1])-SMALL(RC[-1]:R[5]C[-1],1))/2),2),IF(COUNT(RC[-1]:R[5]C[-1])<=2,ROUND(AVERAGE(RC[-1]:R[5]C[-1]),2),)))))))»
End Sub

[/vba]
то всё волшебным образом заработает!


МОИ: Ник, Tip box: 41001663842605

Сообщение отредактировал GustavПонедельник, 25.01.2021, 15:48

 

Ответить

lebensvoll

Дата: Понедельник, 25.01.2021, 17:20 |
Сообщение № 3

Группа: Проверенные

Ранг: Старожил

Сообщений: 1002


Репутация:

30

±

Замечаний:
0% ±


Excel 2010

Gustav, спасибо огромное за ответ!!!

Прошу меня простить за то что создал тему не со своего профиля (не смог вспомнить свой старый). А когда вспомнил и во становил, то тему решил не удалять (((((

Цитата

похоже, макрорекордер шалит не по-детски

а счем это может быть связано (((( и можно ли это устранить (((( ведь у меня еще два кода есть которые получаются тоже записываются (((( не правильно (((((


Кто бы ты ни был, мир в твоих руках

 

Ответить

Gustav

Дата: Понедельник, 25.01.2021, 18:24 |
Сообщение № 4

Группа: Друзья

Ранг: Старожил

Сообщений: 2398


Репутация:

986

±

Замечаний:
0% ±


начинал с Excel 4.0, видел 2.1

а счем это может быть связано (((( и можно ли это устранить

А фиг знает… честно говоря, сам первый раз с таким сталкиваюсь… И поэтому я бы советовал в данном случае не пользоваться макрорекордером, а создавать формулы с помошью свойства FormulaLocal объекта Range. Преимущество, в первую очередь, состоит в том, что Вы берете за основу формулу в ее, так сказать, естественном виде, в котором она отображается в окне формул (ну, если только, конечно, Вы не ярый фанат адресации R1C1). Сопровождать формулу в таком естественном виде значительно проще, чем в формате R1C1. Пожалуй, при этом единственное, но вполне преодолимое, неудобство заключается в необходимости удвоения в коде VBA двойных кавычек, если таковые имеются в формуле.

В качестве узелка на память предложу примерную схему преобразования текста формулы из ячейки — в макрос VBA, воссоздающий эту формулу в той же ячейке.

1. Копируем текст формулы в Блокнот (Notepad) и разбиваем на несколько строк примерно равной длины. Разбивать можно в любом месте, хоть посредине функции — это нестрашно:
[vba]

Код

=ЕСЛИ(И(S18=»Раствор»;СЧЁТ(N31:N36)=3);СРЗНАЧ(N31:N36);ЕСЛИ(И(S18=»Раствор»;СЧЁТ(N31:N36)>3);
«Только 3-и образца»;ЕСЛИ(СЧЁТ(N31:N36)>5;ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1)-
НАИМЕНЬШИЙ(N31:N36;2))/4);2);ЕСЛИ(СЧЁТ(N31:N36)=5;ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1))
/4);2);ЕСЛИ(СЧЁТ(N31:N36)=4;ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1))/3);2);ЕСЛИ(СЧЁТ(N31:N36)=3;
ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1))/2);2);ЕСЛИ(СЧЁТ(N31:N36)<=2;ОКРУГЛ(СРЗНАЧ(N31:N36);2);)))))))

[/vba]
2. Далее в Блокноте же в получившемся текстовом фрагменте удваиваем все двойные кавычки. Т.е. вызываем окно замены по Ctrl+H и указываем Что: » и Чем: «» :
[vba]

Код

=ЕСЛИ(И(S18=»»Раствор»»;СЧЁТ(N31:N36)=3);СРЗНАЧ(N31:N36);ЕСЛИ(И(S18=»»Раствор»»;СЧЁТ(N31:N36)>3);
«»Только 3-и образца»»;ЕСЛИ(СЧЁТ(N31:N36)>5;ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1)-
НАИМЕНЬШИЙ(N31:N36;2))/4);2);ЕСЛИ(СЧЁТ(N31:N36)=5;ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1))
/4);2);ЕСЛИ(СЧЁТ(N31:N36)=4;ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1))/3);2);ЕСЛИ(СЧЁТ(N31:N36)=3;
ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1))/2);2);ЕСЛИ(СЧЁТ(N31:N36)<=2;ОКРУГЛ(СРЗНАЧ(N31:N36);2);)))))))

[/vba]
3. Далее в Блокноте же в начало каждой строки вставляем фрагмент: strFormula = strFormula & » (включая двойную кавычку), а в конец каждой строки — одну двойную кавычку » (чтобы закрыть строку):
[vba]

Код

strFormula = strFormula & «=ЕСЛИ(И(S18=»»Раствор»»;СЧЁТ(N31:N36)=3);СРЗНАЧ(N31:N36);ЕСЛИ(И(S18=»»Раствор»»;СЧЁТ(N31:N36)>3);»
strFormula = strFormula & «»»Только 3-и образца»»;ЕСЛИ(СЧЁТ(N31:N36)>5;ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1)-«
strFormula = strFormula & «НАИМЕНЬШИЙ(N31:N36;2))/4);2);ЕСЛИ(СЧЁТ(N31:N36)=5;ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1))»
strFormula = strFormula & «/4);2);ЕСЛИ(СЧЁТ(N31:N36)=4;ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1))/3);2);ЕСЛИ(СЧЁТ(N31:N36)=3;»
strFormula = strFormula & «ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1))/2);2);ЕСЛИ(СЧЁТ(N31:N36)<=2;ОКРУГЛ(СРЗНАЧ(N31:N36);2);)))))))»

[/vba]
4. Далее дописываем несколько операторов VBA — ДО и ПОСЛЕ фрагмента — и получаем законченную работоспособную процедуру:
[vba]

Код

Sub Macro1
    Dim strFormula As String

    strFormula = strFormula & «=ЕСЛИ(И(S18=»»Раствор»»;СЧЁТ(N31:N36)=3);СРЗНАЧ(N31:N36);ЕСЛИ(И(S18=»»Раствор»»;СЧЁТ(N31:N36)>3);»
    strFormula = strFormula & «»»Только 3-и образца»»;ЕСЛИ(СЧЁТ(N31:N36)>5;ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1)-«
    strFormula = strFormula & «НАИМЕНЬШИЙ(N31:N36;2))/4);2);ЕСЛИ(СЧЁТ(N31:N36)=5;ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1))»
    strFormula = strFormula & «/4);2);ЕСЛИ(СЧЁТ(N31:N36)=4;ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1))/3);2);ЕСЛИ(СЧЁТ(N31:N36)=3;»
    strFormula = strFormula & «ОКРУГЛ(((СУММ(N31:N36)-НАИМЕНЬШИЙ(N31:N36;1))/2);2);ЕСЛИ(СЧЁТ(N31:N36)<=2;ОКРУГЛ(СРЗНАЧ(N31:N36);2);)))))))»

    Range(«O31»).FormulaLocal = strFormula
End Sub

[/vba]


МОИ: Ник, Tip box: 41001663842605

 

Ответить

lebensvoll

Дата: Понедельник, 25.01.2021, 18:51 |
Сообщение № 5

Группа: Проверенные

Ранг: Старожил

Сообщений: 1002


Репутация:

30

±

Замечаний:
0% ±


Excel 2010

Gustav, СПАСИБО за такой подробнейший подход к записи
Я делал грубо.
1. Формулы и так создавались с трудом и долго правились и поправлялись
2. В VBA я не силен (((( форум во многом помогал. Но я эту процедуру делал так:
копировал формулу
вставал на нужную ячейку, включал «запись» и вставлял скопированную формулу, останавливал запись и потом уже получишвийся код-формулу подставлял куда нужно.
Если во многом формулы так получались на ура. То именно с этими тремя формулами возникали проблемы ((((
Буду пробовать Ваше предложенное

Но у меня же будет не одна формула а много их ((((

СПАСИБО ВАМ ОГРОМНЕЙШЕЕ


Кто бы ты ни был, мир в твоих руках

Сообщение отредактировал lebensvollПонедельник, 25.01.2021, 18:53

 

Ответить

RAN

Дата: Понедельник, 25.01.2021, 18:55 |
Сообщение № 6

Группа: Друзья

Ранг: Экселист

Сообщений: 5645

Но все преимущество FormulaLocal сводится на нет одной строчкой
[vba][/vba]


Быть или не быть, вот в чем загвоздка!

 

Ответить

Gustav

Дата: Понедельник, 25.01.2021, 19:18 |
Сообщение № 7

Группа: Друзья

Ранг: Старожил

Сообщений: 2398


Репутация:

986

±

Замечаний:
0% ±


начинал с Excel 4.0, видел 2.1


В чём подвох? Вроде, формула автоматически нормально протягивается в этом диапазоне (если об этом)…


МОИ: Ник, Tip box: 41001663842605

 

Ответить

RAN

Дата: Понедельник, 25.01.2021, 20:33 |
Сообщение № 8

Группа: Друзья

Ранг: Экселист

Сообщений: 5645

Протягивается, а не вставляется.


Быть или не быть, вот в чем загвоздка!

 

Ответить

lebensvoll

Дата: Среда, 27.01.2021, 21:31 |
Сообщение № 9

Группа: Проверенные

Ранг: Старожил

Сообщений: 1002


Репутация:

30

±

Замечаний:
0% ±


Excel 2010

:'( :'( :'(
ААААААААААААААААА блин ну почемууууу ну что не так то :'( :'( :'(
ПОМОГИТЕ ПЖЛ с решением!!!
Сев за другой комп у меня получилось произвести запись через Macro Recorder

НО стал записывать следующую формулу ((((( терплю не удачу за неудачей
И разбил формулу как предложил Gustav,

Но все равно ругается :'( и производил запись перебиванием формулы в ручную шаг за шагом и все равно не удачи :'(
Где мои ошибки почему так происходит
Сама формула:

К сообщению приложен файл:

3868329.xlsm
(84.1 Kb)


Кто бы ты ни был, мир в твоих руках

 

Ответить

gling

Дата: Четверг, 28.01.2021, 00:19 |
Сообщение № 10

Группа: Друзья

Ранг: Старожил

Сообщений: 2449


Репутация:

652

±

Замечаний:
0% ±


2010

Здравствуйте.
Слишком длинные формулы, очень много знаков. думаю по этому VBA и не берет. Попробуйте их загнать в диспетчер имен и потом вставлять по имени. Но в диспетчере тоже есть какое то ограничение по знакам. Если не получится всю формулу загнать в диспетчер, разбейте на несколько и там же соберите или соберите в ячейке.

К сообщению приложен файл:

9898101.xlsm
(85.2 Kb)


ЯД-41001506838083

 

Ответить

lebensvoll

Дата: Четверг, 28.01.2021, 00:27 |
Сообщение № 11

Группа: Проверенные

Ранг: Старожил

Сообщений: 1002


Репутация:

30

±

Замечаний:
0% ±


Excel 2010

gling, Спасибо Вам за ответ…
А если я создам «Имена», другие мои макросы не потеряют свою функциональность!?
Я за этим доком уже сижу неделю наверное ((((
То вначале в формулах находишь ошибки — правишь — записываешь макрос
То потом на работе сотрудники либо что то предумают или заметят ошибку и вновь пункт 1 :'(
Если сейчас еще и это проблема случится (пусть она возможно даже и не получится но еще и потеряют функциональность другие макросы с формулами) это будет АААААААА


Кто бы ты ни был, мир в твоих руках

 

Ответить

gling

Дата: Четверг, 28.01.2021, 00:31 |
Сообщение № 12

Группа: Друзья

Ранг: Старожил

Сообщений: 2449


Репутация:

652

±

Замечаний:
0% ±


2010

А какая связь между именами и макросами которые не обращаются к новому имени?


ЯД-41001506838083

 

Ответить

lebensvoll

Дата: Четверг, 28.01.2021, 00:34 |
Сообщение № 13

Группа: Проверенные

Ранг: Старожил

Сообщений: 1002


Репутация:

30

±

Замечаний:
0% ±


Excel 2010

Связь что они обращаются к ячейке а это ячейка имеет ИМЯ (и получится что два имени примерно G31 и втрое его имя стало «к примеру: цен»).

 

Ответить

gling

Дата: Четверг, 28.01.2021, 00:40 |
Сообщение № 14

Группа: Друзья

Ранг: Старожил

Сообщений: 2449


Репутация:

652

±

Замечаний:
0% ±


2010

Одинаковых имен у вас не будет, а обращаться по имени в Excel это нормально, конфликтов быть не должно.


ЯД-41001506838083

 

Ответить

lebensvoll

Дата: Четверг, 28.01.2021, 00:53 |
Сообщение № 15

Группа: Проверенные

Ранг: Старожил

Сообщений: 1002


Репутация:

30

±

Замечаний:
0% ±


Excel 2010

понял спасибо будем учиться ((((

 

Ответить

Gustav

Дата: Четверг, 28.01.2021, 19:55 |
Сообщение № 16

Группа: Друзья

Ранг: Старожил

Сообщений: 2398


Репутация:

986

±

Замечаний:
0% ±


начинал с Excel 4.0, видел 2.1

И разбил формулу как предложил Gustav,

lebensvoll, очень грустно, но Вы совсем не «вкурили» мой алгоритм из сообщения #4 и, извините, прёте своим первоначально проторенным путём… :(
Прочтите мой алгоритм еще раз внимательно, если действительно хотите успеха в этом деле.

Кстати, я нигде не упоминаю про делёжку строки по последовательности символов «& _» в конце строки (как это делает макрорекордер). Потому что при этом существует ограничение — не больше 25 строк. И оно нам не надо. Тем более, мы выяснили, что при таком подходе как раз и пропадают символы на «сгибах» формулы!

У меня же строки объединяются с помощью начальных фрагментов «strFormula = strFormula & «. И таким способом можно легко объединить не то, что 25 — 100 строк или даже 500.

И делайте всё препарирование формулы в Блокноте! В редакторе VBA среда будет пытаться автоматически подставлять, например, завершающие кавычки. Нам не нужно такой сомнительной услужливости а-ля «словарь T9» в телефоне. В редактор VBA возвращайтесь только на 4-м шаге алгоритма, когда формула уже корректно разбита по отдельным строкам. Ну, я же всё написал…


МОИ: Ник, Tip box: 41001663842605

 

Ответить

Gustav

Дата: Пятница, 29.01.2021, 10:53 |
Сообщение № 17

Группа: Друзья

Ранг: Старожил

Сообщений: 2398


Репутация:

986

±

Замечаний:
0% ±


начинал с Excel 4.0, видел 2.1

Вот, чтобы не пыхтеть вручную в Блокноте и не делать походу случайных ошибок, написал на коленках макрос-визард, реализующий алгоритм из моего сообщения #4.
Макрос выводит в Окно отладки (Ctrl+G в редакторе VBA, если не открыто) текст макроса по созданию формулы из указанной ячейки (ее адрес указывается в константе INS_FORM_ADR визарда). Соответственно, копируете этот текст из Окна отладки, вставляете в модуль книги и запускаете.
В макросе-визарде parseFormulaIntoMacro по желанию можно заменить .FormulaLocal на .FormulaR1C1 (или на любую другую: .Formula или .FormulaR1C1Local).


МОИ: Ник, Tip box: 41001663842605

Сообщение отредактировал GustavПятница, 29.01.2021, 10:59

 

Ответить

Gustav

Дата: Пятница, 29.01.2021, 12:06 |
Сообщение № 18

Группа: Друзья

Ранг: Старожил

Сообщений: 2398


Репутация:

986

±

Замечаний:
0% ±


начинал с Excel 4.0, видел 2.1


Серж, я как молодой писатель о большем и мечтать не могу! :D Главное, чтобы ТС, когда проснётся, смог найти эту свою тему. Кстати, надо отдать ему должное, название у темы очень удачное — по сути и никакой воды! :up:


МОИ: Ник, Tip box: 41001663842605

 

Ответить

RAN

Дата: Пятница, 29.01.2021, 12:31 |
Сообщение № 19

Группа: Друзья

Ранг: Экселист

Сообщений: 5645

№ 17 делает тему весьма интересной и полезной для готовых решений.
Но неплохо было бы это как-то указать в самом начале, а то могут и не дочитать до самого главного. <_<


Быть или не быть, вот в чем загвоздка!

 

Ответить

lebensvoll

Дата: Пятница, 29.01.2021, 12:57 |
Сообщение № 20

Группа: Проверенные

Ранг: Старожил

Сообщений: 1002


Репутация:

30

±

Замечаний:
0% ±


Excel 2010

Gustav, Спасибо за ответ и еще раз пояснения.
Просто сев за другой комп у меня получилось произвести запись Macro Recorder

Цитата

В таблице в столбце 13 таблицы есть формула:

как раз на ура и последующие также.
А вот с выводом и применение я уже нашел просто в просторах инета такое решение (но смысл один разбить формулу) ну а за то что только 25 строк (((( я только узнал
Применение Вашего метода для меня показалось сложным и не стал использовать (я просто не смог сообразить а как мне потом это воткнуть в свои коды)


Кто бы ты ни был, мир в твоих руках

Сообщение отредактировал lebensvollПятница, 29.01.2021, 13:00

 

Ответить

Вставка формулы со ссылками в стиле A1 и R1C1 в ячейку (диапазон) из кода VBA Excel. Свойства Range.FormulaLocal и Range.FormulaR1C1Local.

Свойство Range.FormulaLocal

FormulaLocal — это свойство объекта Range, которое возвращает или задает формулу на языке пользователя, используя ссылки в стиле A1.

В качестве примера будем использовать диапазон A1:E10, заполненный числами, которые необходимо сложить построчно и результат отобразить в столбце F:

Примеры вставки формул суммирования в ячейку F1:

Range(«F1»).FormulaLocal = «=СУММ(A1:E1)»

Range(«F1»).FormulaLocal = «=СУММ(A1;B1;C1;D1;E1)»

Пример вставки формул суммирования со ссылками в стиле A1 в диапазон F1:F10:

Sub Primer1()

Dim i As Byte

    For i = 1 To 10

        Range(«F» & i).FormulaLocal = «=СУММ(A» & i & «:E» & i & «)»

    Next

End Sub

В этой статье я не рассматриваю свойство Range.Formula, но если вы решите его применить для вставки формулы в ячейку, используйте англоязычные функции, а в качестве разделителей аргументов — запятые (,) вместо точек с запятой (;):

Range(«F1»).Formula = «=SUM(A1,B1,C1,D1,E1)»

После вставки формула автоматически преобразуется в локальную (на языке пользователя).

Свойство Range.FormulaR1C1Local

FormulaR1C1Local — это свойство объекта Range, которое возвращает или задает формулу на языке пользователя, используя ссылки в стиле R1C1.

Формулы со ссылками в стиле R1C1 можно вставлять в ячейки рабочей книги Excel, в которой по умолчанию установлены ссылки в стиле A1. Вставленные ссылки в стиле R1C1 будут автоматически преобразованы в ссылки в стиле A1.

Примеры вставки формул суммирования со ссылками в стиле R1C1 в ячейку F1 (для той же таблицы):

‘Абсолютные ссылки в стиле R1C1:

Range(«F1»).FormulaR1C1Local = «=СУММ(R1C1:R1C5)»

Range(«F1»).FormulaR1C1Local = «=СУММ(R1C1;R1C2;R1C3;R1C4;R1C5)»

‘Ссылки в стиле R1C1, абсолютные по столбцам и относительные по строкам:

Range(«F1»).FormulaR1C1Local = «=СУММ(RC1:RC5)»

Range(«F1»).FormulaR1C1Local = «=СУММ(RC1;RC2;RC3;RC4;RC5)»

‘Относительные ссылки в стиле R1C1:

Range(«F1»).FormulaR1C1Local = «=СУММ(RC[-5]:RC[-1])»

Range(«F2»).FormulaR1C1Local = «=СУММ(RC[-5];RC[-4];RC[-3];RC[-2];RC[-1])»

Пример вставки формул суммирования со ссылками в стиле R1C1 в диапазон F1:F10:

‘Ссылки в стиле R1C1, абсолютные по столбцам и относительные по строкам:

Range(«F1:F10»).FormulaR1C1Local = «=СУММ(RC1:RC5)»

‘Относительные ссылки в стиле R1C1:

Range(«F1:F10»).FormulaR1C1Local = «=СУММ(RC[-5]:RC[-1])»

Так как формулы с относительными ссылками и относительными по строкам ссылками в стиле R1C1 для всех ячеек столбца F одинаковы, их можно вставить сразу, без использования цикла, во весь диапазон.


Понравилась статья? Поделить с друзьями:
  • Макрос excel форматирование таблица
  • Макрос excel формат ячеек
  • Макрос excel формат по образцу
  • Макрос excel фильтр в сводной
  • Макрос excel ускорить работу макроса