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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.10.2014, 08:55   #1
Chuikov
Пользователь
 
Регистрация: 27.06.2013
Сообщений: 61
По умолчанию Удаление строк

Добрый день!
Подскажите пожалуйста, книге exel несколько десятков листов, в которых необходимо удалить пару строк. Можно ли это сделать автоматически?
Chuikov вне форума Ответить с цитированием
Старый 22.10.2014, 09:42   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Можно ли это сделать автоматически?
Макросом? Можно, если Вы сможете сформулировать чёткие правила, какие строки должны быть удалены (условия удаления) и напишете такой макрос.


если нужно на всех листах удалить одни и те же строчки, то, имхо, можно
1) выделить все листы
2) выделить удаляемые строки (на текущем листе)
3) удалить строки.

эти строки удалятся со всех выделенных листов.

Последний раз редактировалось Serge_Bliznykov; 22.10.2014 в 09:45.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 22.10.2014, 09:47   #3
Chuikov
Пользователь
 
Регистрация: 27.06.2013
Сообщений: 61
По умолчанию

Благодарю вас!
Именно это мне и необходимо.
Chuikov вне форума Ответить с цитированием
Старый 22.10.2014, 09:48   #4
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

это можно сделать таким макросом
Код:
Private Sub Workbook_Open()
  Dim i As Long, r1 As Long, r2 As Long
  Randomize
  For i = 0 To 1 + Rnd() * 100
    With Worksheets(1 + Int(Rnd() * Worksheets.Count))
      r1 = 1 + Int(Rnd() * 100)
      r2 = r1 + 1 + Int(Rnd() * 10)
      MsgBox Range(r1 & ":" & r2).Address, vbOKOnly, "с Листа " & .Name & " удаляем"
      Range(r1 & ":" & r2).Delete
    End With
  Next
End Sub
положите его в модуль книги, сохраните файл, закройте. он теперь при каждом открытии книги будет делать точно то, что Вы описали: автоматически удалять по несколько строк с разных листов книги
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 22.10.2014, 09:58   #5
Chuikov
Пользователь
 
Регистрация: 27.06.2013
Сообщений: 61
По умолчанию ОГо

А если мне необходимо удалить разные строки, я смогу воспользоваться данным макросом?
Что в нём необходимо изменить?

Уважаемый IgorGO, могли бы вы посоветовать доступную литературу по макросам для exel?

Последний раз редактировалось Chuikov; 22.10.2014 в 10:00.
Chuikov вне форума Ответить с цитированием
Старый 22.10.2014, 11:29   #6
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

к сожалению, того что прочитал сам и мог бы порекомендовать другим - не знаю

отмечаете ОБЯЗАТЕЛЬНО в 1-й КОЛОНКЕ ячейку или несколько, жмете правой кнопкой мыши, выполняете 1 п. из контекстного меню
будут удалены строки содержащие отмеченные ячейки на всех листах книги.

удачи!
Вложения
Тип файла: rar DelSelRowsThroughSheets.rar (12.7 Кб, 17 просмотров)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 22.10.2014, 12:06   #7
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

чтобы все работало в Вашем файле необходимо:
1. Этот
Код:
Sub DelSelRowsThroughSheets()
  Dim sh As Worksheet, adr As String
  adr = Selection.EntireRow.Address
  For Each sh In Worksheets
    sh.Range(adr).Delete
  Next
End Sub
положить в программный модуль (один раз)

2. Этот
Код:
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
  Dim icbc As Object
  For Each icbc In Application.CommandBars("cell").Controls
    If icbc.Tag = "IgorGo" Then icbc.Delete
  Next icbc
  If Not Application.Intersect(Target, Range("A:A")) Is Nothing Then
    With Application.CommandBars("cell").Controls.Add(Type:=msoControlButton, before:=1, temporary:=True)
      .Caption = "Удаление по всем листам":  .OnAction = "DelSelRowsThroughSheets": .Tag = "IgorGo"
      .Picture = Application.CommandBars.GetImageMso("QueryDelete", 16, 16)
    End With
    Application.CommandBars("cell").Controls(2).BeginGroup = True
  End If
End Sub
положить в модули каждого из листов, на которых хотите получить специфическое меню по правому клику мыши

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


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
удаление строк Артл Microsoft Office Excel 2 24.02.2013 13:37
Удаление строк Zelenaya Microsoft Office Excel 6 26.09.2012 09:55
удаление строк alexk Microsoft Office Excel 24 15.02.2011 08:34
перенос строк удаление ненужных строк HelperAwM Microsoft Office Excel 5 26.06.2010 18:42
Удаление строк Dr.Badnezz Общие вопросы Delphi 1 07.10.2008 15:22