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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.02.2014, 14:13   #51
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от alex77755 Посмотреть сообщение
Пугает автора:
Select Case
Ему лучше гора If
Да как то не могу въехать, почему IF хуже?
Вот тут, проще не бывает - по моему!!
Код:
            If NumAuto = "АН 0308 ЕТ" Then iRow = 2
            If NumAuto = "АН 2950 НР" Then iRow = 3
            If NumAuto = "АН 3824 ІН" Then iRow = 4
            If NumAuto = "АН 3962 ЕР" Then iRow = 5
            If NumAuto = "АН 5097 ЕМ" Then iRow = 6
            If NumAuto = "АН 7144 ЕО" Then iRow = 7
            If NumAuto = "АН 7145 ЕО" Then iRow = 8
            If NumAuto = "АН 7146 ЕО" Then iRow = 9
            If NumAuto = "АН 7440 ЕР" Then iRow = 10
            If NumAuto = "АН 7484 ЕР" Then iRow = 11
            If NumAuto = "АН 7880 СР" Then iRow = 12
            If NumAuto = "АН 8102 НТ" Then iRow = 13
            If NumAuto = "АН 8266 ЕО" Then iRow = 14
            If NumAuto = "АН 8267 ЕО" Then iRow = 15
            If NumAuto = "АН 8835 ЕР" Then iRow = 16
            If NumAuto = "АН 9357 ЕР" Then iRow = 17
            If NumAuto = "АН 9358 ЕР" Then iRow = 18
            If NumAuto = "АН 9359 ЕР" Then iRow = 19

        With Sheets(6).Cells
                .Cells(iRow, 2) = .Cells(iRow, 2) + Cells(ActiveCell.Row, "I"): _
                    .Cells(iRow, 3) = .Cells(iRow, 3) + Cells(ActiveCell.Row, "AA"): _
                    .Cells(iRow, 4) = .Cells(iRow, 4) + Cells(ActiveCell.Row, "AD"): _
                .Cells(iRow, 5) = .Cells(iRow, 5) + Cells(ActiveCell.Row, "AF")
            End With
                iRow = 0: Cells(i + 1, "A").Activate
Кстати, тут и пример для темы(синим)
http://www.programmersforum.ru/showthread.php?t=77650

Последний раз редактировалось valerij; 22.02.2014 в 14:23.
valerij вне форума Ответить с цитированием
Старый 22.02.2014, 15:33   #52
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Цитата:
Вот тут, проще не бывает - по моему!!
еще как бывает
Код:
  NumsAuto = "02:АН 0308 ЕТ 03:АН 2950 НР 04:АН 3824 ІН 05:АН 3962 ЕР 06:АН 5097 ЕМ 07:АН 7144 ЕО 08:АН 7145 ЕО 09:АН 7146 ЕО 10:АН 7440 ЕР"
  NumsAuto = NumsAuto & " 11:АН 7484 ЕР 12:АН 7880 СР 13:АН 8102 НТ 14:АН 8266 ЕО 15:АН 8267 ЕО 16:АН 8835 ЕР 17:АН 9357 ЕР 18:АН 9358 ЕР 19:АН 9359 ЕР"
  iRow = Val(Mid(NumsAuto, InStr(NumsAuto, NumAuto) - 3, 2))
или так
Код:
                        ' 1          2          3          4          5          6          7          8          9          10
             NumsAuto = ":ББ ЦЦЦЦ ББ:АН 0308 ЕТ:АН 2950 НР:АН 3824 ІН:АН 3962 ЕР:АН 5097 ЕМ:АН 7144 ЕО:АН 7145 ЕО:АН 7146 ЕО:АН 7440 ЕР"
  NumsAuto = NumsAuto & ":АН 7484 ЕР:АН 7880 СР:АН 8102 НТ:АН 8266 ЕО:АН 8267 ЕО:АН 8835 ЕР:АН 9357 ЕР:АН 9358 ЕР:АН 9359 ЕР"
    iRow = (InStr(NumsAuto, NumAuto) - 2) / 11 + 1
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете

