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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.02.2011, 20:22   #1
Просточел
 
Регистрация: 11.02.2011
Сообщений: 5
По умолчанию Скрытие строк

Приветствую!
Имеются 2листа.
На одном есть 2 колонки А и Б. Колонка А заполнена, Б имеет какието значение, а где-то пусто.

Задача:
На листе 2 должны быть отображены Строки из Листа1, колонки А и Б, но только те где значение Б не пустое...
И в дальнейшем возможно изменение листа1, тоесть какието значения будут стерты, а какие-то добавлены.

Пример:
Лист1:
А Б
1
2 а
3 ап
4
5 ак

То на листе 2 должно быть выведено:
А Б
2 а
3 ап
5 ак

Возможно можно применить скрытие строк.
Фильтр не подходит.

Прошу Вашей помощи.
Просточел вне форума Ответить с цитированием
Старый 11.02.2011, 21:10   #2
R Dmitry
Форумчанин
 
Регистрация: 07.03.2010
Сообщений: 796
По умолчанию

Цитата:
Сообщение от Просточел Посмотреть сообщение
Приветствую!
Имеются 2листа.
На одном есть 2 колонки А и Б. Колонка А заполнена, Б имеет какието значение, а где-то пусто.

Задача:
На листе 2 должны быть отображены Строки из Листа1, колонки А и Б, но только те где значение Б не пустое...
И в дальнейшем возможно изменение листа1, тоесть какието значения будут стерты, а какие-то добавлены.

Пример:
Лист1:
А Б
1
2 а
3 ап
4
5 ак

То на листе 2 должно быть выведено:
А Б
2 а
3 ап
5 ак

Возможно можно применить скрытие строк.
Фильтр не подходит.

Прошу Вашей помощи.
А Вам для себя или преподавателя , что бы зачёт сдать?
макросом или формулой?
Логика?!.... она где то рядом... E_mail: dg_rusak@mail.ru Если спасибо мало: Яндекс . Деньги - 41001731366021 WM R269866874234
R Dmitry вне форума Ответить с цитированием
Старый 11.02.2011, 22:11   #3
Просточел
 
Регистрация: 11.02.2011
Сообщений: 5
По умолчанию

Для меня, с экселем дружу как скретарша на ресепшне :D
Желательно формулой, либо VBA скриптом, НО без нажатий на какие-либо кнопки.

ПРобывал сделать так: (внизу прикреплен файл)
В лист 2 делал следующи: в столбик Б в каждой ячейке писал формулу, что если в Листе1 ячйка пуста то ставился 0. затем делал исходный код(текст) к листу 2:

Private Sub Worksheet_Activate() -

Поиск нуля по второй калонке с использованием For
Если находил то скрывал ячейку
End Sub

НОо скрипт жутко грузил систему тоесть при каждом разе когда открывался Лист 2 происходил поиск 0 и скрытие ячеек. Если слабая банка и очень много данных.... это не вариант
Вложения
Тип файла: rar helpme.rar (13.6 Кб, 14 просмотров)

Последний раз редактировалось Просточел; 11.02.2011 в 22:19.
Просточел вне форума Ответить с цитированием
Старый 11.02.2011, 22:24   #4
Просточел
 
Регистрация: 11.02.2011
Сообщений: 5
По умолчанию

Но это самое простое, а если нужно вывести также непустые значения (также столба А и Б) на другой ЛИСТ куда-нибудь в гущу данных, где скрытие строк не приемлемо )

Последний раз редактировалось Просточел; 11.02.2011 в 22:28.
Просточел вне форума Ответить с цитированием
Старый 12.02.2011, 00:58   #5
R Dmitry
Форумчанин
 
Регистрация: 07.03.2010
Сообщений: 796
По умолчанию

Цитата:
Сообщение от Просточел Посмотреть сообщение
Но это самое простое, а если нужно вывести также непустые значения (также столба А и Б) на другой ЛИСТ куда-нибудь в гущу данных, где скрытие строк не приемлемо )
Не спрашивайте как оно работает..... сам не знаю

