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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.11.2011, 15:53   #1
Alex.Q
Новичок
Джуниор
 
Регистрация: 16.11.2011
Сообщений: 3
По умолчанию Выборка из 1-й таблици по данным 2-й. Сохранение результата в 3-ю

Здравствуйте, уважаемые специалисты.
Помогите, пожалуйста, со следующей задачей:

1) Есть 1-й лист, таблица - прайс лист с артикулами (столбец "С", уникальные) товаров и другой информацией.
2) Есть 2-й лист, таблица - в столбце "А" храниться некоторое число артикулов.
3) Необходимо произвести выборку строк товаров из первой таблицы по артикульным номерам из второй таблицы. Результат выборки (полные строки товаров) сохранить в 3-й таблице.

Товары - уникальны, артикульные номера - не повторяются.

Exell 2011 MacOs

Заранее, большое спасибо за помощь!

ПС, прошу прощения за опечатку в названии темы: "...таблицы..."
Вложения
Тип файла: zip price_sample.xlsx.zip (44.0 Кб, 17 просмотров)
Alex.Q вне форума Ответить с цитированием
Старый 16.11.2011, 16:19   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

режим ссылок R1C1
на листе Art_numbers, в колонки с 2 по 9 формулу:
Код:
=ЕСЛИ(RC1="";"";ИНДЕКС(Price_list!C1:C9;ПОИСКПОЗ(Art_numbers!RC1;Price_list!C3;);СТОЛБЕЦ()))
это будет без листа РЕЗУЛЬТАТЫ
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 16.11.2011, 16:30   #3
Alex.Q
Новичок
Джуниор
 
Регистрация: 16.11.2011
Сообщений: 3
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
режим ссылок R1C1
на листе Art_numbers, в колонки с 2 по 9 формулу:
Код:
=ЕСЛИ(RC1="";"";ИНДЕКС(Price_list!C1:C9;ПОИСКПОЗ(Art_numbers!RC1;Price_list!C3;);СТОЛБЕЦ()))
это будет без листа РЕЗУЛЬТАТЫ
Спасибо большое, Игорь!

Как промежуточный вариант очень пригодиться, но я хотел, в будущем, попробовать автоматизировать некоторую часть, и искал решение на VBA с выводом результатов в отдельный лист, именно что бы была полная копия строк товаров, так как в прайс возможно добавление новых полей (т.е., заведомо не известно, сколько полей будет, но поле артикула - есть обязательно).

Еще раз, благодарю за ответы и потраченное время!
Alex.Q вне форума Ответить с цитированием
Старый 16.11.2011, 16:55   #4
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Цитата:
Сообщение от Alex.Q Посмотреть сообщение
Exell 2011 MacOs
Excel 2003 Windows
Вложения
Тип файла: rar price_sample.rar (16.4 Кб, 19 просмотров)
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 16.11.2011, 16:59   #5
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Чуть подправил другой код, комментарии не менял

Код:
Option Explicit

'Макросом -
'1.два диапазона в два массива
'2.создание массива для результатов
'3.один перебор 300 значений массива в словарь
'4.100 000 проверок массива на наличие в словаре и заполнение данными массива результата
'5.выгрузка результатов (тут нет предварительной очистки диапазона)

Sub compare()
    Dim a, b, c, x As Byte, iLastrow As Long, i As Long, ii As Long

    '1.
    With Sheet1    'используется кодовое имя
        iLastrow = .Cells(Rows.Count, 1).End(xlUp).Row
        a = Range(.[i1], .Range("A" & iLastrow)).Value
    End With

    With Sheet2    'используется кодовое имя
        iLastrow = .Cells(Rows.Count, 1).End(xlUp).Row
        b = Range(.[a1], .Range("A" & iLastrow)).Value
    End With

    '2.
    ReDim c(1 To UBound(b), 1 To 9)

    With CreateObject("Scripting.Dictionary")
    
        '3.
        For i = 1 To UBound(a)
            .Item(a(i, 3)) = i
        Next

        '4.
        For i = 1 To UBound(b)
            If .exists(b(i, 1)) Then
                ii = ii + 1
                For x = 1 To 9: c(ii, x) = a(.Item(b(i, 1)), x): Next
            End If
        Next
    End With

    '5.
    With Sheet3    'используется кодовое имя
        .[a1].Resize(ii, UBound(c, 2)) = c
        .Activate
    End With

End Sub
Для больших объёмов мой вариант шустрее раз так в 40-50.
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 16.11.2011 в 17:05.
Hugo121 вне форума Ответить с цитированием
Старый 16.11.2011, 17:00   #6
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Код:
Sub CopyData()
  Dim r1 As Long, r2 As Long, r3 As Long
  r3 = 2
  Sheets(3).Cells.ClearContents
  Sheets(1).Rows(1).Copy Sheets(3).Cells(1, 1)
  On Error Resume Next
  For r2 = 1 To Sheets(2).Cells(Rows.Count, 1).End(xlUp).Row
    r1 = WorksheetFunction.Match(Sheets(2).Cells(r2, 1), Sheets(1).Columns(3), 0)
    If Err.Number = 0 Then
      Sheets(1).Rows(r1).Copy Sheets(3).Cells(r3, 1)
      r3 = r3 + 1
    Else
      Err.Clear
      Sheets(2).Cells(r2, 2) = "Not found!!!"
    End If
  Next
  On Error GoTo 0
  MsgBox r3 - 2 & " items copied", vbOKOnly, "Congratulation!!!"
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 17.11.2011, 12:50   #7
Alex.Q
Новичок
Джуниор
 
Регистрация: 16.11.2011
Сообщений: 3
По умолчанию

IgorGO, Hugo121, tae1980 спасибо большое за решения!
Alex.Q вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сохранение в listbox результата nevru1bphp Общие вопросы Delphi 4 09.10.2010 11:56
Сохранение результата расчетов макроса Stanislav D Помощь студентам 1 15.08.2009 15:13
Выборка из БД по данным введнных в поле формы Valik90 Microsoft Office Access 0 03.07.2009 15:55
загрузка массива и сохранение результата в файл Ferghost Общие вопросы C/C++ 2 03.06.2009 20:24
сохранение результата запроса в таблицу БД stepchild БД в Delphi 11 13.06.2008 11:20