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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.11.2009, 15:20   #1
KNatalia
Пользователь
 
Регистрация: 14.08.2009
Сообщений: 66
По умолчанию Макрос копирования данных - в чем неточность?

Всем добрый день!
Помогите исправить макрос, пожалуйста.

Есть два файла с данными "Товар" и "Общая таблица оценки". Для работы макроса нужно одновременно открыть эти два файла.

Макрос переносит все данные из файла "Товар" в файл "Общая оценка" и в соответствии с условием проставляет оценку.

Проблема в том, что он просто копирует строки.

Подскажите, как исправить и что в макросе, чтобы в файле "Общая оценка" в наименовании искался номер акции в соответствии с тем, который в файле "Товар" и не заменяя названия и не меняясь строчками, в строке с этим названием проставлялись соответствующие этому названию значения.

Результат примера и сам пример с макросом приведен во вложении.
В файле "Товар", когда открыты оба файла нажать на кнопку "Внести данные". В файле "Общая оценка" отобразятся данные, ниже приведено, что должно быть получено и что неправильно

Помогите. пожалуйста!
Вложения
Тип файла: rar result111.rar (16.4 Кб, 17 просмотров)

Последний раз редактировалось KNatalia; 02.11.2009 в 16:30.
KNatalia вне форума Ответить с цитированием
Старый 02.11.2009, 20:46   #2
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Здравствуйте KNatalia.
Возможно я не совсем правильно понят задачу, но мне кажется подобная корректировка кода, её решает
Код:
Sub join_files_data()
Const sL = "Низкое", sH = "Высокое", sM = "Среднее", sC = "коробка № гос. Рег. "
Dim i#, m%, n%, p%, r%, d%, v%, c As Object, o As Object
Application.ScreenUpdating = False
Set o = Workbooks("общая_таблица_оценки.xls").Sheets(1)
Workbooks("Товар.xls").Activate
With Workbooks("Товар.xls").Sheets(1).Cells
    Set c = .Find("Наименование товара", LookIn:=xlValues)
    i = 6
    If Not c Is Nothing Then
        firstAddress = c.Address
        Do
            Set c = .FindNext(c)
            o.Cells(i, 1) = sC & .Cells(c.Row + 2, c.Column)
            o.Cells(i, 2) = .Cells(c.Row + 2, c.Column + 1)
'Количество сделок за период*, штук
            Select Case o.Cells(i, 2)
            Case Is < 9: s = sL: m = 3
            Case Is <= 19: s = sM: m = 2
            Case Is > 20: s = sH: m = 1
            End Select
            o.Cells(i, 3) = s
'Объём торгов за период*, (млн. рублей)
            o.Cells(i, 4) = .Cells(c.Row + 2, c.Column + 2)
            Select Case o.Cells(i, 4)
            Case Is < 25000000: s = sL: n = 3
            Case Is <= 100000000: s = sM: n = 2
            Case Is > 100000000: s = sH: n = 1
            End Select
            o.Cells(i, 5) = s
'Доходность к погашению / оферте (для облигаций), % годовых
            o.Cells(i, 6) = .Cells(c.Row + 2, c.Column + 3)
            Select Case o.Cells(i, 6)
            Case Is < 15: s = sH: p = 1
            Case Is < 19: s = sM: p = 2
            Case Is >= 19, Is <= 24: s = sL: p = 3
            End Select
            o.Cells(i, 7) = s
'Спрэды между заявкой на покупку / продажу, внутри дня
            o.Cells(i, 8) = .Cells(c.Row + 2, c.Column + 4)
            Select Case o.Cells(i, 8)
            Case Is < 0.5: s = sH: r = 1
            Case Is < 1: s = sM: r = 2
            Case Is >= 1: s = sL: r = 3
            End Select
            o.Cells(i, 9) = s
'Разница между max и min сделкой, внутри дня
            o.Cells(i, 10) = .Cells(c.Row + 2, c.Column + 5)
            Select Case o.Cells(i, 10)
            Case Is < 0.5: s = sH: d = 1
            Case Is < 1: s = sM: d = 2
            Case Is >= 1: s = sL: d = 3
            End Select
            o.Cells(i, 11) = s
'Изменение стоимости ценной бумаги за период*, %
            o.Cells(i, 12) = .Cells(c.Row + 2, c.Column + 6)
            Select Case o.Cells(i, 12)
            Case Is < 1: s = sH: v = 1
            Case Is < 2: s = sM: v = 2
            Case Is >= 2: s = sL: v = 3
            End Select
            o.Cells(i, 13) = s
' Формирование общей оценки
            Select Case Application.Max(m, n, p, r, d, v)
            Case Is = 1: s = sH
            Case Is = 2: s = sM
            Case Is = 3: s = sL
            End Select
            o.Cells(i, 14) = s
            i = i + 1
        Loop While Not c Is Nothing And c.Address <> firstAddress
    End If