Последний раз редактировалось IgorGO; 22.02.2014 в 15:47.
IgorGO вне форума Ответить с цитированием
Старый 22.02.2014, 16:12   #53
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
еще как бывает
М - да, вопроса нет.
Профи - профи.

Как это всё работает?
valerij вне форума Ответить с цитированием
Старый 22.02.2014, 16:23   #54
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

записываешь функцию:
Код:
Function AutoRow(NumAuto as string) as long
  Dim NumsAuto as string
                        ' 1          2          3          4          5          6          7          8          9          10
             NumsAuto = ":ББ ЦЦЦЦ ББ:АН 0308 ЕТ:АН 2950 НР:АН 3824 ІН:АН 3962 ЕР:АН 5097 ЕМ:АН 7144 ЕО:АН 7145 ЕО:АН 7146 ЕО:АН 7440 ЕР"
  NumsAuto = NumsAuto & ":АН 7484 ЕР:АН 7880 СР:АН 8102 НТ:АН 8266 ЕО:АН 8267 ЕО:АН 8835 ЕР:АН 9357 ЕР:АН 9358 ЕР:АН 9359 ЕР"
  AutoRow = (InStr(NumsAuto, NumAuto) - 2) / 11 + 1
End Function
а вместо всех твоих If пишешь одну строку:
Код:
iRow = AutoRow(NumAuto)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 22.02.2014, 16:26   #55
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Ещё ведь можно использовать ВЫБОР() или ИНДЕКС() по виртуальному массиву. Или где-то в начале кода загнать все эти пары в словарь, затем просто когда нужно брать значение из словаря. Я бы делал именно так, особенно если этот выбор нужно делать не один раз.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 23.02.2014, 01:20   #56
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
записываешь функцию:
~ понял, но!!
1. Что это?
:ББ ЦЦЦЦ ББ:
2. В форме ввёл - АН 0308 ЕТ
Как iRow = 2 ?

Как это работает, я обычно через msgbox, разбираюсь.

А тут, что бы разобраться, дюже много данных вводить нужно, но сделал так, зачем тогда iRow, если AutoRow соответствует очереди?
Код:
Sub zxc()
NumAuto = "АН 2950 НР" ' Меняю в ручную
                        ' 1          2          3          4          5          6          7          8          9          10
             NumsAuto = ":ББ ЦЦЦЦ ББ:АН 0308 ЕТ:АН 2950 НР:АН 3824 ІН:АН 3962 ЕР:АН 5097 ЕМ:АН 7144 ЕО:АН 7145 ЕО:АН 7146 ЕО:АН 7440 ЕР"
  NumsAuto = NumsAuto & ":АН 7484 ЕР:АН 7880 СР:АН 8102 НТ:АН 8266 ЕО:АН 8267 ЕО:АН 8835 ЕР:АН 9357 ЕР:АН 9358 ЕР:АН 9359 ЕР"
  AutoRow = (InStr(NumsAuto, NumAuto) - 2) / 11 + 1
  'iRow = AutoRow(NumAuto) ' - ОШИБКА????

  MsgBox AutoRow
  
End Sub
И почему NumsAuto = - дважды, что бы уменьшить длину записи?

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Ещё ведь можно использовать ВЫБОР() или ИНДЕКС() по виртуальному массиву. Или где-то в начале кода загнать все эти пары в словарь, затем просто когда нужно брать значение из словаря. Я бы делал именно так, особенно если этот выбор нужно делать не один раз.
А мона пример?
То же ~ понимаю, но лучше с примером.
valerij вне форума Ответить с цитированием
Старый 23.02.2014, 02:44   #57
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Цитата:
'iRow = AutoRow(NumAuto) ' - ОШИБКА????
Нет там никакой ошибки.
Бросай ты это дело,читай буквари.
Изображения
Тип файла: gif Ошибка.gif (20.9 Кб, 46 просмотров)
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 23.02.2014, 02:52   #58
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Я по формулам учить не буду, я по словарям
Код:
Sub ttt()

