Здравствуйте! Я "обычный пользователь", и кодить не умею ни на чем, но вот возникла такая необходимость: есть документ, в котором ряд ячеек "сдублированы" с соседних (например, в ячейке A2 стоит "=A1") и задан цвет текста "новой" ячейки (A2). В исходной ячейке - ссылка на другой лист или вообще другой документ. Задача: заменить все формулы в "новых" ячейках (с красным текстом) - на значения. Если кому не в лом - помогите, пожалуйста. Вот я нашел, например такой макрос:
Sub bb() Dim a As Range For Each a In Intersect(Selection, ActiveSheet.UsedRange).Areas a.Value = a.Value Next End Sub
Можно ли к нему добавить условие для проверки цвета текста ячейки?
Собственных "знаний" хватит только на то, чтобы сохранить и запустить готовый макрос(( [moder]Ну хоть на прочтение Правил форума хватит еще сил-то?
Здравствуйте! Я "обычный пользователь", и кодить не умею ни на чем, но вот возникла такая необходимость: есть документ, в котором ряд ячеек "сдублированы" с соседних (например, в ячейке A2 стоит "=A1") и задан цвет текста "новой" ячейки (A2). В исходной ячейке - ссылка на другой лист или вообще другой документ. Задача: заменить все формулы в "новых" ячейках (с красным текстом) - на значения. Если кому не в лом - помогите, пожалуйста. Вот я нашел, например такой макрос:
Sub bb() Dim a As Range For Each a In Intersect(Selection, ActiveSheet.UsedRange).Areas a.Value = a.Value Next End Sub
Можно ли к нему добавить условие для проверки цвета текста ячейки?
Собственных "знаний" хватит только на то, чтобы сохранить и запустить готовый макрос(( [moder]Ну хоть на прочтение Правил форума хватит еще сил-то?Nowhere_Man_1983
Извините, я не выложил файл-пример,да? Сейчас прикрепил кусок, но он отличается от моего файла тем, что в "исходных" (черных) ячейках обычный текст вместо ссылки на внешний источник. Поэтому мне нужно как-то вставить значения не всех формул, а именно из ячеек, текст в которых красный...
Извините, я не выложил файл-пример,да? Сейчас прикрепил кусок, но он отличается от моего файла тем, что в "исходных" (черных) ячейках обычный текст вместо ссылки на внешний источник. Поэтому мне нужно как-то вставить значения не всех формул, а именно из ячеек, текст в которых красный...Nowhere_Man_1983
Есть ли какой-нибудь способ изменить замечательный макрос из сообщения №3 выше таким образом, чтобы он обрабатывал 1) нескольких листов сразу/все листы открытой книги 2) область печати? Т.е. раньше у меня все было на одном листе (под 20 000 строк), я прекрасно выделял нужную область и запускал макрос, а теперь эти документы разбили на стотыщмильёонов листов, и сразу стало не очень весело(( Было бы невероятно круто просто открыть документ и запустить макрос.
Sub tt() For i = 1 To Selection.Count If Selection(i).Font.ColorIndex = 3 Then Selection(i) = Selection(i).Value Next i End Sub
Спасибо.
Еще раз всем здравствуйте!
Есть ли какой-нибудь способ изменить замечательный макрос из сообщения №3 выше таким образом, чтобы он обрабатывал 1) нескольких листов сразу/все листы открытой книги 2) область печати? Т.е. раньше у меня все было на одном листе (под 20 000 строк), я прекрасно выделял нужную область и запускал макрос, а теперь эти документы разбили на стотыщмильёонов листов, и сразу стало не очень весело(( Было бы невероятно круто просто открыть документ и запустить макрос.
чтобы он обрабатывал 1) нескольких листов сразу/все листы открытой книги
Случай 1), все листы: [vba]
Код
Sub convertAllFormulaToValue() Dim wks As Worksheet Dim cell As Range On Error Resume Next 'на случай, если на каких-то листах формул не будет For Each wks In ThisWorkbook.Worksheets For Each cell In wks.Cells.SpecialCells(xlCellTypeFormulas) If cell.Font.ColorIndex = 3 Then cell.Value = cell.Value Next cell Next wks End Sub
[/vba]
P.S. Всеобъемлющий случай: [vba]
Код
Sub convertAllFormulaToValue2() Dim wks As Worksheet Dim rng As Range Dim rng1 As Range Dim rng2 As Range Dim cell As Range
For Each wks In ThisWorkbook.Worksheets On Error Resume Next Set rng1 = wks.Cells.SpecialCells(xlCellTypeFormulas) Set rng2 = wks.Range("Область_печати") On Error GoTo 0
If Not rng1 Is Nothing And Not rng2 Is Nothing Then Set rng = Union(rng1, rng2) ElseIf Not rng1 Is Nothing Then Set rng = rng1 ElseIf Not rng2 Is Nothing Then Set rng = rng2 Else Set rng = Nothing End If
If Not rng Is Nothing Then For Each cell In rng If cell.Font.ColorIndex = 3 Then cell.Value = cell.Value Next cell End If Next wks End Sub
чтобы он обрабатывал 1) нескольких листов сразу/все листы открытой книги
Случай 1), все листы: [vba]
Код
Sub convertAllFormulaToValue() Dim wks As Worksheet Dim cell As Range On Error Resume Next 'на случай, если на каких-то листах формул не будет For Each wks In ThisWorkbook.Worksheets For Each cell In wks.Cells.SpecialCells(xlCellTypeFormulas) If cell.Font.ColorIndex = 3 Then cell.Value = cell.Value Next cell Next wks End Sub
[/vba]
P.S. Всеобъемлющий случай: [vba]
Код
Sub convertAllFormulaToValue2() Dim wks As Worksheet Dim rng As Range Dim rng1 As Range Dim rng2 As Range Dim cell As Range
For Each wks In ThisWorkbook.Worksheets On Error Resume Next Set rng1 = wks.Cells.SpecialCells(xlCellTypeFormulas) Set rng2 = wks.Range("Область_печати") On Error GoTo 0
If Not rng1 Is Nothing And Not rng2 Is Nothing Then Set rng = Union(rng1, rng2) ElseIf Not rng1 Is Nothing Then Set rng = rng1 ElseIf Not rng2 Is Nothing Then Set rng = rng2 Else Set rng = Nothing End If
If Not rng Is Nothing Then For Each cell In rng If cell.Font.ColorIndex = 3 Then cell.Value = cell.Value Next cell End If Next wks End Sub
Макрос должен находиться в модуле книги, которую он обрабатывает. Это так? Это условие выполняется? Макросы разрешены? Возможно, открыты какие-то другие файлы и фокус находится на них...
P.S. Проверил на файле из первого сообщения темы - всё чётко, формулы красных ячеек превращаются в значения.
Макрос должен находиться в модуле книги, которую он обрабатывает. Это так? Это условие выполняется? Макросы разрешены? Возможно, открыты какие-то другие файлы и фокус находится на них...
P.S. Проверил на файле из первого сообщения темы - всё чётко, формулы красных ячеек превращаются в значения.Gustav
Я понимаю, что уже задолбал, но вдруг еще кто-нибудь поможет(( В общем, ситуация усложнилась тем, что пропал маркер, на котором завязаны макросы - цвет текста. Поэтому новая задача будет сформулирована так:
УСЛОВИЕ: Есть документ, в котором в ряде ячеек стоят формулы, ссылающиеся на вышестоящую ячейку (например, в ячейке A2 прописано "=A1", в ячейке B4 прописано "=B3") ЗАДАЧА: заменить формулы на значения во всех ячейках, в которых идет ссылка на вышестоящую ячейку, т.е. что-то типа (предположим, что XY - любая ячейка, X-буква, Y-цифра):
"Если ячейка XY содержит ссылку на ячейку X[Y-1] , то заменить формулу в ячейке XY на возвращаемое значение"
Для примера можно взять файл, приложенный к первому сообщению
Ну вдруг кому-то будет нечего делать... А я пока пошел читать "VBA для чайников"
Добрый вечер всем присутствующим!
Я понимаю, что уже задолбал, но вдруг еще кто-нибудь поможет(( В общем, ситуация усложнилась тем, что пропал маркер, на котором завязаны макросы - цвет текста. Поэтому новая задача будет сформулирована так:
УСЛОВИЕ: Есть документ, в котором в ряде ячеек стоят формулы, ссылающиеся на вышестоящую ячейку (например, в ячейке A2 прописано "=A1", в ячейке B4 прописано "=B3") ЗАДАЧА: заменить формулы на значения во всех ячейках, в которых идет ссылка на вышестоящую ячейку, т.е. что-то типа (предположим, что XY - любая ячейка, X-буква, Y-цифра):
"Если ячейка XY содержит ссылку на ячейку X[Y-1] , то заменить формулу в ячейке XY на возвращаемое значение"
Для примера можно взять файл, приложенный к первому сообщению
Ну вдруг кому-то будет нечего делать... А я пока пошел читать "VBA для чайников" Nowhere_Man_1983