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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.02.2010, 14:15   #1
1134
Пользователь
 
Аватар для 1134
 
Регистрация: 20.01.2010
Сообщений: 53
Вопрос Замена значений в одной таблице на значения из другой

Существуют две структурно одинаковые таблицы. Все строки, которые есть во 2-ой (более короткой таблице) есть и в 1-ой (более длинной) различаются лишь последние значения в строках. Хотелось бы заменить последние значения в совпадающих строках в 1-ой таблице на значения из 2-ой. Более наглядное объяснение скрывается во вложенном файле, большое спасибо всем откликнувшимся!
Вложения
Тип файла: rar Tablici.rar (70.2 Кб, 20 просмотров)
1134 вне форума Ответить с цитированием
Старый 09.02.2010, 14:59   #2
dzv
Пользователь
 
Аватар для dzv
 
Регистрация: 15.01.2010
Сообщений: 55
По умолчанию

1134, к сожалению Ваш файл открыть не могу (формат 2007).
Я могу лишь посоветовать функцию "связь", при условии, что данные строки не удаляются.
dzv вне форума Ответить с цитированием
Старый 09.02.2010, 15:09   #3
1134
Пользователь
 
Аватар для 1134
 
Регистрация: 20.01.2010
Сообщений: 53
По умолчанию

Можно немного подробней?
1134 вне форума Ответить с цитированием
Старый 09.02.2010, 15:15   #4
Volodshan
Форумчанин
 
Регистрация: 20.05.2008
Сообщений: 241
По умолчанию

Цитата:
Сообщение от 1134 Посмотреть сообщение
Можно немного подробней?
Формат Excel 97-2003 - "*.xls"
Volodshan вне форума Ответить с цитированием
Старый 09.02.2010, 15:23   #5
1134
Пользователь
 
Аватар для 1134
 
Регистрация: 20.01.2010
Сообщений: 53
По умолчанию

Формат Excel 97-2003 - "*.xls"
Вложения
Тип файла: rar Tablici2003.rar (37.3 Кб, 26 просмотров)
1134 вне форума Ответить с цитированием
Старый 09.02.2010, 15:56   #6
Maxx
Форумчанин
 
Аватар для Maxx
 
Регистрация: 29.10.2008
Сообщений: 294
По умолчанию

Вот вам код:
Код:
Sub DateShift()
Application.ScreenUpdating = False

    Dim i As Integer, valNumber As Variant, valDate As Variant
    
    For i = 2 To Cells(Cells(Rows.Count, 1).End(xlUp).Row, 1).Row
        valNumber = Cells(i, 1).Value
        valDate = Cells(i, 2).Value
        
        Range([I2], Cells(Cells(Rows.Count, "I").End(xlUp).Row, "I")).Select
                
        On Error Resume Next
        Selection.Find(valNumber).Activate
                
        If ActiveCell.Value = valNumber Then
            ro = ActiveCell.Row: co = ActiveCell.Column
            Range(Cells(ro - 1, co + 1), Cells(Cells(Rows.Count, "J").End(xlUp).Row, "J")).Select
        
            On Error Resume Next
            Selection.Find(valDate).Activate
        
            If ActiveCell.Value = valDate And ActiveCell.Offset(0, -1).Value = valNumber Then
                Cells(i, 7) = ActiveCell.Offset(0, 5).Value
            Else
                GoTo 1
            End If
        Else
            GoTo 1
        End If
1
    Next i

Application.ScreenUpdating = True
End Sub

Последний раз редактировалось Maxx; 09.02.2010 в 16:10.
Maxx вне форума Ответить с цитированием
Старый 09.02.2010, 16:03   #7
1134
Пользователь
 
Аватар для 1134
 
Регистрация: 20.01.2010
Сообщений: 53
По умолчанию

Спасибо, огромное!
1134 вне форума Ответить с цитированием
Старый 09.02.2010, 16:15   #8
Maxx
Форумчанин
 
Аватар для Maxx
 
Регистрация: 29.10.2008
Сообщений: 294
По умолчанию

Немного упростил:
Код:
Sub DateShift()
Application.ScreenUpdating = False

    Dim i As Long
    
    For i = 2 To Cells(Cells(Rows.Count, 1).End(xlUp).Row, 1).Row
        valNumber = Cells(i, 1).Value: valDate = Cells(i, 2).Value
        
        Range([I2], Cells(Cells(Rows.Count, "I").End(xlUp).Row, "I")).Select
                
        On Error Resume Next
        Selection.Find(valNumber).Activate
                
        If ActiveCell.Value = valNumber Then
            ro = ActiveCell.Row: co = ActiveCell.Column
            Range(Cells(ro - 1, co + 1), Cells(Cells(Rows.Count, "J").End(xlUp).Row, "J")).Select
        
            On Error Resume Next
            Selection.Find(valDate).Activate
        
            If ActiveCell.Value = valDate And ActiveCell.Offset(0, -1).Value = valNumber Then
                Cells(i, 7) = ActiveCell.Offset(0, 5).Value
            End If
        End If
    Next i

Application.ScreenUpdating = True
End Sub
Maxx вне форума Ответить с цитированием
Старый 09.02.2010, 16:29   #9
1134
Пользователь
 
Аватар для 1134
 
Регистрация: 20.01.2010
Сообщений: 53
По умолчанию

А как сделать так, чтобы все значения в последнем ряду, кроме тех что были подставлены выше записанным макросом превратились в "0"?
1134 вне форума Ответить с цитированием
Старый 09.02.2010, 16:51   #10
Maxx
Форумчанин
 
Аватар для Maxx
 
Регистрация: 29.10.2008
Сообщений: 294
По умолчанию

Напишите после valNumber = Cells(i, 1).Value: valDate = Cells(i, 2).Value
следующее:
Cells(i, 7).Value = 0
Maxx вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Update одной записи в таблице EugeneIsmatulin SQL, базы данных 3 31.12.2009 19:39
два раза к одной таблице Kolik317 SQL, базы данных 2 26.12.2009 13:58
Выявление одинаковости значений поля в одной талице по значению поля в другой nikmay SQL, базы данных 4 13.08.2009 12:51
графики в одной таблице Litty Microsoft Office Excel 6 29.04.2009 22:49
Установка указателя в одной таблице по значению из другой Avalonix БД в Delphi 1 31.05.2008 17:20