'словарь
    With CreateObject("scripting.dictionary"): .comparemode = 1
        'заполняем
        .Item("АН 0308 ЕТ") = 22
        .Item("АН 2950 НР") = 33
        .Item("АН 3824 ІН") = 44


        'ниже код, в котором периодически требуется найти число по названию:
        MsgBox .Item("АН 2950 НР")

        'или может так проще понять как применить:
        NumAuto = "АН 0308 ЕТ"
        iRow = .Item(NumAuto)
        MsgBox iRow

    End With

End Sub
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 23.02.2014 в 02:57.
Hugo121 вне форума Ответить с цитированием
Старый 23.02.2014, 13:13   #59
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от doober Посмотреть сообщение
Нет там никакой ошибки.
Бросай ты это дело,читай буквари.
Так как у тебя, нет.
Но меня так не устраивает.
Я чуток не правильно написал, так как у меня выражение - iRow = (InStr(NumsAuto, NumAuto) - 2) / 11 + 1
а выражение:
'iRow = AutoRow(NumAuto) не имеет смысла.
Мой окончательный вариант, IgorGO Спасибо.
1. Понял, что это и зачем!!
:ББ ЦЦЦЦ ББ:

Код:
NumsAuto = ":ББ ЦЦЦЦ ББ:АН 0308 ЕТ:АН 2950 НР:АН 3824 ІН:АН 3962 ЕР:АН 5097 ЕМ:АН 7144 ЕО:АН 7145 ЕО:АН 7146 ЕО:АН 7440 ЕР"
  NumsAuto = NumsAuto & ":АН 7484 ЕР:АН 7880 СР:АН 8102 НТ:АН 8266 ЕО:АН 8267 ЕО:АН 8835 ЕР:АН 9357 ЕР:АН 9358 ЕР:АН 9359 ЕР"
    iRow = (InStr(NumsAuto, NumAuto) - 2) / 11 + 1
И букварь мне не нужен, я не занимаюсь продажей макросов, а модернизирую свои старые.
У меня всё работает, просто из любопытства спрашивал....

Последний раз редактировалось valerij; 23.02.2014 в 15:43.
valerij вне форума Ответить с цитированием
Старый 27.02.2014, 22:59   #60
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Господа, опять нужна помощь.
Задача дюже сложная, думаю и вам будет интересно.
Одну часть задачи мы уже сделали.

Нужно в листе ОТЧЁТ по № -м машин собрать 4-е значения из листа Расход горючего.
Там в шапке видно, ну хотя бы за один месяц 2, 3 машины.
Я понимаю, что эксель хранит данные, только в ячейках, поэтому пусть при выборе месяца записывает в невидимую область листа, а потом переносит в таблицу.

Я никогда с поисками ни чего не делал, думал не понадобится, ан нет...

Спасибо.

З. Ы.
Там есть уже макрос - выбор месяца, выбор № машины.
Если это дюже сложно и хлопотно, тогда и фиг с ним, ограничимся подсказкой мне алгоритма.
Вложения
Тип файла: rar 2014.rar (59.7 Кб, 7 просмотров)

Последний раз редактировалось valerij; 28.02.2014 в 00:02.
valerij вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите упростить простой макрос frantic150 Microsoft Office Excel 2 23.06.2009 04:55
проверьте плз код!можно ли его оптимизировать или упростить? -ushёl- Помощь студентам 10 23.04.2009 21:07
Вот! Тот макрос, который заставил обратится меня на этот форум! Дмитрий Фукс Microsoft Office Excel 6 10.04.2009 10:29
Запереть макрос можно? zander Microsoft Office Excel 1 15.02.2009 15:40