Как в excel удалить строки через одну автоматически
Перейти к содержимому

Как в excel удалить строки через одну автоматически

  • автор:

Как в excel удалить строки через одну автоматически

Есть столбец в нем много ячеек с текстом в котором встречаются пустые строки, как их автоматически можно убрать?

П-р:
___________________
Y-T2|Abcdifg dsfgf
|пустая строка
| dfgfdhgdhsdg
| fgfffffffffg
——————-

Пользователь
Сообщений: 4837 Регистрация: 06.01.2013
13.09.2009 19:06:17

Предлагаю так. Допустим ваши данные находятся в Столбце А, то

Sub DeleteEmptyRows()
With Range(«A1:A» & Cells(Rows.Count, «A»).End(xlUp).Row)
.SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End With
End Sub

Пользователь
Сообщений: 19 Регистрация: 01.01.1970
13.09.2009 19:07:04

Есть столбец в нем много ячеек с текстом в котором встречаются пустые строки, как их автоматически можно убрать?

П-р:
___________________
Y-T2|Abcdifg dsfgf
\\\\|пустая строка
\\\\| dfgfdhgdhsdg
\\\\|dgfd пустая строка
\\\\| fgfffffffffg
P.S. Сделать сплошной текст в одну строку.
——————-

Пользователь
Сообщений: 4837 Регистрация: 06.01.2013
13.09.2009 19:10:01

Так же могу рассказать, как это сделать без макроса.
1. Выделяете ячейки в нужном столбце (заполненные и пустые), например, А1:А20
2. Меню Правка — Перейти (Ctrl+G), Выделить — Пустые ячейки — ОК
3. Меню Правка — Удалить — Строку — ОК

Пользователь
Сообщений: 4837 Регистрация: 06.01.2013
13.09.2009 19:12:50

Хм. в одну строку? Как плохо, что вы ленитесь открыть Excel и сделать небольшой пример в файле, а затем его выложить на форум.

А что если, заполненных ячеек в столбце 20000, а мы сейчас их развернём и в одну строку — вы думаете они поместятся в строке?

Может всё-таки пример выложите?

Как удалить строки по условию?

Предположу, что почти каждый сталкивался с ситуацией, когда необходимо удалить только определенные строки: имеется большая таблица и необходимо удалить из неё только те строки, которые содержат какое-то слово (цифру, фразу). Для выполнения подобной задачи можно воспользоваться несколькими способами.

