Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Макрос "Скрыть строки в пределах определенного раздела" - Страница 3 - Мир MS Excel

Старая форма входа
  • Страница 3 из 3
  • «
  • 1
  • 2
  • 3
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Макрос "Скрыть строки в пределах определенного раздела" (Макросы/Sub)
Макрос "Скрыть строки в пределах определенного раздела"
Alex_ST Дата: Вторник, 30.09.2014, 11:41 | Сообщение № 41
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3208
Репутация: 609 ±
Замечаний: 0% ±

2003
Андрей, а при чём тут это? Где цветовая дифференциация штанов и открытость заголовков?
Да и с [vba]
Код
      If Len(Cells(i, "D")) Then
          Else
             If Len(Cells(i, "E")) Then
             Else
                If Len(Cells(i, "F")) Then
                   Rows(i).Hidden = True
                End If
             End If
          End If
[/vba]
ты не перемудрил ли?
Может быть так покороче будет?[vba]
Код
      Rows(i).Hidden = Len(Cells(i, "D")) + Len(Cells(i, "E")) + Len(Cells(i, "F")) = 0
[/vba]
И какой смысл в цикле снизу вверх если мы не удаляем, а всего лишь скрываем строки?



С уважением,
Алексей
MS Excel 2003 - the best!!!


Сообщение отредактировал Alex_ST - Вторник, 30.09.2014, 12:37
 
Ответить
СообщениеАндрей, а при чём тут это? Где цветовая дифференциация штанов и открытость заголовков?
Да и с [vba]
Код
      If Len(Cells(i, "D")) Then
          Else
             If Len(Cells(i, "E")) Then
             Else
                If Len(Cells(i, "F")) Then
                   Rows(i).Hidden = True
                End If
             End If
          End If
[/vba]
ты не перемудрил ли?
Может быть так покороче будет?[vba]
Код
      Rows(i).Hidden = Len(Cells(i, "D")) + Len(Cells(i, "E")) + Len(Cells(i, "F")) = 0
[/vba]
И какой смысл в цикле снизу вверх если мы не удаляем, а всего лишь скрываем строки?

Автор - Alex_ST
Дата добавления - 30.09.2014 в 11:41
Wasilich Дата: Вторник, 30.09.2014, 13:00 | Сообщение № 42
Группа: Друзья
Ранг: Старожил
Сообщений: 1232
Репутация: 326 ±
Замечаний: 0% ±

2003
Это Wasilic, хочет видимо свой вариант проработать.
Да уж. Подобрался ближе к результату но, строки 45, 48, 51, 62 и 76 не вяжутся ни к какому критерию.
Не знаю, есть ли смысл, но может быть добавить еще дополнительный столбец (слева) и в нем пометить пункты определенным знаком?

Как сказал Алексей:
Ещё какой смысл! Всё намного упростится.
Наверное в данном случае это идеальный вариант. Легче одним кликом поставить метку нежели красить ячейки.
К сообщению приложен файл: 9198473.xls (64.5 Kb)


Сообщение отредактировал Wasilic - Вторник, 30.09.2014, 13:07
 
Ответить
Сообщение
Это Wasilic, хочет видимо свой вариант проработать.
Да уж. Подобрался ближе к результату но, строки 45, 48, 51, 62 и 76 не вяжутся ни к какому критерию.
Не знаю, есть ли смысл, но может быть добавить еще дополнительный столбец (слева) и в нем пометить пункты определенным знаком?

Как сказал Алексей:
Ещё какой смысл! Всё намного упростится.
Наверное в данном случае это идеальный вариант. Легче одним кликом поставить метку нежели красить ячейки.

Автор - Wasilich
Дата добавления - 30.09.2014 в 13:00
Лорик Дата: Вторник, 30.09.2014, 13:40 | Сообщение № 43
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 109
Репутация: 1 ±
Замечаний: 0% ±

Excel 2010
Легче одним кликом поставить метку

Интересный вариант, но по времени занимает столько же, как и скрыть строки вручную. :(


Сообщение отредактировал Лорик - Вторник, 30.09.2014, 13:50
 
Ответить
Сообщение
Легче одним кликом поставить метку

Интересный вариант, но по времени занимает столько же, как и скрыть строки вручную. :(

Автор - Лорик
Дата добавления - 30.09.2014 в 13:40
RAN Дата: Вторник, 30.09.2014, 13:47 | Сообщение № 44
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Может быть так покороче будет?

Покороче будет. Правда, работать не будет, но это мелочи. :D


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение
Может быть так покороче будет?

Покороче будет. Правда, работать не будет, но это мелочи. :D

Автор - RAN
Дата добавления - 30.09.2014 в 13:47
Alex_ST Дата: Вторник, 30.09.2014, 14:39 | Сообщение № 45
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3208
Репутация: 609 ±
Замечаний: 0% ±

2003
Андрей, извини, но так диалог не ведётся.
Если имеешь замечания или возражения, выскажи их, но обоснуй чтобы научить людей.
Если нет обоснования, то лучше промолчи.
Да и отвечать только на то, что тебе хочется, но при этом явно игнорировать указания на свои ошибки (это по поводу цикла снизу вверх) тоже негодная манера общения.



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеАндрей, извини, но так диалог не ведётся.
Если имеешь замечания или возражения, выскажи их, но обоснуй чтобы научить людей.
Если нет обоснования, то лучше промолчи.
Да и отвечать только на то, что тебе хочется, но при этом явно игнорировать указания на свои ошибки (это по поводу цикла снизу вверх) тоже негодная манера общения.

Автор - Alex_ST
Дата добавления - 30.09.2014 в 14:39
Wasilich Дата: Вторник, 30.09.2014, 16:03 | Сообщение № 46
Группа: Друзья
Ранг: Старожил
Сообщений: 1232
Репутация: 326 ±
Замечаний: 0% ±

2003
по времени занимает столько же, как и скрыть строки вручную.
%)
 
Ответить
Сообщение
по времени занимает столько же, как и скрыть строки вручную.
%)