Код:
Private Sub Worksheet_Activate()
Application.ScreenUpdating = False
Dim a, x&
a = Sheets("Лист1").[a2].CurrentRegion.Value
For i = 1 To UBound(a)
If Len(a(i, 2)) > 0 Then x = x + 1: a(x, 1) = a(i, 1): a(x, 2) = a(i, 2)
Next
Sheets("Лист2").[a2].Resize(i, 2).Clear
Sheets("Лист2").[a2].Resize(x, 2) = a
Application.ScreenUpdating = True
End Sub
просто замените Ваш код
Логика?!.... она где то рядом... E_mail: dg_rusak@mail.ru Если спасибо мало: Яндекс . Деньги - 41001731366021 WM R269866874234

Последний раз редактировалось R Dmitry; 12.02.2011 в 01:14. Причина: Забыл что без кнопок надо :)
R Dmitry вне форума Ответить с цитированием
Старый 12.02.2011, 09:55   #6
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Можно существенно проще. Без всяких циклов и сравнений:
Код:
Private Sub Worksheet_Activate()
    With Sheets(2)
        Application.ScreenUpdating = False: Sheets(1).Cells.Copy .[A1]: On Error Resume Next
        Intersect(.[B:B], .UsedRange).SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True
    End With
End Sub
Если же нужно скопировать требуемые строки, например, в диапазон листа 2, начиная с ячейки "F5", то можно так (опять же без циклов и сравнений):
Код:
Private Sub Worksheet_Activate()
    With Sheets(1)
        Intersect(.[B:B].ColumnDifferences(.Cells(Rows.Count, 1).End(xlUp).Offset(1, 1)).EntireRow, .[A:B]).Copy Sheets(2).[F5]
    End With
End Sub
Примеры использования во вложенных файлах.
Вложения
Тип файла: rar Пример.rar (13.9 Кб, 13 просмотров)
Тип файла: rar Пример_2.rar (14.2 Кб, 13 просмотров)
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 12.02.2011 в 10:52.
SAS888 вне форума Ответить с цитированием
Старый 12.02.2011, 16:21   #7
Просточел
 
Регистрация: 11.02.2011
Сообщений: 5
По умолчанию

Спасибо всем Вам за помощь!
Просточел вне форума Ответить с цитированием
Старый 12.02.2011, 16:29   #8
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Код:
Private Sub Worksheet_Activate()
    With Sheets(1)
        Intersect(.[B:B].ColumnDifferences(.Cells(Rows.Count, 1).End(xlUp).Offset(1, 1)).EntireRow, .[A:B]).Copy Sheets(2).[F5]
    End With
End Sub
Серег, я бы добавил перед With :
Me.[f5].currentregion.clear
Винегрет может получиться:-)
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728

Последний раз редактировалось kuklp; 12.02.2011 в 16:34.
kuklp вне форума Ответить с цитированием
Старый 13.02.2011, 07:23   #9
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
Винегрет может получиться
Может. Но, думаю, что очищать CurrentRegion нельзя. Если, например, данные помещаются в таблицу, начиная со строки, которая находится под строкой с заголовками (что, скорее всего, так и есть), то с листа исчезнет не только то, что требуется. Т.е. очищать нужно не CurrentRegion, а конкретный диапазон таблицы с данными о котором знает только автор вопроса.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 13.02.2011, 08:07   #10
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
По умолчанию

Ну да. Тогда проще вариант со скрытием. И строки целы и волки сыты:-)
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728
kuklp вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление/скрытие строк kzld Microsoft Office Excel 1 11.11.2010 20:44
Скрытие строк по условию MaxxVer Microsoft Office Excel 11 09.04.2010 05:55
Скрытие неактивных строк Alex19789 Microsoft Office Excel 2 19.02.2010 13:57
Скрытие строк и столбцов Gawwws Microsoft Office Excel 4 19.10.2008 00:02
Скрытие ненужных строк/столбцов Bayers Microsoft Office Excel 4 19.10.2007 12:05