Я же писал макрос для себя - Он называется "Удалить_все_картинки" - а не "выделить_картинки_в_диапазоне" я то знаю что это макрос делает . К тому же если на листе свыше 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 метр файлик сразу упал!!! класс [vba]
Код
Sub WWW() Range("H6:PG900").Replace "0", "", xlPart End Sub
[/vba]
Сделал так:Стащил макрос у уважаемого Wasilic отсюда,переделал диапазон с А:А на H6:PG900.запустил макрос на ОДНОМ листе из 15.на 1 метр файлик сразу упал!!! класс [vba]
Код
Sub WWW() Range("H6:PG900").Replace "0", "", xlPart End Sub
китин, НЕЛЬЗЯ запускать этот макрос на рабочих данных. Получите на выходе вместо 15000 = 15 ; 2015 = 215 .... Этот макрос удаляет ВСЕ нули в независимости от того где найдет. Если нужно удалить нулевые значения -- вместо xlPart - нужно написать xlWhole. Т.е. можно так: [vba]
китин, НЕЛЬЗЯ запускать этот макрос на рабочих данных. Получите на выходе вместо 15000 = 15 ; 2015 = 215 .... Этот макрос удаляет ВСЕ нули в независимости от того где найдет. Если нужно удалить нулевые значения -- вместо xlPart - нужно написать xlWhole. Т.е. можно так: [vba]
SLAVICK, дык я же специально этот диапазон задал .Там только нули от убитых формул.А с твоей поправкой ведь можно универсальный такой чистильщик от нулей сделать.Для всех загаженных мною файлов!!!!! а сейчас и опробую
SLAVICK, дык я же специально этот диапазон задал .Там только нули от убитых формул.А с твоей поправкой ведь можно универсальный такой чистильщик от нулей сделать.Для всех загаженных мною файлов!!!!! а сейчас и опробуюкитин
Не судите очень строго:я пытаюсь научиться ЯД 41001877306852
Сообщение отредактировал китин - Суббота, 26.12.2015, 13:05
ну прошу сильно не пинать за этого уродца. макрорекордер + некоторая корректировка с добавлением шедевров от Wasilic и SLAVICK. за пинки в сторону оптимизации буду очень благодарен.
[p.s.]По моему разумению этого уродца надо в модуль книги пихать а не листа?
ну прошу сильно не пинать за этого уродца. макрорекордер + некоторая корректировка с добавлением шедевров от Wasilic и SLAVICK. за пинки в сторону оптимизации буду очень благодарен.
Ну во первых зачем включать и отключать отображение нулей (ActiveWindow.DisplayZeros)? тем более по много раз. Их удаление произойдет вне зависимости от видимости.
Во вторых - чтобы удалять нули с листа - необязательно его выделять.
можно универсальный такой чистильщик от нулей сделать
Вот сделал простенький макрос: [vba]
Код
Sub Убираемнули() Dim sh As Worksheet, r As Range If ActiveWindow.SelectedSheets.Count > 1 Then 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 = 1 Then Set r = ActiveSheet.UsedRange Else Set r = Selection r.Replace 0, "", xlWhole Else For Each sh In ActiveWorkbook.Sheets Set r = sh.UsedRange r.Replace 0, "", xlWhole Next End If End If End Sub
[/vba] Если выделено несколько листов- он удалит 0 на выделенных листах Если выделен только один лист - задает вопрос про замену во всей книге и если да - удаляет 0 во всей книге, если нет: Если на листе выделено несколько ячеек - удаляет 0 только в выделенном диапазоне иначе все 0 на активном листе.
По моему разумению этого уродца надо в модуль книги пихать а не листа?
Да лучше в модуль. А мой макрос - можете закинуть в personal - тогда можно будет пользоваться для любой книги.
Ну во первых зачем включать и отключать отображение нулей (ActiveWindow.DisplayZeros)? тем более по много раз. Их удаление произойдет вне зависимости от видимости.
Во вторых - чтобы удалять нули с листа - необязательно его выделять.
можно универсальный такой чистильщик от нулей сделать
Вот сделал простенький макрос: [vba]
Код
Sub Убираемнули() Dim sh As Worksheet, r As Range If ActiveWindow.SelectedSheets.Count > 1 Then 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 = 1 Then Set r = ActiveSheet.UsedRange Else Set r = Selection r.Replace 0, "", xlWhole Else For Each sh In ActiveWorkbook.Sheets Set r = sh.UsedRange r.Replace 0, "", xlWhole Next End If End If End Sub
[/vba] Если выделено несколько листов- он удалит 0 на выделенных листах Если выделен только один лист - задает вопрос про замену во всей книге и если да - удаляет 0 во всей книге, если нет: Если на листе выделено несколько ячеек - удаляет 0 только в выделенном диапазоне иначе все 0 на активном листе.
Sub Убираемнули() Dim sh As Worksheet, r As Range If ActiveWindow.SelectedSheets.Count > 1 Then 'Проверяем сколько листов выделено 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 = 1 Then Set r = ActiveSheet.UsedRange Else Set r = Selection r.Replace 0, "", xlWhole 'замена нулевых ячеек на пусто Else 'Если да For Each sh In ActiveWorkbook.Sheets 'Для всех листов в книге Set r = sh.UsedRange 'определение рабочего диапазона листа r.Replace 0, "", xlWhole 'замена нулевых ячеек на пусто Next End If End If End Sub
Sub Убираемнули() Dim sh As Worksheet, r As Range If ActiveWindow.SelectedSheets.Count > 1 Then 'Проверяем сколько листов выделено 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 = 1 Then Set r = ActiveSheet.UsedRange Else Set r = Selection r.Replace 0, "", xlWhole 'замена нулевых ячеек на пусто Else 'Если да For Each sh In ActiveWorkbook.Sheets 'Для всех листов в книге Set r = sh.UsedRange 'определение рабочего диапазона листа r.Replace 0, "", xlWhole 'замена нулевых ячеек на пусто Next End If End If End Sub
Решил добавить сюда решение из этой темы - чтобы не затерялось, и было легче найти если что. Может кому сгодится. Макрос чем-то схож с кодом Alex_ST в 48-м посте, но немного не такой. В частности можно выбрать минимальный показатель для высоты и ширины. Будут удалятся картинки меньше заданного критерия. Картинки не выделяются а сразу удаляются (потому, что при большом количестве картинок при попытке выделить все программа просто зависнет). + добавил возможность вывода данных о картинках на новый лист - чтоб увидеть где и что есть и что было удалено. В общем вот :
[vba]
Код
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 < 2 Then Exit Sub If MsgBox("Вывести отчет: " & i - 1, vbYesNo) = vbNo Then Exit Sub m = Split(s, vbCr) ReDim m1(0 To UBound(m), 0 To 5) For i = 1 To UBound(m) m2 = Split(m(i), "||") For ii = 0 To UBound(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") End Sub
[/vba]
Добавил название картинки и шапку.
Решил добавить сюда решение из этой темы - чтобы не затерялось, и было легче найти если что. Может кому сгодится. Макрос чем-то схож с кодом Alex_ST в 48-м посте, но немного не такой. В частности можно выбрать минимальный показатель для высоты и ширины. Будут удалятся картинки меньше заданного критерия. Картинки не выделяются а сразу удаляются (потому, что при большом количестве картинок при попытке выделить все программа просто зависнет). + добавил возможность вывода данных о картинках на новый лист - чтоб увидеть где и что есть и что было удалено. В общем вот :
[vba]
Код
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 < 2 Then Exit Sub If MsgBox("Вывести отчет: " & i - 1, vbYesNo) = vbNo Then Exit Sub m = Split(s, vbCr) ReDim m1(0 To UBound(m), 0 To 5) For i = 1 To UBound(m) m2 = Split(m(i), "||") For ii = 0 To UBound(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") End Sub
Всем доброго времени суток. Дело в следующем: Попросили посмотреть файл: не удалить строки, пишет не хватает ресурсов. Ну поудалял я раскраску, таблицы, данные, те которые до конца листа.сохранил.(да, файл прислали по почте файл весил 5 Мб )сохранил, посмотрел, офигел файл стал весить 170 Мб.Подвесил мне весь комп. Я в шоке: люди что там может быть?
Всем доброго времени суток. Дело в следующем: Попросили посмотреть файл: не удалить строки, пишет не хватает ресурсов. Ну поудалял я раскраску, таблицы, данные, те которые до конца листа.сохранил.(да, файл прислали по почте файл весил 5 Мб )сохранил, посмотрел, офигел файл стал весить 170 Мб.Подвесил мне весь комп. Я в шоке: люди что там может быть?китин
Не судите очень строго:я пытаюсь научиться ЯД 41001877306852