Автор - Wasilich
Дата добавления - 30.09.2014 в 16:03
RAN Дата: Вторник, 30.09.2014, 16:51 | Сообщение № 47
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Леш, по поводу ошибки не согласен, ибо в данном случае фиолетово, сверху вниз, или снизу верх. Я и задумываться не стал, спер у Wasilic'а.
А вот твоя "короче" должна выглядеть так
[vba]
Код
Rows(i).Hidden = (Len(Cells(i, "D")) + Len(Cells(i, "E"))) + (Len(Cells(i, "F")) = 0) = 0
[/vba]

Вдобавок это неудобочитаемо, да и скорострельность ниже.


Быть или не быть, вот в чем загвоздка!

Сообщение отредактировал RAN - Вторник, 30.09.2014, 16:58
 
Ответить
СообщениеЛеш, по поводу ошибки не согласен, ибо в данном случае фиолетово, сверху вниз, или снизу верх. Я и задумываться не стал, спер у Wasilic'а.
А вот твоя "короче" должна выглядеть так
[vba]
Код
Rows(i).Hidden = (Len(Cells(i, "D")) + Len(Cells(i, "E"))) + (Len(Cells(i, "F")) = 0) = 0
[/vba]

Вдобавок это неудобочитаемо, да и скорострельность ниже.

Автор - RAN
Дата добавления - 30.09.2014 в 16:51
Alex_ST Дата: Вторник, 30.09.2014, 21:52 | Сообщение № 48
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3208
Репутация: 609 ±
Замечаний: 0% ±

2003
А вот твоя "короче" должна выглядеть так
[vba]
Код
Rows(i).Hidden = (Len(Cells(i, "D")) + Len(Cells(i, "E"))) + (Len(Cells(i, "F")) = 0) = 0
[/vba]

shock
"Не верю!"
"От перестановки мест слагаемых сумма не меняется" точно так же как и от расставления любого количества скобок между тремя слагаемыми.
А складываются именно АРИФМЕТИЧЕСКИ ЦЕЛЫЕ ПОЛОЖИТЕЛЬНЫЕ ЧИСЛА (Long).
Поэтому X+Y+Z == ((X)+Y)+Z
Ну а по поводу логики выражения, так двойное сравнение с нулём вместо логической инверсии как раз и служит тому, чтобы сделать код неудобочитаемым.
Ведь если X+Y+Z может дать результат как 0 (ЛОЖЬ), так и ≥ 1 (ИСТИНА), то имеются всего два варианта:
1. Если X+Y+Z = 0 то логическое выражение X+Y+Z = 0 вернёт ИСТИНА (т.е. -1). А следовательно выражение (X+Y+Z = 0) = 0 вернёт ЛОЖЬ.
2. Если X+Y+Z ≥ 1 то логическое выражение X+Y+Z = 0 вернёт ЛОЖЬ (т.е. 0). А следовательно выражение (X+Y+Z = 0) = 0 вернёт ИСТИНА.
Т.е. налицо обычная логическая инверсия.



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
Сообщение
А вот твоя "короче" должна выглядеть так
[vba]
Код
Rows(i).Hidden = (Len(Cells(i, "D")) + Len(Cells(i, "E"))) + (Len(Cells(i, "F")) = 0) = 0
[/vba]

shock
"Не верю!"
"От перестановки мест слагаемых сумма не меняется" точно так же как и от расставления любого количества скобок между тремя слагаемыми.
А складываются именно АРИФМЕТИЧЕСКИ ЦЕЛЫЕ ПОЛОЖИТЕЛЬНЫЕ ЧИСЛА (Long).
Поэтому X+Y+Z == ((X)+Y)+Z
Ну а по поводу логики выражения, так двойное сравнение с нулём вместо логической инверсии как раз и служит тому, чтобы сделать код неудобочитаемым.
Ведь если X+Y+Z может дать результат как 0 (ЛОЖЬ), так и ≥ 1 (ИСТИНА), то имеются всего два варианта:
1. Если X+Y+Z = 0 то логическое выражение X+Y+Z = 0 вернёт ИСТИНА (т.е. -1). А следовательно выражение (X+Y+Z = 0) = 0 вернёт ЛОЖЬ.
2. Если X+Y+Z ≥ 1 то логическое выражение X+Y+Z = 0 вернёт ЛОЖЬ (т.е. 0). А следовательно выражение (X+Y+Z = 0) = 0 вернёт ИСТИНА.
Т.е. налицо обычная логическая инверсия.

Автор - Alex_ST
Дата добавления - 30.09.2014 в 21:52
RAN Дата: Вторник, 30.09.2014, 22:43 | Сообщение № 49
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
"Не верю!"

Я обычно сначала проверяю. :p
If Len(Cells(i, "F")) then (Len(Cells(i, "F")) = 0) = False


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение
"Не верю!"

Я обычно сначала проверяю. :p
If Len(Cells(i, "F")) then (Len(Cells(i, "F")) = 0) = False

Автор - RAN
Дата добавления - 30.09.2014 в 22:43
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Макрос "Скрыть строки в пределах определенного раздела" (Макросы/Sub)
  • Страница 3 из 3
  • «
  • 1
  • 2
  • 3
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!