Vba excel скопировать формат ячейки
Как скопировать в Excel только границы выделенного диапазона?
При использовании Microsoft Excel легко копировать только значения ячеек, форматирование ячеек, формулы ячеек и т. Д. Из диапазона с помощью специальной функции «Вставить». Но пробовали ли вы когда-нибудь скопировать только стиль границы из диапазона в Excel? В этой статье будет показан метод копирования только границ выделенного диапазона в новый диапазон в Excel.
Копировать только границы выделенного диапазона с кодом VBA
Удивительный! Использование эффективных вкладок в Excel, таких как Chrome, Firefox и Safari!
Экономьте 50% своего времени и сокращайте тысячи щелчков мышью каждый день!
Следующий код VBA может помочь вам скопировать только стиль границы выбранных ячеек, а затем применить этот стиль границы к новому диапазону в Excel. Пожалуйста, сделайте следующее.
1. нажмите другой + F11 , чтобы открыть Microsoft Visual Basic для приложений окно.
2. в Microsoft Visual Basic для приложений окна, нажмите Вставить > Модули, а затем скопируйте и вставьте приведенный ниже код VBA в окно кода.
Код VBA: копировать только границы выбранного диапазона в Excel
3. нажмите F5 ключ для запуска кода. При первом появлении Kutools for Excel диалоговом окне выберите диапазон с границами, которые необходимо скопировать, а затем щелкните OK кнопку.
4. В секунду Kutools for Excel диалоговом окне выберите ячейку для применения скопированной границы, затем щелкните OK кнопка. Смотрите скриншот:
Затем вы можете видеть, что только стиль границы выбранного диапазона копируется и применяется к новому диапазону, как показано ниже.
Данные копируются и даже некоторые параметры формата тоже, но размер шрифта, размер ячеек, подгонка изображения под ячейку. Я так понял, что надо отдельно работать с картинками, выставляя их размеры. Собственно, подскажите, какие объекты, свойства и методы искать\смотреть? Не могу найти как обращаться к картинкам.
Копирование диапазона ячеек с гиперссылками
Добрый вечер! Подскажите, пожалуйста, как скопировать из одного документа excel в другой диапазон.
Копирование значений диапазона ячеек
Здравствуйте! у меня есть код, который копирует ячейки с листа1 на лист2.
Копирование диапазона ячеек с гиперссылками
Всем привет! Очень нужна помощь, сам не разобрался, хотя уже второй день сижу. Есть следующий.
Решение
Pantheonptz, Просто для копирования блока с листа 2 на лист 1 можно использовать такой более простой, как мне кажется, Саб. Здесь, правда без шрифтов, но это можно добавить. Это лишь для примера. На листе 2 выделяется блок ячеек, а на листе ячейка для копирования
А теперь главное. Недавно закончил программу, аналогичную вашей, только посложнее, и тоже с картинками
Могу поделиться с некоторыми наработками и подводными камнями.
1. Если вы хотите выделять не смежные диапазоны и обрабатывать при помощи SelectionChange, то не получится. Этот метод прореагирует на первое выделение сразу, даже при нажатой клавише CTRL.
2. Если предполагаете удалять строки в листе, то в первую очередь надо удалить картику, а потом строку. Для удаления картинки у меня работает такой саб
3. Чтобы добавлять не смежные данные на листе с которого копируется я не выделяю строки, а ставлю в первом столбце признак копирования как в CheckBj[ (шрифт Marlett, буква а-латинская). Сначала на листе для копирования вставляется пустая строка, а потом копируются скопированные ячейки (у меня со второй, т,к, в первом столбце признак добавления)
Ниже вырезка САБа для вставки. Столбцы на листе приёма лучше сразу выставить нужной ширины. Я даже сделал незаполненный шаблон и при формировании нового листа приёма просто копирую строки с него. У меня на листе шаблона есть ещё и раделы, поэтоиу лучше его иметь. да и при порче листа приёма есть откуда взять.
Ну пока хватит, а то и так длинное послание. Можете, при необходимости, общаться и через личное послание или через мэйл, чтобы не загружать публику.
Задача: собрать с нескольких листов таблицы с форматированием и поместить на один лист.
В силу сложившихся ограничений нельзя (крайне нежелательно) пользоваться стандартными .Cut и .Copy методами. (буфер обмена Windows используется для вставки таблиц из некой древней БД на листы Excel).
Начал решать следующим образом:
1) Перенос значений ячеек понятно:
Копирование: tmpArr = Range().Value
Вставка: Range().Value = tmpArr
"Грабля 0" - если Range().Cells.Count = 1, то tmpArr не массив, а значение этой ячейки. (см. функцию getProperValArray во вложении)
2) Перенос форматов ячеек чуть сложнее:
а) задаётся область
б) запоминается формат первой ячейки из области
в) в указанной области ищутся ячейки такого же формата (через Application.FindFormat с помощью допиленной FindAll от ChipPearson)
г) запоминаются адреса схожих ячеек и их формат, всё записывается в коллекцию (один формат - одна запись)
д) из первоначальной области вычитаются ячейки с найденным форматом (функция InvertSelection + Intersect)
е) поиск продолжается с первой ячейки оставшегося (усечённого диапазона).
В принципе работает, и приемлемо по скорости. Можно даже улучшить, не спорю.
Наступил на "граблю 1".
Если в ячейке содержится несколько символов другого цвета (например: "впв пв апвп"), то свойство такой ячейки Cells().Font.Color = Null (!). "Грабля 1" в том, что Range.Find находит такую ячейку по формату, как будто она не имеет разноцветных букв (т.е. находит как Cells().Font.Color = RGB(0, 0, 0)).
То же самое касается свойств .Italic, .Bold, .Underline и т.д. заданных для отдельных символов.
Во вложении пример переноса данных. Нажимать кнопку для демонстрации. Ячейки B7, B11, B12, и B21 перенесены некорректно.
Вопрос: (ещё раз см. задачу)
1) Можно ли обойти эту "граблю 1"? Может кто-то уже решал подобную задачу.
2) Можно ли как-то иначе решить задачу - перенести формат (сохранить и вставить)? CopyMemory не поможет?
3) Есть ли методы для массового сохранения форматов ячеек, аналогичные Range().Value?
P.S.
1) Есть идея думать в направлении пользовательских буферов обмена и использовать их для переноса данных.
2) StepInLik предложил а) сохранить текущее значение буфера обмена, б) использовать стандартный механизм Copy-Paste и в) восстановить значение буфера обмена.
Now this second method is much faster, avoiding copying to clipboard and pasting again. However it does not copy across the formatting as the first method does. The Second version is almost instant to copy 500 lines, while the first method adds about 5 seconds to the time. And the final version could be upwards of 5000 cells.
So my question can the second line be altered to included the cell formatting (mainly font colour) while still staying fast.
Ideally I would like to be able to copy the cell values to a array/list along with the font formatting so I can do further sorting and operations on them before I "paste" them back on to the worksheet..
So my ideal solution would be some thing like
Answer*
Just to see how my origianl method and new method compar, here are the results or before and after
New code = 65msec
Old code = 1296msec
5 Answers 5
You could have simply used Range("x1").value(11) something like below:
range has default property "Value" plus value can have 3 optional orguments 10,11,12. 11 is what you need to tansfer both value and formats. It doesn't use clipboard so it is faster.- Durgesh
@durgesch This is really useful, but is there also a numeric value which will transpose my data as well as maintain the format?
@DaSpotz wrap the second half of the statement in Application.WorksheetFunction.Transpose() . Bear in mind you will also need to transpose the address of your target range.
For me, you can't. But if that suits your needs, you could have speed and formatting by copying the whole range at once, instead of looping:
And, by the way, you can build a custom range string, like Range("B2:B4, B6, B11:B18")
edit: if your source is "sparse", can't you just format the destination at once when the copy is finished ?
Although I could calculate the range the cells I am copying from are not in a range. The code searches multiply sheets for a given criteria, if it finds a row that meets the criteria it copies a specific cell from that row to the output sheet. So while the out put row will incress each loop by 1. the value for sheets_ and the input row will be random, and as said there will be thousands. And yes a database would possible be the way to go, but not possible at the moment.
I will try that seems a good possibility. the other alternative is to copy them in to an array and check font colour and copy in to second element. Having them in an array would allow me to carry out some other stuff.
I found another way to do this using the "Font.ColorIndex" property of range. so .range("A2").Font.ColorIndex = .range("A6").Font.ColorIndex. give a very fast result. It also means I can if i want copy both he text and font colour to varibles such as an arrey/list if I want.
Remember that when you write:
you are really writing
You can also use names:
But Value is not the only property of Range. I have used:
would work but I would expect
I do not know what formats you want to copy so you will have to try.
However, I must add that when you copy and paste a large range, it is not as much slower than doing it via an array as we all thought.
Post Edit information
Having posted the above I tried by own advice. My experiments with copying Font.Color and Font.Bold to an array have failed.
Of the following statements, the second would fail with a type mismatch:
ValueArray must be of type variant. I tried both variant and long for ColourArray without success.
I filled ColourArray with values and tried the following statement:
The entire range would be coloured according to the first element of ColourArray and then Excel looped consuming about 45% of the processor time until I terminated it with the Task Manager.
There is a time penalty associated with switching between worksheets but recent questions about macro duration have caused everyone to review our belief that working via arrays was substantially quicker.
I constructed an experiment that broadly reflects your requirement. I filled worksheet Time1 with 5000 rows of 20 cells which were selectively formatted as: bold, italic, underline, subscript, bordered, red, green, blue, brown, yellow and gray-80%.
With version 1, I copied every 7th cells from worksheet "Time1" to worksheet "Time2" using copy.
With version 2, I copied every 7th cells from worksheet "Time1" to worksheet "Time2" by copying the value and the colour via an array.
With version 3, I copied every 7th cells from worksheet "Time1" to worksheet "Time2" by copying the formula and the colour via an array.
Version 1 took an average of 12.43 seconds, version 2 took an average of 1.47 seconds while version 3 took an average of 1.83 seconds. Version 1 copied formulae and all formatting, version 2 copied values and colour while version 3 copied formulae and colour. With versions 1 and 2 you could add bold and italic, say, and still have some time in hand. However, I am not sure it would be worth the bother given that copying 21,300 values only takes 12 seconds.
** Code for Version 1**
I do not think this code includes anything that needs an explanation. Respond with a comment if I am wrong and I will fix.
** Code for Versions 2 and 3**
The User type definition must be placed before any subroutine in the module. The code works through the source worksheet copying values or formulae and colours to the next element of the array. Once selection has been completed, it copies the collected information to the destination worksheet. This avoids switching between worksheets more than is essential.
Как в Excel скопировать только форматирование из одного диапазона в другой?
Если вы хотите скопировать только форматирование ячейки из диапазона, как это сделать быстро? В этом руководстве представлены быстрые сокращения, позволяющие легко копировать только форматирование.
Копировать форматирование только с помощью Kutools for Excel
Копирование форматирования только с помощью Format Painter в Excel
В Excel вы можете копировать форматирование ячеек только с помощью Формат Painter инструмент.
1. Выберите диапазон, содержащий формат ячеек, который вы хотите скопировать. Смотрите скриншот:
2. Применение Формат Painter щелкнув его под Главная вкладку, см. снимок экрана:
3. Выберите пустую ячейку и щелкните по ней, будет вставлено только форматирование ячеек. Смотрите скриншот:
Внимание: Формат Painter также можно копировать форматирование только на другой лист.
Копировать форматирование только с помощью VBA
Следующие макросы также могут помочь вам скопировать только форматирование ячеек.
1. Держать ALT и нажмите F11 на клавиатуре, чтобы открыть Microsoft Visual Basic для приложений окно.
2. Нажмите Вставить > Модули, и скопируйте VBA в модуль.
VBA: копировать только форматирование ячеек:
3. Нажмите Run или нажмите F5 для запуска VBA. На экране отображается диалоговое окно, и вы должны выбрать ячейки, форматирование которых вы хотите скопировать. Смотрите скриншот:
4. Нажмите Ok и другое диалоговое окно отображается для вас, чтобы выбрать ячейку для вставки форматирования. Смотрите скриншот:
6. Нажмите Ok, то форматирование ячеек вставляется в выбранную ячейку. Смотрите скриншот:
Внимание: С помощью этого кода VBA вы можете вставлять только форматирование в другие рабочие листы, которые вы хотите.
Копировать форматирование только с помощью Kutools for Excel
Есть Kutools for Excel установлен, Копировать диапазоны Функция может помочь вам быстро и легко скопировать только форматирование ячеек.
Пожалуйста, примените Копировать диапазоны функция, нажав Кутулс > Копировать диапазоны. Смотрите скриншот:
1. Выделите ячейки, форматирование которых вы хотите скопировать.
2. Нажмите Кутулс > Копировать диапазонs, на экране появится диалог, отметьте Форматы вариант под Специальная вставка, см. снимок экрана:
3. И нажмите ОК. Другой диалог отображается для вас, чтобы выбрать ячейку для вставки результата. Смотрите скриншот:
4. Нажмите Ok, и в выбранную ячейку вставляется только форматирование. Смотрите скриншот:
Внимание: Вы также можете копировать и вставлять форматирование ячеек между двумя электронными таблицами. Если вы хотите скопировать высоту строки и ширину столбца, вы можете проверить Включая высоту строки и Включая ширину столбца коробка в Копировать несколько диапазонов Диалог.
Работы С Нами Kutools for Excel' Копировать диапазоны, вы также можете копировать только значения, формулы или комментарии.
Копировать форматирование только из диапазона
Наконечник.Если вы хотите подсчитать или суммировать ячейки на основе цветов, попробуйте использовать Kutools for Excel's Считать по цвету как показано на следующем снимке экрана. Полная функция без ограничений в течение 30 дней, пожалуйста, скачайте и получите бесплатную пробную версию сейчас.
Читайте также: