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

Вход

Регистрация

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

 

= Мир MS Excel/Поиск по двум значениям, и вставка столбца рядом с 2м - Страница 2 - Мир MS Excel

  • Страница 2 из 2
  • «
  • 1
  • 2
Модератор форума: китин, _Boroda_, DrMini  
Поиск по двум значениям, и вставка столбца рядом с 2м
StoTisteg Дата: Понедельник, 21.05.2018, 17:30 | Сообщение № 21
Группа: Авторы
Ранг: Старожил
Сообщений: 1161
Репутация: 103 ±
Замечаний: 0% ±

Excel 2010
он создает и колонку Д и справа

Ну я же Вам написал.
[vba]
Код
If Not (rng Is Nothing Or rna Is Nothing) Then
    .Columns(rna.Column).Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    'Здесь дальнейшее заполнение
    Else
        .Columns(4).Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
        'Здесь дальнейшее заполнение
End if
[/vba]
такой вариант абсолютно исключает.


Интуитивно понятный код - это когда интуитивно понятно, что это код.
 
Ответить
Сообщение
он создает и колонку Д и справа

Ну я же Вам написал.
[vba]
Код
If Not (rng Is Nothing Or rna Is Nothing) Then
    .Columns(rna.Column).Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    'Здесь дальнейшее заполнение
    Else
        .Columns(4).Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
        'Здесь дальнейшее заполнение
End if
[/vba]
такой вариант абсолютно исключает.

Автор - StoTisteg
Дата добавления - 21.05.2018 в 17:30
Amon Дата: Понедельник, 21.05.2018, 17:32 | Сообщение № 22
Группа: Пользователи
Ранг: Участник
Сообщений: 65
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
В общем я понял почему так, потому что я глупый.
Значения то в Д записываются вот и создается ощущение что создается еще один столбец. А он попросту затирается.
Как можно заносить значения в этот столбец? я ведь по сути точного адреса знать не могу чтобы написать как раньше
[vba]
Код
Set rCell = Intersect(.Rows(8), .Cells.Find(test.[c2]).EntireColumn)
[/vba]
Спасибо большое за помощь StoTisteg !


Сообщение отредактировал Amon - Понедельник, 21.05.2018, 17:36
 
Ответить
СообщениеВ общем я понял почему так, потому что я глупый.
Значения то в Д записываются вот и создается ощущение что создается еще один столбец. А он попросту затирается.
Как можно заносить значения в этот столбец? я ведь по сути точного адреса знать не могу чтобы написать как раньше
[vba]
Код
Set rCell = Intersect(.Rows(8), .Cells.Find(test.[c2]).EntireColumn)
[/vba]
Спасибо большое за помощь StoTisteg !

Автор - Amon
Дата добавления - 21.05.2018 в 17:32
StoTisteg Дата: Понедельник, 21.05.2018, 17:43 | Сообщение № 23
Группа: Авторы
Ранг: Старожил
Сообщений: 1161
Репутация: 103 ±
Замечаний: 0% ±

Excel 2010
чтобы столбец создавался слева от столбца в котором уже есть дата 18.05.2018 и второе значение "3 из 6"

В таком случае искать надо в столбце с датой, а не на всём листе, то есть как я Вам изначально и написал:
[vba]
Код
If Not rng is Nothing Then
    Err.Clear
    On Error Resume Next
    Set rng=.Columns(rng.Column).Find(test.[c9])
    If Err.Number=0 Then
        .Columns(rng.Column).Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
        .Columns(rng.Column).ClearFormats
        ...
        Else
            .Columns(4).Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
            .Columns(4).ClearFormats
            ...
    End If
    Else
        .Columns(4).Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
        .Columns(4).ClearFormats
End If
[/vba]
Переменную rna убиваем, она не нужна, вставку и обработку столбца D выносим в отдельный макрос, чтобы не повторять код.


Интуитивно понятный код - это когда интуитивно понятно, что это код.

Сообщение отредактировал StoTisteg - Вторник, 22.05.2018, 11:24
 
Ответить
Сообщение
чтобы столбец создавался слева от столбца в котором уже есть дата 18.05.2018 и второе значение "3 из 6"

В таком случае искать надо в столбце с датой, а не на всём листе, то есть как я Вам изначально и написал:
[vba]
Код
If Not rng is Nothing Then
    Err.Clear
    On Error Resume Next
    Set rng=.Columns(rng.Column).Find(test.[c9])
    If Err.Number=0 Then
        .Columns(rng.Column).Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
        .Columns(rng.Column).ClearFormats
        ...
        Else
            .Columns(4).Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
            .Columns(4).ClearFormats
            ...
    End If
    Else
        .Columns(4).Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
        .Columns(4).ClearFormats
