Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Копирование данных из одной таблицы в другую согласно названиям строк и столбцов  (Прочитано 10073 раз)
0 Пользователей и 1 Гость смотрят эту тему.
rumynka
Новенький

ua
Offline Offline

« : 25-12-2011 09:39 » 

1. У меня есть таблица с исходными данными, там указано количество товаров по названию и стране происхождения.
2. мне нужно перенести цифры (количество товаров) согласно названию и стране происхождения из таблицы «Исходные данные» в таблицу «Копия». Просто скопировать я не могу, потому что названия товаров и стран в таблице «Копия» указанны в другом порядке.
3. Я пробовала задать два массива Dim x as Range, y as Range
Задать область для x, y
Set x=Range(„A:A“)
Set y=Range(“B:D”)
Set x=y
Задать шлейф: чтобы программа открыла «Исходные данные», просмотрела название и данные (цифры), запомнила. Потом открыла «Копия» сравнила по названиям строк и столбцов и вставила нужное значение.
Но я к сожалению не так хорошо знаю vba чтобы написать этот код(((

что то не так

Sub Макрос1()
Dim x As Range, y As Range
Set x = Range("A:A")
Set y = Range("B:D")
Set x = y
Do
Windows("Исходные данные.xls").Activate
Sheets("Лист3").Select
If Cells(i, 2) <> "" Then
i = i + 1
End If
Loop

Do
Windows("Копия.xls").Activate
Sheets("Лист3").Select
If Cells(i, 1) = x Then
Cells(i, 2) = y
End If

Loop
End Sub

Помогите,пожалууйста, кто чем может

* Desktop.rar (8.38 Кб - загружено 834 раз.)
Записан
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #1 : 26-12-2011 04:25 » new

ИМХО лучше объявить коллекцию, заполнить ее исходными данными

Код:
Public Type Tovar
    TovarA As Integer
    TovarB As Integer
    TovarC As Integer
End Type
.....
Dim Tovary As Collection

' В цикле заполняем ее исходными данными

Dim t As Tovar

For ...
  t.TovarA = ...
  t.TovarB = ...
  t.TovarC = ...

  a.Add t, Country  'где Country  - значение из столбца А (будет ключем клооекции)

Next
а потом из нее уже запостить в копии

Записан

I Have Nine Lives You Have One Only
THINK!
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 26-12-2011 08:08 » 

HandKot, а почему лучше?
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #3 : 27-12-2011 04:48 » 

если перейти потом на лист Копия.xls
и пойти по тем данным, в данном случае Country , то в коллекции проще найти искомое значение, так оно является ключем.
В результате, не надо делать лишние пробеги по массиву, если был бы он
Записан

I Have Nine Lives You Have One Only
THINK!
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 27-12-2011 08:51 » 

HandKot, вот именно.

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

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines