Страницы: 1
RSS
Преобразование формул в значения только на выделенных листах
 
Добрый день. Подскажите пожалуйста, как в книге, преобразовать формулы в значения только на выделенных листах (группа). Например, есть листы A,B,C,D....., нужно на всех листах кроме A и B преобразовать формулы в значения.  
 
Код
Sub FixValue()
    Dim Application_Calculation As Long
    Application_Calculation = Application.Calculation
    Application.Calculation = xlCalculationManual

    Dim arr As Variant
    Dim sh As Worksheet
    For Each sh In ActiveWorkbook.Worksheets
        Select Case sh.Name
        Case "A", "B"
        Case Else
            With sh
                arr = .UsedRange
                .UsedRange = arr
            End With
        End Select
    Next
    
    Application.Calculation = Application_Calculation
End Sub
Изменено: МатросНаЗебре - 02.08.2022 11:43:29 (Application.Calculation)
 
Цитата
Sboro: только на выделенных листах (группа)
Код
Dim sh as WorkSheet
For Each sh In ActiveWindow.SelectedSheets
   sh.UsedRange=sh.UsedRange
Next sh
Изменено: Jack Famous - 02.08.2022 12:04:41
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
МатросНаЗебре, спасибо большое, всё работает как надо.!!!
 
Jack Famous, к сожалению, вставляет в выделенные листы только пустые значения.
 
Цитата
Sboro: всё работает как надо
только там выделенных листов нет - значит название темы не то
Цитата
Sboro: вставляет в выделенные листы только пустые значения
стоило один раз не указать метод по умолчанию, и он конечно, дал сбой
Так работает
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Jack Famous,  да, теперь всё работает. Спасибо большое тоже, буду использовать и ваш код тоже. Очень компактно. Прошу прощения за неточность в написании задачи, нужно было указать, что выделенные все листы, кроме A и B. Спасибо ещё раз.
 
Цитата
Sboro: нужно было указать, что выделенные все листы, кроме A и B
Тогда так. На всех выделенных, кроме A и B
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Jack Famous, так тоже работает, хотя и выше ваш пример тоже работал. Но этот с уточнением: кроме обозначенных листов, подходит более чем. Спасибо большое.
 
Sboro, обращайтесь)
Изменено: Jack Famous - 02.08.2022 16:48:18
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Очень интересная тема получается, если на листе есть отсортированные (отфильтрованные) данные.
Допустим есть три столбца. В третьем столбце с одной из ячеек есть перенос строки. Расчёта в этой табличке (что фильтруется) нет. Раксчёт только в одной ячейке и не затрагивает фильтрующийся диапазон.

Делаем фильтр по второму столбцу.

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

И при раскрытии фильтрованной таблицы он только усиливается


Вот как то так...
 
Del
Изменено: New - 04.08.2022 12:39:55
 
tutochkin, если делать универсальный вариант, то, возможно, необходимо раскрыть все скрытые столбцы и строки с данными, т.к. массив, например, к сожалению, не вставляет данные в скрытые ячейки, зато, хотя бы берёт  :) Как будет с Range.Value=Range.Value не тестировал.
По вашему примеру я не понял ничего — почему фильтр затронул строку вне диапазона и что там потом случилось. Создайте новую тему с файлом-примером и обсудим
Изменено: Jack Famous - 04.08.2022 12:36:11
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал:
Создайте новую тему с файлом-примером и обсудим
Да зачем новую тему?
Вот файлик прицепил.

Только я немного дополненный макрос использую, дабы не удалить случайно

Код
' Замена всех формул на листе в значения
Sub Form_2_Dan()
Dim a As Integer
Dim sh As Worksheet
' Запрашиваем подтверждение
a = MsgBox("Внимание!" & _
Chr(10) & "Вы точно хотите заменить все формулы на листе на значения?" & _
Chr(10) & "Это необратимо!", _
52, "Замена формул на значения.")
' Если OK, то замену производим
If a = 6 Then
    For Each sh In ActiveWindow.SelectedSheets
       sh.UsedRange.Value = sh.UsedRange.Value
    Next sh
End If

End Sub


ПыСы я просто знаю, что перед заменой надо все фильтра снять... Решил поделиться.
Изменено: tutochkin - 04.08.2022 12:48:44
 
tutochkin, спасибо))
Вместо Chr(10) удобнее использовать vbLf  ;)
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Jack Famous, нас делают наши привычки... А так, я в курсе о константах
ПыСы Кому то удобнее писать vbNewLine. ...
Изменено: tutochkin - 04.08.2022 16:05:29
 
Цитата
tutochkin: Кому то удобнее писать vbNewLine
просто длиннее и это 2 символа по факту: перенос и каретка
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Добрый день всем. Тоже интересует вопрос перевода в значения, но по определенному условию.
Есть множество листов (2000 шт.) прошу помощи в макросе, который будет выполнять следующее:
Пробегает по всем листам, кроме Лист1, Лист2, Лист3 и если ячейка А2 на листе закрашена RGB 255;255;0, то переводит данные на этом листе в значения за исключением прописанных ячеек: например N54;Q56. И так до последнего листа. То есть, нужно, чтобы он исключал сначала отмеченные в макросе листы, затем не переводил в значения отмеченные в макросе ячейки. Заранее спасибо.
 
Скрытый текст

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
JayBhagavan, не работает. Думаю, можно убрать из макроса листы, которые не нужно обрабатывать, потому что итак, ячейка A2 закрашивается по условию: из 2000 листов нужный цвет ячейки имеют не все листы. Поэтому исключения и не требуются. Также, если можно укажите для RGB (0,128,0). Спасибо.
 
JayBhagavan, еще раз попробовал ваш код. Код работает, но если ячейка А2 залита просто заливкой. У меня же не работает, видимо потому что у меня эта ячейка заливается через условное форматирование. Можете с учетом этого изменить код?  
 
JayBhagavan, нет, всё таки не работает как надо.... У меня на листе используется формула поиска данных из массива и когда он начинает переводить в значения, то вносится значение не то что нужно из массива.  
 
Цитата
Sboro написал: укажите для RGB (0,128,0)
Запустите эксель, нажмите Alt+F11, Ctrl+G, введите команду:
Код
?RGB (0,128,0)
результат внесите в соотв. константу.
Цитата
Sboro написал: не работает.
работает.
Цитата
Sboro написал: можно убрать из макроса листы, которые не нужно обрабатывать
Макрос Вам предоставлен - переделывайте его как Вам вздумается.
Цитата
Sboro написал: ячейка заливается через условное форматирование
Пропишите условие в макросе, тогда не нужна привязка к цвету.
Цитата
Sboro написал: не работает как надо.... У меня на листе
Какое ТЗ - такой и результат. Я Ваших листов не видел. Дорабатывать не намерен. Если самостоятельно не разберётесь, то разбейте комплекс вопросов на отдельные темы. Если хотите готовое решение комплексно, то это в разделе "работа" делается. Не претендую.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
JayBhagavan, Спасибо. Всё понял.
 
Цитата
написал:
о разбейте комплекс вопросов на отдельные темы.
Спасибо за подсказку. Так и сделал. Несколько простых макросов решают каждый свою задачу, а затем финальный макрос запускает их по очереди.  :)  
Страницы: 1
Наверх