Здравствуйте, уважаемые форумчане! Помогите, пожалуйста, написать макрос. Суть такая: Пример прилагаю. Там на листе1 выборка исходных данных, а на листе2 то, что должно получиться после работы макроса. Прикрепленные файлы
|
|
Ігор Гончаренко Пользователь Сообщений: 13746 |
#2 21.05.2017 18:59:21
Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете! |
||
flashertheone Пользователь Сообщений: 104 |
#3 21.05.2017 19:04:16
Этот макрос все же удаляет пустые строки, а нужно, чтобы не удалял, а сдвигал значения из последующей строки на пустую (если такое возможно). Грубо говоря, чтобы между первой и последней строчкой таблицы не было пустых строк. Ну а в целом, если не получится осуществить задуманное, возьму Ваш макрос, спасибо. Изменено: flashertheone — 21.05.2017 19:06:21 |
||
Ігор Гончаренко Пользователь Сообщений: 13746 |
#4 21.05.2017 19:21:16 добавим пару строк:
Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете! |
||
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
#5 21.05.2017 19:29:29
Если в итоге эта строка удаляется, то зачем нужна её предварительная очистка? |
||
flashertheone Пользователь Сообщений: 104 |
#6 21.05.2017 19:39:16 Ігор Гончаренко
Почти то, что надо, но, похоже, придется добавить еще пару строк))) Юрий М Вы выдернули из контекста отрывок, не дочитав до конца =)
|
||
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
#7 21.05.2017 19:45:21 Нет, я дочитал ))
Вот это никак не могу понять: строка или удаляется совсем (тогда не нужна очистка), или не удаляется ) |
||
Ігор Гончаренко Пользователь Сообщений: 13746 |
#8 21.05.2017 19:47:35 3-й вариант… зачетный
Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете! |
||
Юрий М
Строка не удаляется. |
|
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
#10 21.05.2017 19:52:12
В примере есть две строки с жёлтыми ячейками. Это ДО. А КАК должно получится ПОСЛЕ? |
||
flashertheone Пользователь Сообщений: 104 |
#11 21.05.2017 19:54:38
Эффект тот же, что и от второго варианта, не скрывает лишние строки… |
||
flashertheone
, Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете! |
|
Ігор Гончаренко
Исходный файл или пример, который я прикрепил? |
|
Ігор Гончаренко Пользователь Сообщений: 13746 |
#14 21.05.2017 20:14:59
Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете! |
||
flashertheone Пользователь Сообщений: 104 |
#15 21.05.2017 20:24:40
У меня не видна, и не должна быть видна. Может, не тот файл прикрепил. Прикрепляю еще раз… Прикрепленные файлы
|
||
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
#16 21.05.2017 20:55:04 Может циклом? Обрамление ячеек можно потом добавить на весь диапазон.
|
||
flashertheone Пользователь Сообщений: 104 |
#17 21.05.2017 21:02:19
Это в примере лишь обрамление, а в исходной таблице немного другая стилистика, там некоторые ячейки и цветами закрашены =) |
||
Юрий М
Прикрепил пример с нужным оформлением. Как и в тот раз, на листе 1 — исходные данные, на листе 2 — что должно получиться после выполнения макроса. Изменено: flashertheone — 22.05.2017 00:45:51 |
|
JeyCi Пользователь Сообщений: 3357 |
#19 22.05.2017 08:47:29
а цвет — это не оформление? Юрий М — Autofill (можно прямо из Справки F1 со своими диапазонами)
Изменено: JeyCi — 22.05.2017 08:48:02 чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок — обратитесь к собеседнику на ВЫ — ответ на ваш вопрос получите — а остальное вас не касается (п.п.п. на форумах) |
||||
JeyCi
, спасибо, это работает, но я только сейчас заметил, что этот макрос не удаляет последнюю строку. Вот попробуйте в файле с примером удалить из последней заполненной строки (№10) значение из любой ячейки, а затем активировать макрос . Он не удалит эту строку =( |
|
flashertheone Пользователь Сообщений: 104 |
#21 22.05.2017 13:00:37 Я макрорекордером сам немного допилил макрос от Ігор Гончаренко из поста №4. Совсем уж дилетантский макрос получился или норм?) Работает, в принципе, как надо…
|
||
JayBhagavan Пользователь Сообщений: 11833 ПОЛ: МУЖСКОЙ | Win10x64, MSO2019x64 |
SELECT И ACTIVATE — ЗАЧЕМ НУЖНЫ И НУЖНЫ ЛИ? <#0> |
flashertheone Пользователь Сообщений: 104 |
#23 22.05.2017 14:42:12 JayBhagavan, прочитал, буду стараться внедрять) В общем, оказалось, что макрос от Ігор Гончаренко работает не совсем верно. При применении его в исходном файле получилась следующая ситуация:
P.S. надо было в примере какие-нибудь связи между листами изобразить, а то подумал, что это не так уж важно, а оказалось в итоге, что сам запутался и других запутал) |
||
flashertheone Пользователь Сообщений: 104 |
#24 22.05.2017 19:42:17 Или этот попробовать макрос доработать…
.Delete тут не подходит. Можно, например оставить этот кусок кода
Этот макрос будет очищать строки, если хотя бы одна из ячеек строки в указанном диапазоне пустая. Это то, что надо. Но как сделать так, чтобы пустых строк НЕ БЫЛО между заполненными строками? Без .Delete. Приложу скриншоты для «понятности», а то слов много, а на примере очень легко осознать, какого именно результата нужно добиться) Прикрепленные файлы
Изменено: flashertheone — 22.05.2017 19:44:06 |
||||
5 / 5 / 0 Регистрация: 02.01.2017 Сообщений: 164 |
|
1 |
|
Нужен макрос для удаления значений в ячейках по условию02.03.2017, 22:57. Показов 26112. Ответов 9
Ребята каким можно макросом удалять значения определённых ячеек .Задача макроса ,в ячейках в каждой из строк начиная с 28 строки столбца I ,промониторить выполняется ли условия чтобы если в ячейке значение меньше 2,00 то в этой строке будут стерты значения в ячейках C28 D28 E28 M28 N28 O28 P28 и так по всем ниже расположенным строкам без ограничения.Если условие в строке выполняется то значения в ячейках столбцов C,D,E,M,N,O,P это же строки будут удалены.Значения во всех этих ячейках введены используя выпадающий список.
0 |
smeckoi77 61 / 60 / 16 Регистрация: 13.02.2017 Сообщений: 172 |
||||
03.03.2017, 00:47 |
2 |
|||
Решение
1 |
5 / 5 / 0 Регистрация: 02.01.2017 Сообщений: 164 |
|
03.03.2017, 03:03 [ТС] |
3 |
А можно пожалуйста ещё одно условие добавить в этот макрос ,к тому что в «A» ячейка < 2 .и ещё если в столбце «H» этой же строки ячейка имеет значение текст «ДА» то ‘макрос срабатывает на удаление значений в ячейках столбцов C,D,E,M,N,O,P.
0 |
k61 85 / 82 / 31 Регистрация: 13.10.2014 Сообщений: 167 |
||||
03.03.2017, 05:46 |
4 |
|||
Решение
1 |
Aleks 1978 5 / 5 / 0 Регистрация: 02.01.2017 Сообщений: 164 |
||||
03.03.2017, 06:20 [ТС] |
5 |
|||
А как можно вот этот вариант кода с одним условием,закрепив его выполнение за кнопкой на Листе 9 ,чтобы он смог сделать свои вычисления с данными находящимися на Листе3 ?
0 |
smeckoi77 61 / 60 / 16 Регистрация: 13.02.2017 Сообщений: 172 |
||||||||
03.03.2017, 08:22 |
6 |
|||||||
РешениеПеред словом Range везде дописать Sheets(«Лист3»).
Добавлено через 3 минуты
1 |
Vlad999 3827 / 2254 / 751 Регистрация: 02.11.2012 Сообщений: 5,930 |
||||
03.03.2017, 09:35 |
7 |
|||
Решение
1 |
Aleks 1978 5 / 5 / 0 Регистрация: 02.01.2017 Сообщений: 164 |
||||||||
05.03.2017, 20:36 [ТС] |
8 |
|||||||
Добавил в макрос второе условие,которые будут в столбце A отбирать на удаление только значения меньше 1,50 и больше 1,70.Вопрос в чём ошибка строки в коде? а то макрос не работает.
0 |
smeckoi77 61 / 60 / 16 Регистрация: 13.02.2017 Сообщений: 172 |
||||
05.03.2017, 20:45 |
9 |
|||
Число не может быть меньше 1,5 и больше 1,7 одновременно. Добавлено через 4 минуты Добавлено через 40 секунд
1 |
5 / 5 / 0 Регистрация: 02.01.2017 Сообщений: 164 |
|
05.03.2017, 21:28 [ТС] |
10 |
Благодарю за помощь!Работает теперь
0 |
Уважаемые пользователи! Помогите, пожалуйста, создать два макроса, один из которых удалял бы значение из последней заполненной ячейки столбца, другой — из диапазона ячеек, границы которого буду указывать я. Большое спасибо!
Пожалуйста, не игнорируйте мою просьбу!
Цитата: lovko от 28.03.2013, 15:20
Пожалуйста, не игнорируйте мою просьбу!
lovko, без паники! Еще никто не успел посмотреть Ваш файл, а Вы уже пожар устраиваете. Люди на работе, надо понимать.
Sub www(): [Ввод_инф!a65536].End(xlUp).ClearContents: End Sub
Sub www1(): Sheets("Лист3").Range([Старотовая!E14]).ClearContents: End Sub
Я, как всегда, чертовски адекватен… Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771
Большое спасибо! Макросы работают. Вы мне очень помогли!
Метод Range.Clear для полной очистки диапазона ячеек из кода VBA Excel. Методы очистки отдельных свойств и их групп в ячейках. Примеры использования.
Методы очистки ячеек
Метод | Очищаемые свойства | Примечание |
---|---|---|
Range.Clear | Почти все свойства | Ширина и высота ячеек не изменяются |
Range.ClearComments | Комментарии | Для Excel в составе Office 365 |
Range.ClearContents | Формулы и значения | Исходное форматирование сохраняется |
Range.ClearFormats | Свойства, задающие форматы | В том числе отмена объединения ячеек |
Range.ClearHyperlinks | Гиперссылки | Текст и форматирование сохраняются |
Range.ClearNotes | Примечания и заметки | Примечания – для локальных программ Excel, заметки – для Excel в составе Office 365 |
Range.ClearOutline | Структура данных | Смотрите, что такое структурирование данных |
Range – выражение, возвращающее диапазон ячеек.
Примеры использования
1. Удаление гиперссылки из ячейки A1
Cells(1, 1).ClearHyperlinks
2. Очистка диапазона A1:L50 от формул и значений
Range("A1:L50").ClearContents
3. Очистка всех свойств ячеек в столбцах A:K
Columns("A:K").Clear
4. Очистка форматирования ячеек в строках 1:20
Rows("1:20").ClearFormats
Методы очистки диапазонов ячеек в VBA Excel возвращают очищаемые свойства ячеек к значениям по умолчанию. К таким, как на вновь созданном стандартном рабочем листе. При любых методах очистки высота строк и ширина столбцов не изменяются.
Фразы для контекстного поиска: очистка ячеек, очистка ячейки, очистка формул, очистка от формул, удаление формул, очистка значений, удаление значений, очистка форматов, удаление форматирования, удаление форматов.
Макрос удаления значений из диапазона по вводу списка |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
I am trying to create an Excel VBA that would delete only a specific part of the cell in only one column.
In Column A, I have a directory values:
For example:
Directoryof K:dataAdmin
What I would like to do is remove the «Directoryof
» from all the cells in column A and leave only the remaining text that follows it.
asked Jul 28, 2015 at 16:44
To create a macro to perform the above follow the below steps:
- Click the «Developer» tab on the top menu.
- You will find an option «Record Macro».
-
Click the Record Macro ->
a. A dialog box appears, give your macro a name
b. Shortcut key (if you want) can give by pressing (shift and any key such as
letters)
c. Store macro in : This workbook (this allows your macro to run on this sheet). -
Click on «Use Relative References».
-
Once you are done, just perform the delete operation ( by removing the portion you do not want) on one of the column so that the macro may record the process which you are performing.
-
Once done, below at the lowest pane you will find Stop Macro option (a small blue square box). Click it to stop the recording of the macro.
-
Now you are ready with a macro to replicate the same without you performing the operation.
-
Just goto any other column where you want to perform the operation and click on «Macro» option on the developer tab and then click on your created marco, and you will see the magic happen.
answered Jul 28, 2015 at 17:24
You could probably use regex to accomplish what you are going for. Regular Expressions are often used for finding patterns. If all of your follows the same format, you could break your strings apart into two capture groups with something like:
(.+)([A-Z]:\.+)
https://regex101.com/r/uD4uJ0/2 <— this will show you your capture groups
Edit: I updated this link, sorry, originally had the wrong one.
This here How to use Regular Expressions (Regex) in Microsoft Excel both in-cell and loops will show you how to split up capture groups if you are interested.
answered Jul 28, 2015 at 17:02
Scott TScott T
2332 gold badges5 silver badges14 bronze badges
You could use something like text to columns, fixed width, and split the columns after Directoryof and then copy/paste the values back into column A.
I’m not sure if there’s a method to do this without a helper column without VBA. If you can afford to use a second column, you can also use =LEFT(Cell, # of characters)
assuming that the part you want to strip off is always «Directoryof» and then copy/paste values back into column A.
shA.t
16.4k5 gold badges53 silver badges111 bronze badges
answered Jul 28, 2015 at 16:58
KFichterKFichter
7534 silver badges15 bronze badges
макрос удалит на листе все строки, в которых содержится искомый текст:
(пример — во вложении ConditionalRowsDeleting.xls)
Sub УдалениеСтрокПоУсловию() Dim ra As Range, delra As Range, ТекстДляПоиска As String Application.ScreenUpdating = False ' отключаем обновление экрана ТекстДляПоиска = "Наименование ценности" ' удаляем строки с таким текстом ' перебираем все строки в используемом диапазоне листа For Each ra In ActiveSheet.UsedRange.Rows ' если в строке найден искомый текст If Not ra.Find(ТекстДляПоиска, , xlValues, xlPart) Is Nothing Then ' добавляем строку в диапазон для удаления If delra Is Nothing Then Set delra = ra Else Set delra = Union(delra, ra) End If Next ' если подходящие строки найдены - удаляем их If Not delra Is Nothing Then delra.EntireRow.Delete End Sub
Чтобы вместо удаления просто скрыть такие строки, замените строку
If Not delra Is Nothing Then delra.EntireRow.Delete
на
If Not delra Is Nothing Then delra.EntireRow.Hidden=TRUE
Расширенная версия этого макроса — с использованием UserForm для ввода искомого значения
Function ПоискСтрокПоУсловию(ByVal ТекстДляПоиска As String, Optional HideOnly As Boolean) As Long ' функция получает в качестве параметра ТекстДляПоиска (можно использовать символы * и ?) ' Если HideOnly = TRUE, то строки, содержащие в ячейках ТекстДляПоиска, скрываются, ' иначе (HideOnly = FALSE - по умолчанию) - удаляются ' Функция возвращает количество удалённых строк Dim ra As Range, delra As Range Application.ScreenUpdating = False ' отключаем обновление экрана ' перебираем все строки в используемом диапазоне листа For Each ra In ActiveSheet.UsedRange.Rows ' если в строке найден искомый текст If Not ra.Find(ТекстДляПоиска, , xlValues, xlPart) Is Nothing Then ' добавляем строку в диапазон для удаления If delra Is Nothing Then Set delra = ra Else Set delra = Union(delra, ra) End If Next On Error Resume Next: ПоискСтрокПоУсловию = delra.Areas.Count ' количество найденных строк If Not delra Is Nothing Then ' если подходящие строки найдены - скрываем или удаляем их If HideOnly Then delra.EntireRow.Hidden = True Else delra.EntireRow.Delete End If End Function
Ещё один вариант кода, позволяющего выполнять поиск (с последующим удалением или скрытием строк) сразу по нескольким условиям:
Sub УдалениеСтрокПоНесколькимУсловиям() Dim ra As Range, delra As Range Application.ScreenUpdating = False ' отключаем обновление экрана ' ищем и удаляем строки, содержащие заданный текст ' (можно указать сколько угодно значений, и использовать подстановочные знаки) УдалятьСтрокиСТекстом = Array("Наименование *", "Количество", _ "текст?", "цен*сти", "*78*") ' перебираем все строки в используемом диапазоне листа For Each ra In ActiveSheet.UsedRange.Rows ' перебираем все фразы в массиве For Each word In УдалятьСтрокиСТекстом ' если в очередной строке листа найден искомый текст If Not ra.Find(word, , xlValues, xlPart) Is Nothing Then ' добавляем строку в диапазон для удаления If delra Is Nothing Then Set delra = ra Else Set delra = Union(delra, ra) End If Next word Next ' если подходящие строки найдены, то: (оставьте одну из 2 следующих строк) If Not delra Is Nothing Then delra.EntireRow.Hidden = True ' скрываем их If Not delra Is Nothing Then delra.EntireRow.Delete ' удаляем их End Sub