Способ первый:
Использовать встроенное средство Excel — фильтр. Сначала его необходимо «установить» на листе:

  • Выделяем таблицу с данными, включая заголовки. Если их нет — то выделяем с самой первой строки таблицы, в которой необходимо удалить данные
  • устанавливаем фильтр:
    • для Excel 2003 : ДанныеФильтрАвтофильтр
    • для Excel 2007-2010 : вкладка Данные (Data)Фильтр (Filter)(или вкладка Главная (Home)Сортировка и фильтр (Sort&Filter)Фильтр (Filter) )

    Теперь выбираем условие для фильтра:

    • в Excel 2003 надо выбрать Условие и в появившейся форме выбрать непосредственно условие(«равно», «содержит», «начинается с» и т.д.), а напротив значение в соответствии с условием.
    • Для 2007-2010 Excel нужно выбрать Текстовые фильтры (Text Filters) и либо сразу выбрать одно из предлагаемых условий, либо нажать Настраиваемый фильтр (Custom Filter) и ввести значения для отбора в форме

    После этого удалить отфильтрованные строки. В 2007 Excel могут возникнуть проблемы с удалением отфильтрованных строк, поэтому рекомендую сначала так же прочитать статью: Excel удаляет вместо отфильтрованных строк — все?! Как избежать.

    Способ второй:
    применить код VBA, который потребует только указания значения, которое необходимо найти в строке и номер столбца, в котором искать значение.

    Sub Del_SubStr() Dim sSubStr As String 'искомое слово или фраза(может быть указанием на ячейку) Dim lCol As Long 'номер столбца с просматриваемыми значениями Dim lLastRow As Long, li As Long Dim lMet As Long Dim arr sSubStr = InputBox("Укажите значение, которое необходимо найти в строке", "www.excel-vba.ru", "") If sSubStr = "" Then lMet = 0 Else lMet = 1 lCol = Val(InputBox("Укажите номер столбца, в котором искать указанное значение", "www.excel-vba.ru", 1)) If lCol = 0 Then Exit Sub lLastRow = ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count arr = Cells(1, lCol).Resize(lLastRow).Value Application.ScreenUpdating = 0 Dim rr As Range For li = 1 To lLastRow 'цикл с первой строки до конца If -(InStr(arr(li, 1), sSubStr) > 0) = lMet Then If rr Is Nothing Then Set rr = Cells(li, 1) Else Set rr = Union(rr, Cells(li, 1)) End If End If Next li If Not rr Is Nothing Then rr.EntireRow.Delete Application.ScreenUpdating = 1 End Sub

    Sub Del_SubStr() Dim sSubStr As String ‘искомое слово или фраза(может быть указанием на ячейку) Dim lCol As Long ‘номер столбца с просматриваемыми значениями Dim lLastRow As Long, li As Long Dim lMet As Long Dim arr sSubStr = InputBox(«Укажите значение, которое необходимо найти в строке», «www.excel-vba.ru», «») If sSubStr = «» Then lMet = 0 Else lMet = 1 lCol = Val(InputBox(«Укажите номер столбца, в котором искать указанное значение», «www.excel-vba.ru», 1)) If lCol = 0 Then Exit Sub lLastRow = ActiveSheet.UsedRange.Row — 1 + ActiveSheet.UsedRange.Rows.Count arr = Cells(1, lCol).Resize(lLastRow).Value Application.ScreenUpdating = 0 Dim rr As Range For li = 1 To lLastRow ‘цикл с первой строки до конца If -(InStr(arr(li, 1), sSubStr) > 0) = lMet Then If rr Is Nothing Then Set rr = Cells(li, 1) Else Set rr = Union(rr, Cells(li, 1)) End If End If Next li If Not rr Is Nothing Then rr.EntireRow.Delete Application.ScreenUpdating = 1 End Sub

    Как использовать: Для начала надо убедиться, что разрешены макросы и при необходимости включить их: почему не работает макрос. Затем копируем код выше, из Excel переходим в редактор VBA( Alt + F11 или вкладка Разработчик (Developer)Visual Basic) —InsertModule. Вставляем туда скопированный код. Теперь код можно вызывать нажатием клавиш Alt + F8 -выделяем Del_SubStrВыполнить (Run) .
    Если значение sSubStr не будет указано, то будут удалены строки, ячейки указанного столбца которых, пустые.
    Если в данном коде в строке If -(InStr(Cells(li, 1), sSubStr) > 0) = lMet Then
    вместо = lMet указать <> lMet , то удаляться будут наоборот строки, не содержащие указанное для значение. Иногда тоже удобно.
    Но. Данный код просматривает строки на предмет частичного совпадения указанного значения. Например, если Вы укажете текст для поиска «отчет», то будут удалены все строки, в которых встречается это слово(«квартальный отчет», «отчет за месяц» и т.д.). Это не всегда нужно. Поэтому ниже приведен код, который будет удалять только строки, указанные ячейки которых равны конкретно указанному значению:

    Sub Del_SubStr() Dim sSubStr As String 'искомое слово или фраза(может быть указанием на ячейку) Dim lCol As Long 'номер столбца с просматриваемыми значениями Dim lLastRow As Long, li As Long Dim arr sSubStr = InputBox("Укажите значение, которое необходимо найти в строке", "www.excel-vba.ru", "") lCol = Val(InputBox("Укажите номер столбца, в котором искать указанное значение", "www.excel-vba.ru", 1)) If lCol = 0 Then Exit Sub lLastRow = ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count arr = Cells(1, lCol).Resize(lLastRow).Value Application.ScreenUpdating = 0 Dim rr As Range For li = 1 To lLastRow 'цикл с первой строки до конца If CStr(arr(li, 1)) = sSubStr Then If rr Is Nothing Then Set rr = Cells(li, 1) Else Set rr = Union(rr, Cells(li, 1)) End If End If Next li If Not rr Is Nothing Then rr.EntireRow.Delete Application.ScreenUpdating = 1 End Sub

    Sub Del_SubStr() Dim sSubStr As String ‘искомое слово или фраза(может быть указанием на ячейку) Dim lCol As Long ‘номер столбца с просматриваемыми значениями Dim lLastRow As Long, li As Long Dim arr sSubStr = InputBox(«Укажите значение, которое необходимо найти в строке», «www.excel-vba.ru», «») lCol = Val(InputBox(«Укажите номер столбца, в котором искать указанное значение», «www.excel-vba.ru», 1)) If lCol = 0 Then Exit Sub lLastRow = ActiveSheet.UsedRange.Row — 1 + ActiveSheet.UsedRange.Rows.Count arr = Cells(1, lCol).Resize(lLastRow).Value Application.ScreenUpdating = 0 Dim rr As Range For li = 1 To lLastRow ‘цикл с первой строки до конца If CStr(arr(li, 1)) = sSubStr Then If rr Is Nothing Then Set rr = Cells(li, 1) Else Set rr = Union(rr, Cells(li, 1)) End If End If Next li If Not rr Is Nothing Then rr.EntireRow.Delete Application.ScreenUpdating = 1 End Sub

    Здесь так же, как и в случае с предыдущим кодом можно заменить оператор сравнения( Cells(li, lCol) = sSubStr ) с равно на неравенство( Cells(li, lCol) <> sSubStr ) и тогда удаляться будут строки, значения ячеек которых не равно указанному.

    УДАЛЕНИЕ СТРОК НА ОСНОВАНИИ СПИСКА ЗНАЧЕНИЙ(МНОЖЕСТВЕННЫЕ КРИТЕРИИ)
    Иногда бывают ситуации, когда необходимо удалить строки не по одному значению, а по нескольким. Например, если строка содержит или Итог или Отчет. Ниже приведен код, при помощи которого можно удалить строки, указав в качестве критерия диапазон значений.
    Значения, которые необходимо найти и удалить перечисляются на листе с именем «Лист2». Т.е. указав на «Лист2» в столбце А(начиная с первой строки) несколько значений — они все будут удалены. Если лист называется иначе(скажем «Соответствия») в коде необходимо будет «Лист2» заменить на «Соответствия». Удаление строк происходит на активном в момент запуска кода листе. Это значит, что перед запуском кода надо перейти на тот лист, строки в котором необходимо удалить.

    Sub Del_Array_SubStr() Dim sSubStr As String 'искомое слово или фраза Dim lCol As Long 'номер столбца с просматриваемыми значениями Dim lLastRow As Long, li As Long Dim avArr, lr As Long Dim arr lCol = Val(InputBox("Укажите номер столбца, в котором искать указанное значение", "www.excel-vba.ru", 1)) If lCol = 0 Then Exit Sub Application.ScreenUpdating = 0 lLastRow = ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count 'заносим в массив значения листа, в котором необходимо удалить строки arr = Cells(1, lCol).Resize(lLastRow).Value 'Получаем с Лист2 значения, которые надо удалить в активном листе With Sheets("Лист2") 'Имя листа с диапазоном значений на удаление avArr = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp)) End With 'удаляем Dim rr As Range For lr = 1 To UBound(avArr, 1) sSubStr = avArr(lr, 1) For li = 1 To lLastRow 'цикл с первой строки до конца If CStr(arr(li, 1)) = sSubStr Then If rr Is Nothing Then Set rr = Cells(li, 1) Else Set rr = Union(rr, Cells(li, 1)) End If End If DoEvents Next li DoEvents Next lr If Not rr Is Nothing Then rr.EntireRow.Delete Application.ScreenUpdating = 1 End Sub

    Sub Del_Array_SubStr() Dim sSubStr As String ‘искомое слово или фраза Dim lCol As Long ‘номер столбца с просматриваемыми значениями Dim lLastRow As Long, li As Long Dim avArr, lr As Long Dim arr lCol = Val(InputBox(«Укажите номер столбца, в котором искать указанное значение», «www.excel-vba.ru», 1)) If lCol = 0 Then Exit Sub Application.ScreenUpdating = 0 lLastRow = ActiveSheet.UsedRange.Row — 1 + ActiveSheet.UsedRange.Rows.Count ‘заносим в массив значения листа, в котором необходимо удалить строки arr = Cells(1, lCol).Resize(lLastRow).Value ‘Получаем с Лист2 значения, которые надо удалить в активном листе With Sheets(«Лист2») ‘Имя листа с диапазоном значений на удаление avArr = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp)) End With ‘удаляем Dim rr As Range For lr = 1 To UBound(avArr, 1) sSubStr = avArr(lr, 1) For li = 1 To lLastRow ‘цикл с первой строки до конца If CStr(arr(li, 1)) = sSubStr Then If rr Is Nothing Then Set rr = Cells(li, 1) Else Set rr = Union(rr, Cells(li, 1)) End If End If DoEvents Next li DoEvents Next lr If Not rr Is Nothing Then rr.EntireRow.Delete Application.ScreenUpdating = 1 End Sub

    Чтобы код выше удалял строки не по точному совпадению слов, а по частичному(например, в ячейке записано «Привет, как дела?», а в списке есть слово «привет» — надо удалить, т.к. есть слово «привет»), то надо строку:

    If CStr(arr(li, 1)) = sSubStr Then

    If CStr(arr(li, 1)) = sSubStr Then

    заменить на такую:

    If InStr(1, arr(li, 1), sSubStr, 1) > 0 Then

    If InStr(1, arr(li, 1), sSubStr, 1) > 0 Then

    УДАЛЕНИЕ ИЗ ЛИСТА СТРОК, КОТОРЫХ НЕТ В СПИСКЕ ЗНАЧЕНИЙ(МНОЖЕСТВЕННЫЕ КРИТЕРИИ)
    Т.к. в последнее время стало поступать все больше и больше вопросов как не удалять значения по списку, а наоборот — оставить в таблице только те значения, которые перечислены в списке — решил дополнить статью и таким кодом.
    Значения, которые необходимо оставить перечисляются на листе с именем «Лист2». Т.е. указав на «Лист2» в столбце А(начиная с первой строки) несколько значений — после работы кода на листе будут оставлены только те строки, в которых присутствует хоть одно из перечисленных в списке значений. Если лист называется иначе(скажем «Соответствия») в коде необходимо будет «Лист2» заменить на «Соответствия». Удаление строк происходит на активном в момент запуска кода листе. Это значит, что перед запуском кода надо перейти на тот лист, строки в котором необходимо удалить.
    В отличие от приведенных выше кодов, данный код ориентирован на то, что значения в списке указаны не полностью. Т.е. если необходимо оставить только те ячейки, в которых встречается слово «активы», то в списке надо указать только это слово. В этом случае если в ячейке будет записана фраза «Нематериальные активы» или «Активы сторонние» — эти ячейки не будут удалены, т.к. в них встречается слово «активы». Регистр букв при этом неважен.

    'процедура оставляет в листе только те значения, которые перечислены в списке Sub LeaveOnlyFoundInArray() Dim sSubStr As String 'искомое слово или фраза Dim lCol As Long 'номер столбца с просматриваемыми значениями Dim lLastRow As Long, li As Long Dim avArr, lr As Long Dim arr Dim IsFind As Boolean lCol = Val(InputBox("Укажите номер столбца, в котором искать указанное значение", "www.excel-vba.ru", 1)) If lCol = 0 Then Exit Sub Application.ScreenUpdating = 0 lLastRow = ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count 'заносим в массив значения листа, в котором необходимо удалить строки arr = Cells(1, lCol).Resize(lLastRow).Value 'Получаем с Лист2 значения, которые надо удалить в активном листе With Sheets("Лист2") 'Имя листа с диапазоном значений на удаление avArr = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp)) End With 'удаляем Dim rr As Range For li = 1 To lLastRow 'цикл с первой строки таблицы до конца IsFind = False For lr = 1 To UBound(avArr, 1) 'цикл по списку значений на удаление sSubStr = avArr(lr, 1) If InStr(1, arr(li, 1), sSubStr, 1) > 0 Then IsFind = True End If DoEvents Next lr 'если значение таблицы не найдено в списке - удаляем строку If Not IsFind Then If rr Is Nothing Then Set rr = Cells(li, 1) Else Set rr = Union(rr, Cells(li, 1)) End If End If DoEvents Next li If Not rr Is Nothing Then rr.EntireRow.Delete Application.ScreenUpdating = 1 End Sub

    ‘процедура оставляет в листе только те значения, которые перечислены в списке Sub LeaveOnlyFoundInArray() Dim sSubStr As String ‘искомое слово или фраза Dim lCol As Long ‘номер столбца с просматриваемыми значениями Dim lLastRow As Long, li As Long Dim avArr, lr As Long Dim arr Dim IsFind As Boolean lCol = Val(InputBox(«Укажите номер столбца, в котором искать указанное значение», «www.excel-vba.ru», 1)) If lCol = 0 Then Exit Sub Application.ScreenUpdating = 0 lLastRow = ActiveSheet.UsedRange.Row — 1 + ActiveSheet.UsedRange.Rows.Count ‘заносим в массив значения листа, в котором необходимо удалить строки arr = Cells(1, lCol).Resize(lLastRow).Value ‘Получаем с Лист2 значения, которые надо удалить в активном листе With Sheets(«Лист2») ‘Имя листа с диапазоном значений на удаление avArr = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp)) End With ‘удаляем Dim rr As Range For li = 1 To lLastRow ‘цикл с первой строки таблицы до конца IsFind = False For lr = 1 To UBound(avArr, 1) ‘цикл по списку значений на удаление sSubStr = avArr(lr, 1) If InStr(1, arr(li, 1), sSubStr, 1) > 0 Then IsFind = True End If DoEvents Next lr ‘если значение таблицы не найдено в списке — удаляем строку If Not IsFind Then If rr Is Nothing Then Set rr = Cells(li, 1) Else Set rr = Union(rr, Cells(li, 1)) End If End If DoEvents Next li If Not rr Is Nothing Then rr.EntireRow.Delete Application.ScreenUpdating = 1 End Sub

    Чтобы код выше сравнивал значения таблицы со значениями списка по точному совпадению слов, а не по частичному, то надо строку:

    If InStr(1, arr(li, 1), sSubStr, 1) > 0 Then

    If InStr(1, arr(li, 1), sSubStr, 1) > 0 Then

    Как в excel удалить строки через одну автоматически

    Доброго времени. Помоги, плз, с решением:
    в столбцы «а»,»в»,»с» (таблица_1) импортируются данные из другой гугл-таблицы (таблица_2), а в столбец «d» данные заносятся вручную . Если в таблице_2 удалить какую-нибудь строку, то в таблице_1 в столбцах «а», «в»,»с» строки также удалятся, а вот данные в столце «d» останутся. Как сделать так, чтобы в таблице_1 данные удалялись и из столбца «d»? Можно ли связать столбцы а, в,с и d?

    Доброго времени. Помоги, плз, с решением:
    в столбцы «а»,»в»,»с» (таблица_1) импортируются данные из другой гугл-таблицы (таблица_2), а в столбец «d» данные заносятся вручную . Если в таблице_2 удалить какую-нибудь строку, то в таблице_1 в столбцах «а», «в»,»с» строки также удалятся, а вот данные в столце «d» останутся. Как сделать так, чтобы в таблице_1 данные удалялись и из столбца «d»? Можно ли связать столбцы а, в,с и d? maragva

    Сообщение отредактировал maragva — Вторник, 25.04.2017, 08:36

    Сообщение Доброго времени. Помоги, плз, с решением:
    в столбцы «а»,»в»,»с» (таблица_1) импортируются данные из другой гугл-таблицы (таблица_2), а в столбец «d» данные заносятся вручную . Если в таблице_2 удалить какую-нибудь строку, то в таблице_1 в столбцах «а», «в»,»с» строки также удалятся, а вот данные в столце «d» останутся. Как сделать так, чтобы в таблице_1 данные удалялись и из столбца «d»? Можно ли связать столбцы а, в,с и d? Автор — maragva
    Дата добавления — 24.04.2017 в 14:54

    Группа: Друзья
    Ранг: Участник клуба
    Сообщений: 2646
    Замечаний: 0% ±

    начинал с Excel 4.0, видел 2.1
    Цитата maragva, 24.04.2017 в 14:54, в сообщении № 1 ( )

    в столбцы «а»,»в»,»с» (таблица_1) импортируются данные из другой гугл-таблицы (таблица_2), а в столбец «d» данные заносятся вручную .

    Каким образом импортируются — при помощи функции IMPORTRANGE или копированием?

    1. Если IMPORTRANGE, то, увы, практически только вручную, причем сначала удаляя строку из таблицы_1, там где колонка D ведётся, а потом, визуально запомнив какую строку удалили, идём в таблицу_2 и удаляем ту же строку по порядку от начала таблицы. Согласен, алгоритм — уныл и ужасен, но он — лишь следствие исходной ужасной организации работы с данными. Вести в этом случае колонку D — это примерно как делать «заметки на полях» сводной таблицы в Excel и недоумевать почему всё кривенько разъехалось при очередном её пересчете. А еще вы подумали, что в таблице_2 кто-то может независимо от вас посортировать записи.

    2. Если же данные импортируются копированием (вручную или скриптом), то нужно писать некоторый скрипт сихронизации, позаботившись об уникальной нумерации записей в обеих таблицах — иначе на что опираться при связи.

    P.S. А впрочем, если ничего такого страшного в плане перемешивания записей для случая 1 гарантированно не предвидится, то, наверное, можно написать и скрипт, тупо удаляющий из таблицы_1 строки с теми же номерами, которые только что удалили из таблицы_2.

    Цитата maragva, 24.04.2017 в 14:54, в сообщении № 1 ( )

    в столбцы «а»,»в»,»с» (таблица_1) импортируются данные из другой гугл-таблицы (таблица_2), а в столбец «d» данные заносятся вручную .

    Каким образом импортируются — при помощи функции IMPORTRANGE или копированием?

    1. Если IMPORTRANGE, то, увы, практически только вручную, причем сначала удаляя строку из таблицы_1, там где колонка D ведётся, а потом, визуально запомнив какую строку удалили, идём в таблицу_2 и удаляем ту же строку по порядку от начала таблицы. Согласен, алгоритм — уныл и ужасен, но он — лишь следствие исходной ужасной организации работы с данными. Вести в этом случае колонку D — это примерно как делать «заметки на полях» сводной таблицы в Excel и недоумевать почему всё кривенько разъехалось при очередном её пересчете. А еще вы подумали, что в таблице_2 кто-то может независимо от вас посортировать записи.

    2. Если же данные импортируются копированием (вручную или скриптом), то нужно писать некоторый скрипт сихронизации, позаботившись об уникальной нумерации записей в обеих таблицах — иначе на что опираться при связи.

    P.S. А впрочем, если ничего такого страшного в плане перемешивания записей для случая 1 гарантированно не предвидится, то, наверное, можно написать и скрипт, тупо удаляющий из таблицы_1 строки с теми же номерами, которые только что удалили из таблицы_2. Gustav

    Сообщение отредактировал Gustav — Вторник, 25.04.2017, 20:26
    Цитата maragva, 24.04.2017 в 14:54, в сообщении № 1 ( )

    в столбцы «а»,»в»,»с» (таблица_1) импортируются данные из другой гугл-таблицы (таблица_2), а в столбец «d» данные заносятся вручную .

    Каким образом импортируются — при помощи функции IMPORTRANGE или копированием?

    1. Если IMPORTRANGE, то, увы, практически только вручную, причем сначала удаляя строку из таблицы_1, там где колонка D ведётся, а потом, визуально запомнив какую строку удалили, идём в таблицу_2 и удаляем ту же строку по порядку от начала таблицы. Согласен, алгоритм — уныл и ужасен, но он — лишь следствие исходной ужасной организации работы с данными. Вести в этом случае колонку D — это примерно как делать «заметки на полях» сводной таблицы в Excel и недоумевать почему всё кривенько разъехалось при очередном её пересчете. А еще вы подумали, что в таблице_2 кто-то может независимо от вас посортировать записи.

    2. Если же данные импортируются копированием (вручную или скриптом), то нужно писать некоторый скрипт сихронизации, позаботившись об уникальной нумерации записей в обеих таблицах — иначе на что опираться при связи.

    P.S. А впрочем, если ничего такого страшного в плане перемешивания записей для случая 1 гарантированно не предвидится, то, наверное, можно написать и скрипт, тупо удаляющий из таблицы_1 строки с теми же номерами, которые только что удалили из таблицы_2. Автор — Gustav
    Дата добавления — 25.04.2017 в 20:18

    Группа: Пользователи
    Ранг: Прохожий
    Сообщений: 8
    Замечаний: 0% ±

    Excel 2010

    именно IMPORTRANGE. Жаль, что не получится. Была б возможность преобразования в таблицу, было бы проше

    именно IMPORTRANGE. Жаль, что не получится. Была б возможность преобразования в таблицу, было бы проше maragva

    Сообщение именно IMPORTRANGE. Жаль, что не получится. Была б возможность преобразования в таблицу, было бы проше Автор — maragva
    Дата добавления — 25.04.2017 в 20:44

    Группа: Друзья
    Ранг: Участник клуба
    Сообщений: 2646
    Замечаний: 0% ±

    начинал с Excel 4.0, видел 2.1
    Цитата maragva, 25.04.2017 в 20:44, в сообщении № 3 ( )

    А впрочем, если ничего такого страшного в плане перемешивания записей для случая 1 гарантированно не предвидится, то, наверное, можно написать и скрипт, тупо удаляющий из таблицы_1 строки с теми же номерами, которые только что удалили из таблицы_2.

    Что ж, конкретно для этого случая сложилась вполне себе осязаемая функция, автоматически удаляющая одну и ту же строку в обеих таблицах. Это будет происходить при вводе в определенную ячейку этой строки в таблице_2 значения («хэштега») #УДАЛИТЬНАФИГ (именно так, большими буквами и с диезом впереди).

    Скрипт нужно будет поместить также в Редактор скриптов таблицы_2. В строку «var sheet1 = …» нужно будет прописать свой 44-хсимвольный страшенный идентификатор таблицы_1. В качестве «сигнальной» колонки в примере принята колонка E (пятая). Как только пользователь введет в ячейку этой колонки #УДАЛИТЬНАФИГ, так сразу же соответствующая строка и удалится из обеих таблиц.
    [vba]

    // *** глобальные переменные, видимые во всех функциях
    var sheet1 = SpreadsheetApp.openById(«1XE. u-iN22zzp3poAqpJ6TXMAbVCu3MGw. aw»).getSheetByName(«Лист1»);
    var sheet2 = SpreadsheetApp.getActive().getSheetByName(«Лист1»);

    var range2 = sheet2.getRange(«E3:E8»); // для отдельного тестирования deleteRowsByTag()

    // *** функция-триггер, срабатывающая при изменении содержимого ячеек
    function onEdit(e)

    // фрагмент этой функции, следящий за появлением на Листе1 в таблица_2 в колонке E (5-я) хэштега #УДАЛИТЬНАФИГ
    if (e.range.getSheet().getName() == sheet2.getName() &&
    e.range.getColumn() == 5) range2 = e.range;
    deleteRowsByTag(); // удаление строк с хэштегом #УДАЛИТЬНАФИГ в колонке E
    >

    // в функции также могут быть другие фрагменты (IFчики), отвечающие за другие задачи
    >

    // *** функция удаления строк (можно протестировать отдельно от onEdit, задав нужный range2 в глобальной секции)
    function deleteRowsByTag()

    var rows2del = []; // формируемый массив строк для удаления
    for (var i=range2.getNumRows(); i>=1; i—) < // для обеспечения сортировки по убыванию
    if (range2.getCell(i, 1).getValue() == «#УДАЛИТЬНАФИГ») rows2del.push(range2.getCell(i, 1).getRow()); // номер удаляемой строки -> в массив
    >
    >

    for (i=0; i Logger.log(rows2del[i]); // номера удаляемых строк -> в Вид \ Журналы
    sheet2.deleteRow(rows2del[i]); // удаляем из таблица_2
    sheet1.deleteRow(rows2del[i]); // удаляем из таблица_1
    >
    >

    P.S. Кстати, замечательно работает на Андроиде — только что проверил на смартфоне. Так что, можно разработать целую систему хэштэгов-команд и вводить их в определенные ячейки для выполнения над данными тех или иных действий, прописанных в onEdit.

    Цитата maragva, 25.04.2017 в 20:44, в сообщении № 3 ( )

    А впрочем, если ничего такого страшного в плане перемешивания записей для случая 1 гарантированно не предвидится, то, наверное, можно написать и скрипт, тупо удаляющий из таблицы_1 строки с теми же номерами, которые только что удалили из таблицы_2.

    Что ж, конкретно для этого случая сложилась вполне себе осязаемая функция, автоматически удаляющая одну и ту же строку в обеих таблицах. Это будет происходить при вводе в определенную ячейку этой строки в таблице_2 значения («хэштега») #УДАЛИТЬНАФИГ (именно так, большими буквами и с диезом впереди).

    Скрипт нужно будет поместить также в Редактор скриптов таблицы_2. В строку «var sheet1 = …» нужно будет прописать свой 44-хсимвольный страшенный идентификатор таблицы_1. В качестве «сигнальной» колонки в примере принята колонка E (пятая). Как только пользователь введет в ячейку этой колонки #УДАЛИТЬНАФИГ, так сразу же соответствующая строка и удалится из обеих таблиц.
    [vba]

    // *** глобальные переменные, видимые во всех функциях
    var sheet1 = SpreadsheetApp.openById(«1XE. u-iN22zzp3poAqpJ6TXMAbVCu3MGw. aw»).getSheetByName(«Лист1»);
    var sheet2 = SpreadsheetApp.getActive().getSheetByName(«Лист1»);

    var range2 = sheet2.getRange(«E3:E8»); // для отдельного тестирования deleteRowsByTag()

    // *** функция-триггер, срабатывающая при изменении содержимого ячеек
    function onEdit(e)

    // фрагмент этой функции, следящий за появлением на Листе1 в таблица_2 в колонке E (5-я) хэштега #УДАЛИТЬНАФИГ
    if (e.range.getSheet().getName() == sheet2.getName() &&
    e.range.getColumn() == 5) range2 = e.range;
    deleteRowsByTag(); // удаление строк с хэштегом #УДАЛИТЬНАФИГ в колонке E
    >

    // в функции также могут быть другие фрагменты (IFчики), отвечающие за другие задачи
    >

    // *** функция удаления строк (можно протестировать отдельно от onEdit, задав нужный range2 в глобальной секции)
    function deleteRowsByTag()

    var rows2del = []; // формируемый массив строк для удаления
    for (var i=range2.getNumRows(); i>=1; i—) < // для обеспечения сортировки по убыванию
    if (range2.getCell(i, 1).getValue() == «#УДАЛИТЬНАФИГ») rows2del.push(range2.getCell(i, 1).getRow()); // номер удаляемой строки -> в массив
    >
    >

    for (i=0; i Logger.log(rows2del[i]); // номера удаляемых строк -> в Вид \ Журналы
    sheet2.deleteRow(rows2del[i]); // удаляем из таблица_2
    sheet1.deleteRow(rows2del[i]); // удаляем из таблица_1
    >
    >

    P.S. Кстати, замечательно работает на Андроиде — только что проверил на смартфоне. Так что, можно разработать целую систему хэштэгов-команд и вводить их в определенные ячейки для выполнения над данными тех или иных действий, прописанных в onEdit. Gustav

    Сообщение отредактировал Gustav — Среда, 26.04.2017, 20:46
    Цитата maragva, 25.04.2017 в 20:44, в сообщении № 3 ( )

    А впрочем, если ничего такого страшного в плане перемешивания записей для случая 1 гарантированно не предвидится, то, наверное, можно написать и скрипт, тупо удаляющий из таблицы_1 строки с теми же номерами, которые только что удалили из таблицы_2.

    Что ж, конкретно для этого случая сложилась вполне себе осязаемая функция, автоматически удаляющая одну и ту же строку в обеих таблицах. Это будет происходить при вводе в определенную ячейку этой строки в таблице_2 значения («хэштега») #УДАЛИТЬНАФИГ (именно так, большими буквами и с диезом впереди).

    Скрипт нужно будет поместить также в Редактор скриптов таблицы_2. В строку «var sheet1 = …» нужно будет прописать свой 44-хсимвольный страшенный идентификатор таблицы_1. В качестве «сигнальной» колонки в примере принята колонка E (пятая). Как только пользователь введет в ячейку этой колонки #УДАЛИТЬНАФИГ, так сразу же соответствующая строка и удалится из обеих таблиц.
    [vba]

    // *** глобальные переменные, видимые во всех функциях
    var sheet1 = SpreadsheetApp.openById(«1XE. u-iN22zzp3poAqpJ6TXMAbVCu3MGw. aw»).getSheetByName(«Лист1»);
    var sheet2 = SpreadsheetApp.getActive().getSheetByName(«Лист1»);

    var range2 = sheet2.getRange(«E3:E8»); // для отдельного тестирования deleteRowsByTag()

    // *** функция-триггер, срабатывающая при изменении содержимого ячеек
    function onEdit(e)

    // фрагмент этой функции, следящий за появлением на Листе1 в таблица_2 в колонке E (5-я) хэштега #УДАЛИТЬНАФИГ
    if (e.range.getSheet().getName() == sheet2.getName() &&
    e.range.getColumn() == 5) range2 = e.range;
    deleteRowsByTag(); // удаление строк с хэштегом #УДАЛИТЬНАФИГ в колонке E
    >

    // в функции также могут быть другие фрагменты (IFчики), отвечающие за другие задачи
    >

    // *** функция удаления строк (можно протестировать отдельно от onEdit, задав нужный range2 в глобальной секции)
    function deleteRowsByTag()

    var rows2del = []; // формируемый массив строк для удаления
    for (var i=range2.getNumRows(); i>=1; i—) < // для обеспечения сортировки по убыванию
    if (range2.getCell(i, 1).getValue() == «#УДАЛИТЬНАФИГ») rows2del.push(range2.getCell(i, 1).getRow()); // номер удаляемой строки -> в массив
    >
    >

    for (i=0; i Logger.log(rows2del[i]); // номера удаляемых строк -> в Вид \ Журналы
    sheet2.deleteRow(rows2del[i]); // удаляем из таблица_2
    sheet1.deleteRow(rows2del[i]); // удаляем из таблица_1
    >
    >

    P.S. Кстати, замечательно работает на Андроиде — только что проверил на смартфоне. Так что, можно разработать целую систему хэштэгов-команд и вводить их в определенные ячейки для выполнения над данными тех или иных действий, прописанных в onEdit. Автор — Gustav
    Дата добавления — 26.04.2017 в 20:34

    Excel: как удалить строки с определенным текстом

    Excel: как удалить строки с определенным текстом

    В следующем пошаговом примере показано, как удалить в Excel все строки, содержащие определенный текст.

    Шаг 1: Создайте данные

    Во-первых, давайте создадим набор данных, который показывает рейтинги трех игроков в разных баскетбольных командах:

    Шаг 2. Найдите значения с определенным текстом

    Предположим, мы хотим удалить каждую строку, содержащую « Плохо » в качестве одной из оценок.

    На вкладке « Главная » нажмите значок « Найти и выбрать », а затем нажмите « Найти » в раскрывающемся меню:

    В появившемся новом окне введите Bad в поле поиска и нажмите « Найти все ».

    Затем нажмите Ctrl+A , чтобы выделить все ячейки, содержащие текст Bad.Затем нажмите Закрыть .

    Все ячейки, содержащие Bad , будут выделены.

    Шаг 3: удалите строки с определенным текстом

    Затем щелкните значок « Удалить » на вкладке « Главная », а затем выберите « Удалить строки листа » в раскрывающемся меню:

    Все строки, содержащие Bad в одной из ячеек, будут автоматически удалены:

    Обратите внимание, что ни в одной из оставшихся строк рейтинг игрока не указан как плохой ни в одном из столбцов.

    Дополнительные ресурсы

    В следующих руководствах объясняется, как выполнять другие распространенные задачи в Excel:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *