В файле два листа. Один - старый, другой - свежий. Значимая информация хранится в форме заливки.
Необходимо обновить заливку старого листа на основании заливки свежего. Синхронизировать необходимо только синюю заливку, являющейся свежей информацией. Прим.: диапозоны всегда идентичны по размерам.
Наведите на нужный след: - Какими инструментами в VBA осуществить сопоставление диапозонов? - Каким образом сообщить процедуре диапозоны для синхронизации? Инпутбокс? Что-то иное?
Буду рад, если направите в нужное русло советами и полезными ссылками. Спасибо!
Друзья, здравствуйте.
В файле два листа. Один - старый, другой - свежий. Значимая информация хранится в форме заливки.
Необходимо обновить заливку старого листа на основании заливки свежего. Синхронизировать необходимо только синюю заливку, являющейся свежей информацией. Прим.: диапозоны всегда идентичны по размерам.
Наведите на нужный след: - Какими инструментами в VBA осуществить сопоставление диапозонов? - Каким образом сообщить процедуре диапозоны для синхронизации? Инпутбокс? Что-то иное?
Буду рад, если направите в нужное русло советами и полезными ссылками. Спасибо!mlader
М-м-м... не совсем понятное объяснение. То есть надо значения из листа2, имеющиеся в ячейках с синей заливкой перенести в таблицу на лист1 ? Я правильно понял!?
М-м-м... не совсем понятное объяснение. То есть надо значения из листа2, имеющиеся в ячейках с синей заливкой перенести в таблицу на лист1 ? Я правильно понял!?igrtsk
Инструктор по применению лосей в кавалерийских частях РККА
Необходимо перенести только заливку. Чтобы было понятнее, значения - это по сути денежные суммы, заливка - это статус суммы (ожидается, поступила и т.д.)
Необходимо перенести только заливку. Чтобы было понятнее, значения - это по сути денежные суммы, заливка - это статус суммы (ожидается, поступила и т.д.)mlader
Хм, если надо перенести только цвет заливки, при том, что таблицы по содержанию данных идентичны. То почему бы не воспользоваться инструментом "Формат по образцу" Копируем форматы исходной таблицы/столбца образца на листе2 и переносим на аналогичный диапазон листа1
Хм, если надо перенести только цвет заливки, при том, что таблицы по содержанию данных идентичны. То почему бы не воспользоваться инструментом "Формат по образцу" Копируем форматы исходной таблицы/столбца образца на листе2 и переносим на аналогичный диапазон листа1igrtsk
Инструктор по применению лосей в кавалерийских частях РККА
Сообщение отредактировал igrtsk - Четверг, 13.03.2014, 15:01
Да, по примеру оптимальный ответ один - копировать формат из одного диапазона в второй. Или можно макросом сравнивать суммы и копировать формат ячейки - т.к. сумм всего 2 и они не повторяются. Подозреваю, что рабочий файл будет совсем другой...
Да, по примеру оптимальный ответ один - копировать формат из одного диапазона в второй. Или можно макросом сравнивать суммы и копировать формат ячейки - т.к. сумм всего 2 и они не повторяются. Подозреваю, что рабочий файл будет совсем другой...Hugo
Инструмент с веником, копированием форматов и специальной вставкой не подходит, к сожалению:-) По критерию суммы тоже не подходит. Рабочий файл, как всегда это бывает, большой, суммы многократно повторяются, и нюансов в этом файле целая гора, дело не в секретности, просто сложнее объяснить всё.
Мой ход мысли заключался в следующем: В спинном мозге где-то засело, что ячейки в диапозоне как бы пронумерованы (в диапозоне A1:B2, например, A1 = 1-я ячейка, B1 = 2-я, A2 = 3-я, B2 = 4-я); соответственно, если даипозоны совпадают, то 2-я ячейка первого и второго диапозонов будут совпадать. Вероятно, можно как-то вернуть номер ячейки одного диапозона с синей заливкой (допустим, она вторая) и отформатировать вторую ячейку другого диапозона по образу и подобию. Но непонятно: - Как сообщить процедуре диапозон; - Как вернуть номер ячейки из диапозона; - Как связать два диапозона (хотя это наименее непонятное, если знать ответы на предыдущие вопросы).
В попытках выгуглить нужное иссяк совершенно, не знаю где искать ответ на разгадку...
Инструмент с веником, копированием форматов и специальной вставкой не подходит, к сожалению:-) По критерию суммы тоже не подходит. Рабочий файл, как всегда это бывает, большой, суммы многократно повторяются, и нюансов в этом файле целая гора, дело не в секретности, просто сложнее объяснить всё.
Мой ход мысли заключался в следующем: В спинном мозге где-то засело, что ячейки в диапозоне как бы пронумерованы (в диапозоне A1:B2, например, A1 = 1-я ячейка, B1 = 2-я, A2 = 3-я, B2 = 4-я); соответственно, если даипозоны совпадают, то 2-я ячейка первого и второго диапозонов будут совпадать. Вероятно, можно как-то вернуть номер ячейки одного диапозона с синей заливкой (допустим, она вторая) и отформатировать вторую ячейку другого диапозона по образу и подобию. Но непонятно: - Как сообщить процедуре диапозон; - Как вернуть номер ячейки из диапозона; - Как связать два диапозона (хотя это наименее непонятное, если знать ответы на предыдущие вопросы).
В попытках выгуглить нужное иссяк совершенно, не знаю где искать ответ на разгадку...mlader
Dim rStar As Range 'диапозон из "старого" листа Dim rNov As Range 'диапозон из "свежего" листа Dim r As Integer 'строки Dim c As Integer 'столбцы
r = 1 c = 1
Set rStar = Application.InputBox(prompt:="Укажите диапозон из старого листа ", Type:=8) Set rNov = Application.InputBox(prompt:="Укажите диапозон из свежего листа NB дипозоны должны быть одинаковыми по размеру) ", Type:=8)
'1. Исключаем возможность неправильного выделения диапозонов.
If rStar.Rows.Count <> rNov.Rows.Count Then
MsgBox "Диапозоны не совпадают по размеру. Повторите процедуру." Exit Sub
ElseIf rStar.Columns.Count <> rNov.Columns.Count Then
MsgBox "Диапозоны не совпадают по размеру. Повторите процедуру." Exit Sub
End If
'2. Перекрашиваем суммы в синий цвет.
Do While c < rNov.Columns.Count
If rNov.Cells(r, c).Interior.Color = RGB(0, 176, 240) Then rStar.Cells(r, c).Interior.Color = RGB(0, 176, 240) End If
If r < rNov.Rows.Count Then r = r + 1 Else c = c + 1 r = 1 End If
Loop
'3. Перекрашиваем суммы в желтый цвет. Возвращаем переменным начальные значения.
r = 1 c = 1
Do While c < rNov.Columns.Count
If rNov.Cells(r, c).Interior.Color = RGB(255, 255, 0) Then rStar.Cells(r, c).Interior.Color = RGB(255, 255, 0) End If
If r < rNov.Rows.Count Then r = r + 1 Else c = c + 1 r = 1 End If
Loop
MsgBox "Готово!"
End Sub
[/vba]
Всё оказалось довольно просто.
Основная задача: перенести только нужную заливку из одного листа в другой (в данном случае только синий и желтый).
Файлы практически идентичны, отличие - только в форматировании. Основная идея: выделяются вручную два одинаковых по размеру диапозона из свежего и старого листа и переносится только синяя и желтая заливки. Основная логика синхронизации заливки в этом куске кода:
[vba]
Код
Dim rStar As Range 'диапозон из "старого" листа Dim rNov As Range 'диапозон из "свежего" листа If rNov.Cells(r, c).Interior.Color = RGB(0, 176, 240) Then rStar.Cells(r, c).Interior.Color = RGB(0, 176, 240) End If
[/vba]
Циклом перебирается каждая ячейка в диапозоне из свежего файла и переносится синяя и желтая заливка в ту же ячейку из диапозона старого файла.
Через InputBox указывается нужный диапозон. Очень полезная штука: Set rStar = Application.InputBox(prompt:="Укажите диапозон из старого листа ", Type:=8)
Буду дорабатывать, чтобы вообще ничего не указывать вручную, чтобы диапозоны устанавливались автоматически. Но инуптбокс тайп 8 - крайне полезная весчь сам по себе.
Надеюсь, кому-то может пригодиться.
Решил свою задачу, хочу поделиться её решением.
[vba]
Код
Sub Перекрасить()
On Error Resume Next
Dim rStar As Range 'диапозон из "старого" листа Dim rNov As Range 'диапозон из "свежего" листа Dim r As Integer 'строки Dim c As Integer 'столбцы
r = 1 c = 1
Set rStar = Application.InputBox(prompt:="Укажите диапозон из старого листа ", Type:=8) Set rNov = Application.InputBox(prompt:="Укажите диапозон из свежего листа NB дипозоны должны быть одинаковыми по размеру) ", Type:=8)
'1. Исключаем возможность неправильного выделения диапозонов.
If rStar.Rows.Count <> rNov.Rows.Count Then
MsgBox "Диапозоны не совпадают по размеру. Повторите процедуру." Exit Sub
ElseIf rStar.Columns.Count <> rNov.Columns.Count Then
MsgBox "Диапозоны не совпадают по размеру. Повторите процедуру." Exit Sub
End If
'2. Перекрашиваем суммы в синий цвет.
Do While c < rNov.Columns.Count
If rNov.Cells(r, c).Interior.Color = RGB(0, 176, 240) Then rStar.Cells(r, c).Interior.Color = RGB(0, 176, 240) End If
If r < rNov.Rows.Count Then r = r + 1 Else c = c + 1 r = 1 End If
Loop
'3. Перекрашиваем суммы в желтый цвет. Возвращаем переменным начальные значения.
r = 1 c = 1
Do While c < rNov.Columns.Count
If rNov.Cells(r, c).Interior.Color = RGB(255, 255, 0) Then rStar.Cells(r, c).Interior.Color = RGB(255, 255, 0) End If
If r < rNov.Rows.Count Then r = r + 1 Else c = c + 1 r = 1 End If
Loop
MsgBox "Готово!"
End Sub
[/vba]
Всё оказалось довольно просто.
Основная задача: перенести только нужную заливку из одного листа в другой (в данном случае только синий и желтый).
Файлы практически идентичны, отличие - только в форматировании. Основная идея: выделяются вручную два одинаковых по размеру диапозона из свежего и старого листа и переносится только синяя и желтая заливки. Основная логика синхронизации заливки в этом куске кода:
[vba]
Код
Dim rStar As Range 'диапозон из "старого" листа Dim rNov As Range 'диапозон из "свежего" листа If rNov.Cells(r, c).Interior.Color = RGB(0, 176, 240) Then rStar.Cells(r, c).Interior.Color = RGB(0, 176, 240) End If
[/vba]
Циклом перебирается каждая ячейка в диапозоне из свежего файла и переносится синяя и желтая заливка в ту же ячейку из диапозона старого файла.
Через InputBox указывается нужный диапозон. Очень полезная штука: Set rStar = Application.InputBox(prompt:="Укажите диапозон из старого листа ", Type:=8)
Буду дорабатывать, чтобы вообще ничего не указывать вручную, чтобы диапозоны устанавливались автоматически. Но инуптбокс тайп 8 - крайне полезная весчь сам по себе.