End If
[/vba]
Переменную rna убиваем, она не нужна, вставку и обработку столбца D выносим в отдельный макрос, чтобы не повторять код.

Автор - StoTisteg
Дата добавления - 21.05.2018 в 17:43
RAN Дата: Понедельник, 21.05.2018, 18:06 | Сообщение № 24
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Поскольку одному влом сделать пример чтобы показать хотелку, а другому влом сделать пример чтобы, проверить код, ваша переброска фрагментами кода затянется надолго. :)
[b]StoTisteg[/b], ошибка в коде есть, и VBA ее достаточно однозначно идентифицирует.
(столбцов в Nothing нет)

PS виноват, разглядывая фрагменты прозевал первый set.


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

Сообщение отредактировал RAN - Понедельник, 21.05.2018, 21:48
 
Ответить
СообщениеПоскольку одному влом сделать пример чтобы показать хотелку, а другому влом сделать пример чтобы, проверить код, ваша переброска фрагментами кода затянется надолго. :)
[b]StoTisteg[/b], ошибка в коде есть, и VBA ее достаточно однозначно идентифицирует.
(столбцов в Nothing нет)

PS виноват, разглядывая фрагменты прозевал первый set.

Автор - RAN
Дата добавления - 21.05.2018 в 18:06
Amon Дата: Понедельник, 21.05.2018, 18:11 | Сообщение № 25
Группа: Пользователи
Ранг: Участник
Сообщений: 65
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
RAN, Вы правы, я что-то даже не додумался. Пример вложил в шапку, спасибо.


Сообщение отредактировал Amon - Понедельник, 21.05.2018, 18:50
 
Ответить
СообщениеRAN, Вы правы, я что-то даже не додумался. Пример вложил в шапку, спасибо.

Автор - Amon
Дата добавления - 21.05.2018 в 18:11
StoTisteg Дата: Вторник, 22.05.2018, 11:22 | Сообщение № 26
Группа: Авторы
Ранг: Старожил
Сообщений: 1161
Репутация: 103 ±
Замечаний: 0% ±

Excel 2010
RAN, проблема имеющегося кода в том, что он замусорен почти до нечитаемости... Проще новых наделать, чем этих отмыть :)


Интуитивно понятный код - это когда интуитивно понятно, что это код.
 
Ответить
СообщениеRAN, проблема имеющегося кода в том, что он замусорен почти до нечитаемости... Проще новых наделать, чем этих отмыть :)

Автор - StoTisteg
Дата добавления - 22.05.2018 в 11:22
Mikael Дата: Четверг, 24.05.2018, 17:44 | Сообщение № 27
Группа: Пользователи
Ранг: Участник
Сообщений: 80
Репутация: 31 ±
Замечаний: 0% ±

Excel 2010
Всем доброго дня!
Amon, если правильно понял, что Вы хотите:


Функция SetRng возвращает ячейку по двум условиям поиска дата и маршрут.
Процедура InsertColumn добавляет столбец слева от найденной ячейки.

Процедура Main - это пример как использовать функцию и процедуру, и бонус-подсказка как можно все организовать через Application.Caller и избавиться от огромного полотна однотипных макросов.

Предполагается, что тест всегда начинается с 1 прямоугольника, поэтому новый столбец создается при нажатии на него.
К сообщению приложен файл: 3744023.xlsm (60.3 Kb)
 
Ответить
СообщениеВсем доброго дня!
Amon, если правильно понял, что Вы хотите:


Функция SetRng возвращает ячейку по двум условиям поиска дата и маршрут.
Процедура InsertColumn добавляет столбец слева от найденной ячейки.

Процедура Main - это пример как использовать функцию и процедуру, и бонус-подсказка как можно все организовать через Application.Caller и избавиться от огромного полотна однотипных макросов.

Предполагается, что тест всегда начинается с 1 прямоугольника, поэтому новый столбец создается при нажатии на него.

Автор - Mikael
Дата добавления - 24.05.2018 в 17:44
Amon Дата: Вторник, 29.05.2018, 16:53 | Сообщение № 28
Группа: Пользователи
Ранг: Участник
Сообщений: 65
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
если правильно понял, что Вы хотите

