Я же писал макрос для себя - Он называется "Удалить_все_картинки" - а не "выделить_картинки_в_диапазоне" я то знаю что это макрос делает . К тому же если на листе свыше 2000 картинок - есть вероятность что excel просто зависнет при попытке их выделить. Мне выделение нужно крайне редко - а вот удаление чаще. Вывод: Для разных нужд - разные макросы
Я же писал макрос для себя - Он называется "Удалить_все_картинки" - а не "выделить_картинки_в_диапазоне" я то знаю что это макрос делает . К тому же если на листе свыше 2000 картинок - есть вероятность что excel просто зависнет при попытке их выделить. Мне выделение нужно крайне редко - а вот удаление чаще. Вывод: Для разных нужд - разные макросы SLAVICK
Иногда все проще чем кажется с первого взгляда.
Сообщение отредактировал SLAVICK - Пятница, 25.12.2015, 14:48
Ярослав вы правы.скопировал вставил уменьшился на 400 Кб видимо только за счет раскраски.Но 1 лист весит 1,5 метра.только значения?????????????????
Ярослав вы правы.скопировал вставил уменьшился на 400 Кб видимо только за счет раскраски.Но 1 лист весит 1,5 метра.только значения?????????????????китин
Не судите очень строго:я пытаюсь научиться ЯД 41001877306852
Теперь я точно знаю сколько весит НОЛЬ!!!! 610000 нулей весят 1500 Кб!!!!Походу я в большой массив данныфе ставил формулой,потом формулу убивал и оставались нули. 610000 штук. Нажал Ctrl+H думал почти три минуты.Заменил на ничего.файл весит 100 Кб. Всем спасибо за советы и помощь!
Теперь я точно знаю сколько весит НОЛЬ!!!! 610000 нулей весят 1500 Кб!!!!Походу я в большой массив данныфе ставил формулой,потом формулу убивал и оставались нули. 610000 штук. Нажал Ctrl+H думал почти три минуты.Заменил на ничего.файл весит 100 Кб. Всем спасибо за советы и помощь!китин
Не судите очень строго:я пытаюсь научиться ЯД 41001877306852
ХМ.То есть если на массив в 610000 ячеек сначала вставляешь формулу затем спецвставкой ее убиваешь, то лучше через ЕСЛИОШИБКА(формула ;"") ???Фигушки ошибки то нет .все равно ноль выдаст.Через ЕСЛИ только
ХМ.То есть если на массив в 610000 ячеек сначала вставляешь формулу затем спецвставкой ее убиваешь, то лучше через ЕСЛИОШИБКА(формула ;"") ???Фигушки ошибки то нет .все равно ноль выдаст.Через ЕСЛИ толькокитин
Не судите очень строго:я пытаюсь научиться ЯД 41001877306852
проблема в том что "" - это не пустая ячейка. -а примерно равно символу 0. Лучше так: ЕСЛИОШИБКА(формула ;0) убить формулы заменить 0(целая ячейка) на пусто.
проблема в том что "" - это не пустая ячейка. -а примерно равно символу 0. Лучше так: ЕСЛИОШИБКА(формула ;0) убить формулы заменить 0(целая ячейка) на пусто.SLAVICK
Я делаю немного иначе. ЕСЛИОШИБКА(формула ;"!!!") Убиваю формулы Контрл f, ищу !!!. Когда нашел, жму Контрл Шифт Стрелка вниз - выделяется все вниз до конца Удаляю СТРОКИ целиком
Я делаю немного иначе. ЕСЛИОШИБКА(формула ;"!!!") Убиваю формулы Контрл f, ищу !!!. Когда нашел, жму Контрл Шифт Стрелка вниз - выделяется все вниз до конца Удаляю СТРОКИ целиком_Boroda_
Да, но во первых ошибки ошибками - но формулы тоже 0 выдают - и их достаточно много - если их удалить файл будет гораздо меньше. а во вторых ошибка может быть не только внизу листа - получится удаление нужных данных
Да, но во первых ошибки ошибками - но формулы тоже 0 выдают - и их достаточно много - если их удалить файл будет гораздо меньше. а во вторых ошибка может быть не только внизу листа - получится удаление нужных данных SLAVICK
Нужно так писать формулу, чтобы только внизу. Не обязательно с ЕСЛИОШИБКА, чаще даже не с ней, а с чем-то типа ЕСЛИ(что-то="";"!!!";еще_что-то)_Boroda_
Согласен, но по крайней мере в моей работе, часто это не важно. 1*пусто=0 1*0=0 . Или план(или факт) = 0 для меня тоже что пусто . Кстати сводные - тоже выдают пусто - а их у меня больше 80% .
Не всегда это целесообразно.(опять же в моей работе) к примеру посчитать прирост к предыдущему месяцу при факте 0. Можно конечно написать если.... но зачем? И вообще - я всегда стараюсь всегда делать так чтобы формул не было ниже основной таблицы- поэтому для меня такой вариант не подходит. У каждого свои тараканы в голове
Согласен, но по крайней мере в моей работе, часто это не важно. 1*пусто=0 1*0=0 . Или план(или факт) = 0 для меня тоже что пусто . Кстати сводные - тоже выдают пусто - а их у меня больше 80% .
Не всегда это целесообразно.(опять же в моей работе) к примеру посчитать прирост к предыдущему месяцу при факте 0. Можно конечно написать если.... но зачем? И вообще - я всегда стараюсь всегда делать так чтобы формул не было ниже основной таблицы- поэтому для меня такой вариант не подходит. У каждого свои тараканы в голове SLAVICK
Иногда все проще чем кажется с первого взгляда.
Сообщение отредактировал SLAVICK - Пятница, 25.12.2015, 20:47
Сделал так:Стащил макрос у уважаемого Wasilic отсюда,переделал диапазон с А:А на H6:PG900.запустил макрос на ОДНОМ листе из 15.на 1 метр файлик сразу упал!!! класс
Sub WWW()
Range("H6:PG900").Replace "0", "", xlPart EndSub
Сделал так:Стащил макрос у уважаемого Wasilic отсюда,переделал диапазон с А:А на H6:PG900.запустил макрос на ОДНОМ листе из 15.на 1 метр файлик сразу упал!!! класс
Sub WWW()
Range("H6:PG900").Replace "0", "", xlPart EndSub
китин, НЕЛЬЗЯ запускать этот макрос на рабочих данных. Получите на выходе вместо 15000 = 15 ; 2015 = 215 .... Этот макрос удаляет ВСЕ нули в независимости от того где найдет. Если нужно удалить нулевые значения -- вместо xlPart - нужно написать xlWhole. Т.е. можно так:
китин, НЕЛЬЗЯ запускать этот макрос на рабочих данных. Получите на выходе вместо 15000 = 15 ; 2015 = 215 .... Этот макрос удаляет ВСЕ нули в независимости от того где найдет. Если нужно удалить нулевые значения -- вместо xlPart - нужно написать xlWhole. Т.е. можно так:
SLAVICK, дык я же специально этот диапазон задал .Там только нули от убитых формул.А с твоей поправкой ведь можно универсальный такой чистильщик от нулей сделать.Для всех загаженных мною файлов!!!!! а сейчас и опробую
SLAVICK, дык я же специально этот диапазон задал .Там только нули от убитых формул.А с твоей поправкой ведь можно универсальный такой чистильщик от нулей сделать.Для всех загаженных мною файлов!!!!! а сейчас и опробуюкитин
Не судите очень строго:я пытаюсь научиться ЯД 41001877306852
Сообщение отредактировал китин - Суббота, 26.12.2015, 13:05
ну прошу сильно не пинать за этого уродца. макрорекордер + некоторая корректировка с добавлением шедевров от Wasilic и SLAVICK. за пинки в сторону оптимизации буду очень благодарен.
ну прошу сильно не пинать за этого уродца. макрорекордер + некоторая корректировка с добавлением шедевров от Wasilic и SLAVICK. за пинки в сторону оптимизации буду очень благодарен.
Ну во первых зачем включать и отключать отображение нулей (ActiveWindow.DisplayZeros)? тем более по много раз. Их удаление произойдет вне зависимости от видимости.
Во вторых - чтобы удалять нули с листа - необязательно его выделять.
можно универсальный такой чистильщик от нулей сделать
Вот сделал простенький макрос:
Sub Убираемнули() Dim sh As Worksheet, r As Range If ActiveWindow.SelectedSheets.Count > 1Then For Each sh In ActiveWindow.SelectedSheets Set r = sh.UsedRange
r.Replace 0, "", xlWhole Next Else If MsgBox("Заменить 0 во всей книге?", vbYesNo) = vbNo Then If Selection.Count = 1ThenSet r = ActiveSheet.UsedRange ElseSet r = Selection
r.Replace 0, "", xlWhole Else For Each sh In ActiveWorkbook.Sheets Set r = sh.UsedRange
r.Replace 0, "", xlWhole Next EndIf EndIf EndSub
Если выделено несколько листов- он удалит 0 на выделенных листах Если выделен только один лист - задает вопрос про замену во всей книге и если да - удаляет 0 во всей книге, если нет: Если на листе выделено несколько ячеек - удаляет 0 только в выделенном диапазоне иначе все 0 на активном листе.
По моему разумению этого уродца надо в модуль книги пихать а не листа?
Да лучше в модуль. А мой макрос - можете закинуть в personal - тогда можно будет пользоваться для любой книги.
Ну во первых зачем включать и отключать отображение нулей (ActiveWindow.DisplayZeros)? тем более по много раз. Их удаление произойдет вне зависимости от видимости.
Во вторых - чтобы удалять нули с листа - необязательно его выделять.
можно универсальный такой чистильщик от нулей сделать
Вот сделал простенький макрос:
Sub Убираемнули() Dim sh As Worksheet, r As Range If ActiveWindow.SelectedSheets.Count > 1Then For Each sh In ActiveWindow.SelectedSheets Set r = sh.UsedRange
r.Replace 0, "", xlWhole Next Else If MsgBox("Заменить 0 во всей книге?", vbYesNo) = vbNo Then If Selection.Count = 1ThenSet r = ActiveSheet.UsedRange ElseSet r = Selection
r.Replace 0, "", xlWhole Else For Each sh In ActiveWorkbook.Sheets Set r = sh.UsedRange
r.Replace 0, "", xlWhole Next EndIf EndIf EndSub
Если выделено несколько листов- он удалит 0 на выделенных листах Если выделен только один лист - задает вопрос про замену во всей книге и если да - удаляет 0 во всей книге, если нет: Если на листе выделено несколько ячеек - удаляет 0 только в выделенном диапазоне иначе все 0 на активном листе.
Sub Убираемнули() Dim sh As Worksheet, r As Range If ActiveWindow.SelectedSheets.Count > 1Then'Проверяем сколько листов выделено For Each sh In ActiveWindow.SelectedSheets 'Для всех выделенных листов Set r = sh.UsedRange 'определение рабочего диапазона листа
r.Replace 0, "", xlWhole 'замена нулевых ячеек на пусто Next Else 'Определяем где заменять ячейки только на одном листе или во всей книге If MsgBox("Заменить 0 во всей книге?", vbYesNo) = vbNo Then 'Если нет 'Если выделена одна ячейка - присваиваем рабочий диапазон, если выделено больше одной ячейки то выделение If Selection.Count = 1ThenSet r = ActiveSheet.UsedRange ElseSet r = Selection
r.Replace 0, "", xlWhole 'замена нулевых ячеек на пусто Else 'Если да For Each sh In ActiveWorkbook.Sheets 'Для всех листов в книге Set r = sh.UsedRange 'определение рабочего диапазона листа
r.Replace 0, "", xlWhole 'замена нулевых ячеек на пусто Next EndIf EndIf EndSub
Sub Убираемнули() Dim sh As Worksheet, r As Range If ActiveWindow.SelectedSheets.Count > 1Then'Проверяем сколько листов выделено For Each sh In ActiveWindow.SelectedSheets 'Для всех выделенных листов Set r = sh.UsedRange 'определение рабочего диапазона листа
r.Replace 0, "", xlWhole 'замена нулевых ячеек на пусто Next Else 'Определяем где заменять ячейки только на одном листе или во всей книге If MsgBox("Заменить 0 во всей книге?", vbYesNo) = vbNo Then 'Если нет 'Если выделена одна ячейка - присваиваем рабочий диапазон, если выделено больше одной ячейки то выделение If Selection.Count = 1ThenSet r = ActiveSheet.UsedRange ElseSet r = Selection
r.Replace 0, "", xlWhole 'замена нулевых ячеек на пусто Else 'Если да For Each sh In ActiveWorkbook.Sheets 'Для всех листов в книге Set r = sh.UsedRange 'определение рабочего диапазона листа
r.Replace 0, "", xlWhole 'замена нулевых ячеек на пусто Next EndIf EndIf EndSub
Решил добавить сюда решение из этой темы - чтобы не затерялось, и было легче найти если что. Может кому сгодится. Макрос чем-то схож с кодом Alex_ST в 48-м посте, но немного не такой. В частности можно выбрать минимальный показатель для высоты и ширины. Будут удалятся картинки меньше заданного критерия. Картинки не выделяются а сразу удаляются (потому, что при большом количестве картинок при попытке выделить все программа просто зависнет). + добавил возможность вывода данных о картинках на новый лист - чтоб увидеть где и что есть и что было удалено. В общем вот :
Sub Удалить_все_картинки_меньше() Dim kart As Shape, n#, i&, m, s$, m1, m2
n = InputBox("Min size", , 1)
i = 1 For Each kart In ActiveSheet.Shapes
i = i + 1
s = s & vbCr & i - 1 & "||" & kart.TopLeftCell.Address & "||" & kart.Name & "||" & kart.Height & "||" & kart.Width If kart.Height < n Or kart.Width < n Then kart.Delete: s = s & "||" & "Deleted" Next If i < 2ThenExitSub If MsgBox("Вывести отчет: " & i - 1, vbYesNo) = vbNo ThenExitSub
m = Split(s, vbCr) ReDim m1(0ToUBound(m), 0To5) For i = 1ToUBound(m)
m2 = Split(m(i), "||") For ii = 0ToUBound(m2)
m1(i, ii) = m2(ii) Next Next
Sheets.Add
Range("a1").Resize(UBound(m1) + 1, 6) = m1
Range("a1:f1") = Array("№", "address", "name", "height", "width", "Deleted") EndSub
Добавил название картинки и шапку.
Решил добавить сюда решение из этой темы - чтобы не затерялось, и было легче найти если что. Может кому сгодится. Макрос чем-то схож с кодом Alex_ST в 48-м посте, но немного не такой. В частности можно выбрать минимальный показатель для высоты и ширины. Будут удалятся картинки меньше заданного критерия. Картинки не выделяются а сразу удаляются (потому, что при большом количестве картинок при попытке выделить все программа просто зависнет). + добавил возможность вывода данных о картинках на новый лист - чтоб увидеть где и что есть и что было удалено. В общем вот :
Sub Удалить_все_картинки_меньше() Dim kart As Shape, n#, i&, m, s$, m1, m2
n = InputBox("Min size", , 1)
i = 1 For Each kart In ActiveSheet.Shapes
i = i + 1
s = s & vbCr & i - 1 & "||" & kart.TopLeftCell.Address & "||" & kart.Name & "||" & kart.Height & "||" & kart.Width If kart.Height < n Or kart.Width < n Then kart.Delete: s = s & "||" & "Deleted" Next If i < 2ThenExitSub If MsgBox("Вывести отчет: " & i - 1, vbYesNo) = vbNo ThenExitSub
m = Split(s, vbCr) ReDim m1(0ToUBound(m), 0To5) For i = 1ToUBound(m)
m2 = Split(m(i), "||") For ii = 0ToUBound(m2)
m1(i, ii) = m2(ii) Next Next
Sheets.Add
Range("a1").Resize(UBound(m1) + 1, 6) = m1
Range("a1:f1") = Array("№", "address", "name", "height", "width", "Deleted") EndSub
Всем доброго времени суток. Дело в следующем: Попросили посмотреть файл: не удалить строки, пишет не хватает ресурсов. Ну поудалял я раскраску, таблицы, данные, те которые до конца листа.сохранил.(да, файл прислали по почте файл весил 5 Мб )сохранил, посмотрел, офигел файл стал весить 170 Мб.Подвесил мне весь комп. Я в шоке: люди что там может быть?
Всем доброго времени суток. Дело в следующем: Попросили посмотреть файл: не удалить строки, пишет не хватает ресурсов. Ну поудалял я раскраску, таблицы, данные, те которые до конца листа.сохранил.(да, файл прислали по почте файл весил 5 Мб )сохранил, посмотрел, офигел файл стал весить 170 Мб.Подвесил мне весь комп. Я в шоке: люди что там может быть?китин
Не судите очень строго:я пытаюсь научиться ЯД 41001877306852