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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 01.04.2008, 08:18   #1
aston
 
Регистрация: 31.03.2008
Сообщений: 6
По умолчанию Поиск данных

В столбец "Подставить" необходимо подставить значение из столбца "Для подстановки" исходя из того, что значения ячеек столбца "Исходные" содержит данные, которые есть в одной из ячеек столбца "Для сравнения" (qq1 содержит 1=>а)
Заранее благодарен
Вложения
Тип файла: rar help.rar (1.7 Кб, 23 просмотров)
aston вне форума
Старый 01.04.2008, 08:39   #2
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Какими средствами нужно решить задачу? Excel, или VBA?
Чем шире угол зрения, тем он тупее.
SAS888 вне форума
Старый 01.04.2008, 09:26   #3
aston
 
Регистрация: 31.03.2008
Сообщений: 6
По умолчанию

Было бы интересно посмотреть оба варианта. А так подойдет тот, который по Вашему мнению проще для реализации
aston вне форума
Старый 01.04.2008, 10:47   #4
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Посмотрите вложение. Запустите макрос "Main".
Вложения
Тип файла: rar help_1.rar (6.4 Кб, 43 просмотров)
Чем шире угол зрения, тем он тупее.
SAS888 вне форума
Старый 01.04.2008, 14:30   #5
aston
 
Регистрация: 31.03.2008
Сообщений: 6
По умолчанию

Спасибо огромное, очень выручили
в итоге получилось следующее (добавил цикл)
Вложения
Тип файла: rar help_2.rar (6.7 Кб, 40 просмотров)
aston вне форума
Старый 01.04.2008, 21:35   #6
ZORRO2005
Форумчанин
 
Аватар для ZORRO2005
 
Регистрация: 26.11.2006
Сообщений: 584
По умолчанию

Предложу вариант без VBA:
Вложения
Тип файла: rar help3.rar (1.8 Кб, 58 просмотров)
ZORRO2005 вне форума
Старый 02.04.2008, 09:24   #7
aston
 
Регистрация: 31.03.2008
Сообщений: 6
По умолчанию

Спасибо за варианты, все работает отлично
aston вне форума
Старый 02.04.2008, 11:25   #8
дмидми
Форумчанин
 
Аватар для дмидми
 
Регистрация: 06.03.2008
Сообщений: 352
По умолчанию Несколько подстановок для одной исходной строки

Невероятным усилием интеллекта я всё же, кажется, понял, зачем был добавлен третий цикл (который, увы, никогда не будет работать), и предлагаю свой вариант для того же самого но без третьего цикла.

Несколько "добрых советов для бани":
1. Всегда начинать модуль строкой Option Explicit.
2. Никогда не использовать goto, кроме как в On Error.
3. В особенности: никогда не использовать goto для организации цикла.
4. По окончании цикла всегда считать переменную цикла неопределённой.

Код:
Option Explicit

Sub Main()
    'Собирает все подстановки, if any, НО!
    'В той последовательности, в которой они перечислены
    'в столбце D,
    'а не в той, которая имеется в строке из столбца A.
    'Так что для приведенных в примере подстановок
    'исходные "a1b9c" и "a9b1c" дадут одинаковый результат "аи".
    'Если подстановок нет, очищает результирующую ячейку.
    
    Dim i As Long, y As Long, s As String
    
    'Начинаем со вторых строк, чтобы пропустить заголовки
    For i = 2& To Cells(Rows.Count, "A").End(xlUp).Row
        s = ""
        For y = 2& To Cells(Rows.Count, "D").End(xlUp).Row
            If InStr(1, Cells(i, "A"), Cells(y, "D"), vbTextCompare) _
            Then s = s & Cells(y, "E")
        Next y
        Cells(i, "B") = s
    Next i
End Sub

Последний раз редактировалось дмидми; 02.04.2008 в 11:38. Причина: Уточнение рекомендаций
дмидми вне форума
Старый 04.04.2008, 11:02   #9
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

дмидми
Цитата:
4. По окончании цикла всегда считать переменную цикла неопределённой.
Ваши замечания слишком категоричны. ИМХО не всегда это так. Иногда, в особенности при досрочном выходе из цикла (например, с помощью "Exit For"), именно переменная цикла и есть искомое значение. В остальном - согласен, если вариант без "GoTo" даст какой-нибудь выигрыш (время выполнения процедуры, уменьшение "объема" кода и т.д.)
По поводу третьего цикла от aston Вы правы (только сейчас посмотрел). Нужно ли "собирать", или еще что-нибудь делать, если совпадают несколько значений, автор темы не оговаривает.
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 04.04.2008 в 11:27.
SAS888 вне форума
Старый 04.04.2008, 16:30   #10
дмидми
Форумчанин
 
Аватар для дмидми
 
Регистрация: 06.03.2008
Сообщений: 352
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Иногда, в особенности при досрочном выходе из цикла (например, с помощью "Exit For"), именно переменная цикла и есть искомое значение.
Воистину так! Но: попытка использовать "внутреннее" значение этой переменной вне цикла почти гарантирует ошибки. Поэтому лучше взять себе за правило сначала значение переменной цикла сохранить в другую переменную (с осмысленным названием), а потом уже вылетать по Exit For.
Цитата:
...если вариант без "GoTo" даст какой-нибудь выигрыш (время выполнения процедуры, уменьшение "объема" кода и т.д.)
Тот же выигрыш (а то и больший - за счёт наглядности кода и, следовательно, большей вероятности принятия разумных решений) можно обычно получить и без GoTo. Но в любом случае за счёт использования GoTo много не выиграешь, - а вот отказ от использования GoTo гарантирует уменьшение количества ошибок в программе.
дмидми вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
База данных приделать поиск demon9999 Помощь студентам 0 03.06.2008 00:26
Поиск данных по частичному совпадению aston Microsoft Office Excel 2 05.04.2008 23:07
МАКРОС!ПОИСК ДАННЫХ. HELP! jungo Microsoft Office Excel 8 02.04.2008 10:50
Поиск по базе данных ERASERROR БД в Delphi 4 14.03.2008 16:34