Добрый день, Спасибо вам огромное за ответ очень много полезного для себя подчеркнул. У меня пара вопросов осталась , Если только с датой то он правильно вставляет рядом маршруты.
Что необходимо изменить чтобы он так же делал но если в ячейке будет не только дата, а дата и время в формате дд.мм.гггг чч:мм
И второй очень важный вопрос для меня, как мне обращаться к столбцу который создался не в (Д) а рядом с маршрутом, как правильно задавать пересечение и с чем)
В данный момент фигур уже нет есть пользовательские формы на каждый маршрут.
И как мне бы такую же штуку примерно хотя бы вставить в код своей пользовательской формы?
Пример кода вот


Сообщение отредактировал Amon - Вторник, 29.05.2018, 16:56
 
Ответить
Сообщение
если правильно понял, что Вы хотите

Добрый день, Спасибо вам огромное за ответ очень много полезного для себя подчеркнул. У меня пара вопросов осталась , Если только с датой то он правильно вставляет рядом маршруты.
Что необходимо изменить чтобы он так же делал но если в ячейке будет не только дата, а дата и время в формате дд.мм.гггг чч:мм
И второй очень важный вопрос для меня, как мне обращаться к столбцу который создался не в (Д) а рядом с маршрутом, как правильно задавать пересечение и с чем)
В данный момент фигур уже нет есть пользовательские формы на каждый маршрут.
И как мне бы такую же штуку примерно хотя бы вставить в код своей пользовательской формы?
Пример кода вот

Автор - Amon
Дата добавления - 29.05.2018 в 16:53
Mikael Дата: Вторник, 29.05.2018, 23:10 | Сообщение № 29
Группа: Пользователи
Ранг: Участник
Сообщений: 80
Репутация: 31 ±
Замечаний: 0% ±

Excel 2010
Если только с датой то он правильно вставляет

Проблема в том как эксель воспринимает даты. Попробуйте в ячейке test.[c2] поменять формат на числовой или текстовый, посмотрите что получится.

если в ячейке будет не только дата, а дата и время в формате дд.мм.гггг чч:мм

Нужен новый файл-пример. Возможно поможет, если в функции SetRng искать дату вот так:
[vba]
Код
        'ищем дату
        Set rng = .Cells.Find(Format(test.[c2], "dd.mm.yyyy"), .[a1])
[/vba]
как мне обращаться к столбцу который создался не в (Д) а рядом с маршрутом, как правильно задавать пересечение

после создания столбца еще раз используйте SetRng - она вернет ячейку с датой и маршрутом созданного столбца. Я в Main показывал как это работает. Примерно так:
[vba]
Код
             If Me.Label1.Caption = Results.Range("b8").Value And Me.Label2.Caption = Results.Range("c8").Value Then
                    Set rCell = Intersect(.Rows(8), SetRng.EntireColumn)                    ' как тут должно быть прописано?
[/vba]
Функция SetRng всегда возвращает ячейку исходя из двух условий поиска, на выходе получаем 4 возможных варианта: 1. если нет даты - ячейка "D1"; 2. если есть дата, но нет маршрута, ищем маршрут меньше нашего с этой датой; 3. если нет маршрута меньше нашего, вставляем справа от большего; 4. нашли ячейку с датой и маршрутом.

И как мне бы такую же штуку примерно хотя бы вставить в код своей пользовательской формы?

Нужен файл-пример, так можно будет говорить по существу.
 
Ответить
Сообщение
Если только с датой то он правильно вставляет

Проблема в том как эксель воспринимает даты. Попробуйте в ячейке test.[c2] поменять формат на числовой или текстовый, посмотрите что получится.

если в ячейке будет не только дата, а дата и время в формате дд.мм.гггг чч:мм

Нужен новый файл-пример. Возможно поможет, если в функции SetRng искать дату вот так:
[vba]
Код
        'ищем дату
        Set rng = .Cells.Find(Format(test.[c2], "dd.mm.yyyy"), .[a1])
[/vba]
как мне обращаться к столбцу который создался не в (Д) а рядом с маршрутом, как правильно задавать пересечение

после создания столбца еще раз используйте SetRng - она вернет ячейку с датой и маршрутом созданного столбца. Я в Main показывал как это работает. Примерно так:
[vba]
Код
             If Me.Label1.Caption = Results.Range("b8").Value And Me.Label2.Caption = Results.Range("c8").Value Then
                    Set rCell = Intersect(.Rows(8), SetRng.EntireColumn)                    ' как тут должно быть прописано?
[/vba]
Функция SetRng всегда возвращает ячейку исходя из двух условий поиска, на выходе получаем 4 возможных варианта: 1. если нет даты - ячейка "D1"; 2. если есть дата, но нет маршрута, ищем маршрут меньше нашего с этой датой; 3. если нет маршрута меньше нашего, вставляем справа от большего; 4. нашли ячейку с датой и маршрутом.

