Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.01.2018, 18:18   #1
СтаСС
Пользователь
 
Регистрация: 12.02.2017
Сообщений: 87
По умолчанию Удаление ячеек со смещением вниз

Столкнулся с такой задачей - нужно найти ячейки (в примере имеющие значение 0 или 1) и удалить их, но при этом ячейки в этом столбце сверху должны сместится вниз.
Стандартным способом удаление ячеек со смещением вниз невозможно, но это как бы можно добиться удалением ненужной ячейки а после этого вставкой пустой ячейки в этом же
столбце сверху (2-я строка в примере пустая в нее и можна вставлять новые пустые ячейки вместо удаленных) в итоге получится то что и нужно.

Запись макроса стандартным способом здесь не поможет поэтому обращаюсь к знатокам - буду рад помощи.
P.S. в примере наглядно видно как есть и как должно получиться
Вложения
Тип файла: xlsx PRIMER.xlsx (11.3 Кб, 20 просмотров)
СтаСС вне форума Ответить с цитированием
Старый 01.02.2018, 00:48   #2
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

В первом приближении. Работает с выделением.
Код:
Sub Макрос1()
  Application.ScreenUpdating = False
  Selection.Columns(1).EntireColumn.Insert
  With Selection.Columns(1)
    .Formula = "=ROW()+9"
    .Value = .Value
  End With
  With Selection.Resize(, Selection.Columns.Count + 1)
    .Sort .Cells(1, 1), xlDescending, Header:=xlNo
    .Replace What:="1", Replacement:="", LookAt:=xlWhole, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    .Replace What:="0", Replacement:="", LookAt:=xlWhole, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    .SpecialCells(xlCellTypeBlanks).Delete Shift:=xlUp
    .Sort .Cells(1, 1), xlAscending, Header:=xlNo
    .Columns(1).EntireColumn.Delete
  End With
  Application.ScreenUpdating = True
End Sub
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 01.02.2018, 01:09   #3
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Код:
Sub DelLessThen2()
  Dim ar, r&, c&, i&
  ar = Range(Cells(2, 20), Cells(Rows.Count, 1).End(xlUp)).Value
  For c = 1 To UBound(ar, 2)
    For r = 2 To UBound(ar)
      If ar(r, c) < 2 Then
        For i = r To 2 Step -1
          ar(i, c) = ar(i - 1, c)
        Next
      End If
    Next
  Next
  Cells(3 + UBound(ar), 21).Resize(UBound(ar), UBound(ar, 2)).Value = ar
End Sub
Вложения
Тип файла: rar PRIMER (5).rar (15.4 Кб, 14 просмотров)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 01.02.2018, 01:33   #4
СтаСС
Пользователь
 
Регистрация: 12.02.2017
Сообщений: 87
По умолчанию

Цитата:
Сообщение от Казанский Посмотреть сообщение
Работает с выделением.
увы не совсем подходящий вариант т.к. очень много ячеек нужно удалять(сотни или даже тысячи) кроме того у меня он работает не коректно проверил на примере.. но все равно спасибо что откликнулись!
СтаСС вне форума Ответить с цитированием
Старый 01.02.2018, 01:42   #5
СтаСС
Пользователь
 
Регистрация: 12.02.2017
Сообщений: 87
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
код
Вроде то что надо, а можна чтоб он исправлял имеющиеся данные "на месте" а не переносил их вправо и вниз и делал это на всем листе? И самое главное(может я не разобрался еще) он меняет только
значения меньше 2? а если нужно удалять например только ячейки с значениями 5 и 23?

Последний раз редактировалось СтаСС; 01.02.2018 в 02:04.
СтаСС вне форума Ответить с цитированием
Старый 01.02.2018, 09:05   #6
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Во вложении пример, аналогичный варианту из #2, но с возможностью удалять любые (числовые, строковые) значения, указанные в массиве.
Также, макрос "не трогает" прорисованные границы.
Диапазон таблицы в макросе прописан явно. При необходимости, его можно определять по требуемым условиям.
Вложения
Тип файла: rar PRIMER_2.rar (17.4 Кб, 21 просмотров)
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 01.02.2018 в 09:16.
SAS888 вне форума Ответить с цитированием
Старый 01.02.2018, 10:51   #7
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

конечно все перечисленное возможно.
как только задача описана ясно и четко в одном сообщении, в следующем уже может быть точный ответ на нее
а пока условия задачи "крутятся" только в голове у автора, такую задачу может решить только опытный экстрасенс (если он хоть что-то понимает в Excel)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 01.02.2018, 10:52   #8
СтаСС
Пользователь
 
Регистрация: 12.02.2017
Сообщений: 87
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Во вложении пример,
Да, все отлично работает + разобрался где менять диапазон и нужные значения + уже проверил на нужном файле. Супер, большущее СПАСИБО!
СтаСС вне форума Ответить с цитированием
Старый 01.02.2018, 11:00   #9
СтаСС
Пользователь
 
Регистрация: 12.02.2017
Сообщений: 87
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
конечно все перечисленное возможно.
Увы, должен в очередной раз согласиться - когда выкладывал вопрос казалось что яснее некуда но потом понял что есть )) Каюсь.. и главное это не первое ваше замечание такого рода... у меня уже вырабатывается стойкий комплекс неполноценности при формировании вопроса. Над очередным, а он вроде не за горами буду упорно стараться. Чеспионерское!
СтаСС вне форума Ответить с цитированием
Старый 01.02.2018, 13:22   #10
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

СтаСС, без обид - это хорошо и очень правильно!
тем более, я не ставлю целью обидеть кого-то, пользуясь служебным положением, я ставлю целью подтолкнуть людей к мысли -
когда описываете задачу, поймите, человек который прочитал Ваше описание, узнал о задаче ровно столько, сколько о ней написано, может еще догадаться о чем-то на основании своего жизненого опыта, ну а может и нет! может совершенно не догадываться о вещах, известных об этой задаче только Вам.

поэтому если надеетесь, что ВСЕ ОБО ВСЕМ догадаются - пишите как-нибудь, а если хотите получить точный ответ - отнеситесь вдумчиво и критично к собственным формулировкам, пробуйте абстрагироваться от всего что знаете о задаче прочитать свое сообщение и оценить насколько написанное Вами может быть понятно другим людям
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите разобраться - Нужен макрос который выделит и скопирует по 10 ячеек вверх и вниз от активной ячейки омарат Microsoft Office Excel 2 16.05.2017 11:33
вставка ячеек в Excell со сдвигом вниз иванлеон Общие вопросы Delphi 1 24.05.2015 14:04
Вставка строк (с сохранением формулы) со смещением общего итога вниз DIMONRUS Microsoft Office Excel 10 07.08.2013 16:06
При удаление строк, картинки съезжают на 1 строку вниз Maxim360 Microsoft Office Excel 0 17.07.2013 17:02
Перенос значений поля со смещением вниз kulon БД в Delphi 0 23.04.2011 16:41