End With
o.Range("a6:n" & i - 1).Sort Key1:=o.Range("b6")
Application.ScreenUpdating = True
End Sub
Евгений.
Teslenko_EA вне форума Ответить с цитированием
Старый 02.11.2009, 21:16   #3
KNatalia
Пользователь
 
Регистрация: 14.08.2009
Сообщений: 66
По умолчанию

Спасибо Вам, Евгений!
Большое спасибо!

Вы всё правильно поняли.
Извините, что обращаюсь, просто я недавно начала заниматься программированием на VBA, и просмотрев код программы, я не всё поняла, а разобрться очень важно для меня, чтобы в дальнейшем использовать в подобных задачах приемы.
Если Вам не трудно, могу я Вас попросить прокомментировать код программы.

Заранее большое спасибо!
С наилучшими пожеланиями, Наталья
KNatalia вне форума Ответить с цитированием
Старый 03.11.2009, 08:28   #4
KNatalia
Пользователь
 
Регистрация: 14.08.2009
Сообщений: 66
По умолчанию

А если константа sC = "коробка № гос. Рег. " для каждого номера для 50 записей будет разной, как тогда быть?

Например, у нас было везде:
коробка № гос. Рег. RU31006CHU0
коробка № гос. Рег. RU34008M0
коробка № гос. Рег. 4-03-00146-A

А будет:
коробка № гос. Рег. RU31006CHU0
игрушки № гос. Рег. RU34008M0; FBF
МАШИНА по № гос. Рег. 4-03-00146-A; POP

и таких наименований может быть тысячи.
Как быть тогда? Что сделать, чтобы название в таблице "общая_оценка" оставались, а в соответствии с номером, который есть в этом названии из файла "Товар" переносились данные?

Последний раз редактировалось KNatalia; 03.11.2009 в 11:05.
KNatalia вне форума Ответить с цитированием
Старый 03.11.2009, 11:07   #5
KNatalia
Пользователь
 
Регистрация: 14.08.2009
Сообщений: 66
По умолчанию

Подскажите, пожалуйста!
KNatalia вне форума Ответить с цитированием
Старый 04.11.2009, 14:36   #6
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Здравствуйте Наталья.
"Например, у нас было..." - нет, изначально это было в Вашем файле общая_таблица_оценки.xls - "РЕЗУЛЬТАТОМ ДОЛЖНА БЫТЬ ТАБЛИЦА".
Если "таких наименований может быть тысячи", очевидно требуется получить эти "наименования", лучше если будет присутствовать источник данных соответствия имени - номеру , из которого может быть получена отсутствующая информация, а не "упражняться" с каждой из "тысячи" строк извлекая номер для сопоставления с таблицей файла "Товар".
Евгений.
P.S. "комментарии" в личном сообщении Вы прочли?
Teslenko_EA вне форума Ответить с цитированием
Старый 04.11.2009, 15:39   #7
KNatalia
Пользователь
 
Регистрация: 14.08.2009
Сообщений: 66
По умолчанию

Евгений, в очередной раз большое Вам спасибо!

Спасибо за ответ и за присланные комментарии.

А почему переменные c, о объявляем как Object?
Как я поняла, то для решения задачи, нужно, чтобы был отдельный список всех наименований?

Наталья

Последний раз редактировалось KNatalia; 04.11.2009 в 15:45.
KNatalia вне форума Ответить с цитированием
Старый 04.11.2009, 20:00   #8
Andrey3055
Пользователь
 
Регистрация: 27.10.2009
Сообщений: 15
По умолчанию

всё что назначается через set можно объявлять как Object
Andrey3055 вне форума Ответить с цитированием
Старый 04.11.2009, 20:15   #9
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Хорошим тоном является объявление переменной типа к которому относится присваиваемый объект, а применение переменной - Object не лучший способ использования переменных, думаю это от лени,
Евгений.
Teslenko_EA вне форума Ответить с цитированием
Старый 04.11.2009, 20:20   #10
KNatalia
Пользователь
 
Регистрация: 14.08.2009
Сообщений: 66
По умолчанию

Спасибо за совет!
KNatalia вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Копирование данных Alex___ Microsoft Office Excel 3 16.10.2009 14:34
Копирование данных maks_ Microsoft Office Excel 4 09.01.2009 11:01
Копирование данных с др. книги Iskin Microsoft Office Excel 2 30.12.2008 07:32
копирование данных из таблицы в таблицу Sack Microsoft Office Access 1 16.09.2008 05:59
Копирование данных из реестра delphin100 Общие вопросы Delphi 5 06.05.2008 16:36