И как мне бы такую же штуку примерно хотя бы вставить в код своей пользовательской формы?

Нужен файл-пример, так можно будет говорить по существу.

Автор - Mikael
Дата добавления - 29.05.2018 в 23:10
Amon Дата: Среда, 30.05.2018, 10:30 | Сообщение № 30
Группа: Пользователи
Ранг: Участник
Сообщений: 65
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Нужен файл-пример

Вот я сделал пример форму 1 выгрузил из нескольких.
К сообщению приложен файл: MFO_Dogovor.xlsm (37.2 Kb) · Resultati.xlsm (43.0 Kb)
 
Ответить
Сообщение
Нужен файл-пример

Вот я сделал пример форму 1 выгрузил из нескольких.

Автор - Amon
Дата добавления - 30.05.2018 в 10:30
Mikael Дата: Среда, 30.05.2018, 15:07 | Сообщение № 31
Группа: Пользователи
Ранг: Участник
Сообщений: 80
Репутация: 31 ±
Замечаний: 0% ±

Excel 2010
К сообщению приложен файл: MFO_Dogovor.xlsm(37.2 Kb) · Resultati.xlsm(43.0 Kb)

В этом примере нет маршрутов, дата и время в test.[c2] обновляется автоматически при запуске формы. Не вижу проблем: каждый прогон теста новая дата и время, соответственно новый столбец всегда вставляется в "D". Без второго значения для поиска SetRng тут не нужен.

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



Добавил файл.
К сообщению приложен файл: 3805027.xlsm (40.2 Kb)


Сообщение отредактировал Mikael - Среда, 30.05.2018, 15:09
 
Ответить
Сообщение
К сообщению приложен файл: MFO_Dogovor.xlsm(37.2 Kb) · Resultati.xlsm(43.0 Kb)

В этом примере нет маршрутов, дата и время в test.[c2] обновляется автоматически при запуске формы. Не вижу проблем: каждый прогон теста новая дата и время, соответственно новый столбец всегда вставляется в "D". Без второго значения для поиска SetRng тут не нужен.

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



Добавил файл.

Автор - Mikael
Дата добавления - 30.05.2018 в 15:07
Amon Дата: Среда, 30.05.2018, 17:57 | Сообщение № 32
Группа: Пользователи
Ранг: Участник
Сообщений: 65
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
В этом примере нет маршрутов

Извиняюсь я не то загрузил. Я так разбил по листам чтобы не приходилось искать но это не удобно. Вот тот же док с маршрутами но с формой.
Разница просто в том что тут все в одном листе (
К сообщению приложен файл: 3542350.xlsm (59.0 Kb) · 1225514.xlsm (18.2 Kb)
 
Ответить
Сообщение
В этом примере нет маршрутов

Извиняюсь я не то загрузил. Я так разбил по листам чтобы не приходилось искать но это не удобно. Вот тот же док с маршрутами но с формой.
Разница просто в том что тут все в одном листе (

Автор - Amon
Дата добавления - 30.05.2018 в 17:57
Mikael Дата: Четверг, 31.05.2018, 17:26 | Сообщение № 33
Группа: Пользователи
Ранг: Участник
Сообщений: 80
Репутация: 31 ±
Замечаний: 0% ±

Excel 2010
Доброго дня.

Пробуйте. Так Вы хотели?
К сообщению приложен файл: 5274835.xlsm (62.8 Kb)
 
Ответить
СообщениеДоброго дня.

Пробуйте. Так Вы хотели?

Автор - Mikael
Дата добавления - 31.05.2018 в 17:26
Amon Дата: Пятница, 01.06.2018, 10:23 | Сообщение № 34
Группа: Пользователи
Ранг: Участник
Сообщений: 65
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Так Вы хотели

Да, спасибо вам большое. Теперь буду искать и смотреть как это у вас так все получилось. Изучать все что вы написали. Потому что мне стыдно за себя) Вроде ищу ищу постоянно что да как а пишу все примитивно, а вы просто взяли и сделали все в 1 форме, а у меня их было 6ть)))) Спасибо!
 
Ответить
Сообщение
Так Вы хотели

Да, спасибо вам большое. Теперь буду искать и смотреть как это у вас так все получилось. Изучать все что вы написали. Потому что мне стыдно за себя) Вроде ищу ищу постоянно что да как а пишу все примитивно, а вы просто взяли и сделали все в 1 форме, а у меня их было 6ть)))) Спасибо!

Автор - Amon
Дата добавления - 01.06.2018 в 10:23
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск:

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