Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Excel, заменить данные столбца по значению / 8 сообщений из 8, страница 1 из 1
27.12.2005, 11:03:22
    #33458917
Orlic
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel, заменить данные столбца по значению
Корявое название топика, объясняю по русски...

Есть куча файлов Excel по 1 листу в каждом, но это не сама суть.
В каждом файле простой список, где всегда в первом столбце некоторые уникальные значения, идентификаторы. В другом файле Excel хранится расшифровка этих идентификаторов (как в СУБД, связь один к одному)

Теперь мне нужно заменить эти идентификаторы их наименованиями, разумеется, автоматически. Хочу написать макрос, VBA в принципе знаю, F1 нажимать умею, вы только подскажите, где искать. Срочно нужно.
А может, кто уже делал, дак код приведет.

Спасибо.

З.Ы. Excel XP
...
Рейтинг: 0 / 0
27.12.2005, 12:04:35
    #33459091
HandKot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel, заменить данные столбца по значению
вероятно ф-ция
Код: plaintext
ВПР
да и здесь уже обсуждались подобные вопросы (с некоторой доработкой можно и для вас использовать)

Здесь
И здесь
...
и еще можно покапаться
...
Рейтинг: 0 / 0
27.12.2005, 12:27:35
    #33459174
Orlic
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel, заменить данные столбца по значению
я сейчас пытаюсь сделать следующее:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
    Dim titID As String     ' идентификатор
    Dim titName As String   ' наименование
    Dim i, j As Integer     ' счетчики
    
    Dim xla As Excel.Application
    Dim xlw As Excel.Workbook       ' объект рабочей книги
    Dim xls As Excel.Worksheet      ' объект рабочего листа

    i =  2                    ' начальная стррока парсинга
    
   Set xla = Excel.Application
    
    xla.Workbooks.Add Template:=xla.DefaultFilePath + "/tits.xls" ' файл с таблицей наименований
    
    ' создание нового объекта Exel Workbook
    Set xlw = xla.Workbooks( 1 )
    
    ' создание ссылки на текущий рабочий лист
    Set xls = xlw.ActiveSheet
    
    ' проверка всех строк, пока не встретим ключевое значение XEND
    While (titID <> "XEND") And (titID <> " ")   ' перебираем все идентификаторы до конца
        
        titID = LIST1.Cells(i,  1 )
        i = i +  1 

       ' теперь по этому идентификатору нужно найти в другой книге xlw наименование... 

    Wend

Вот так. Использовать Find или вызов функции ВПР? Как быдет быстрее и проще?
...
Рейтинг: 0 / 0
27.12.2005, 12:42:29
    #33459234
vkodor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel, заменить данные столбца по значению
Dim i As Integer, j As Integer
иначе i - variant

используй find через set очень быстро получается.
...
Рейтинг: 0 / 0
27.12.2005, 13:50:56
    #33459494
Orlic
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel, заменить данные столбца по значению
vkodorDim i As Integer, j As Integer
иначе i - variant

используй find через set очень быстро получается.

спасибо... А примерчик можно? буду признателен.
...
Рейтинг: 0 / 0
27.12.2005, 15:01:38
    #33459733
Orlic
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel, заменить данные столбца по значению
Вот как сделал я:

1. Создаю кнопку на листе, в котором следует заменить идентификаторы на их наименования, на кнопку вешаю код, приведенный ниже.

2. В отдельном файле TITS.XLS имеем таблицу на 2 столбца: 1 - идентификатор, по которому собственно ведется поиск, 2 - наименование, которое нужно выудить по идентификатору.

3. Открываем рабочий лист, в цикле обрабатываем каждое значение идентификатора, по нему с помощью FIND ищем наименование:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
Sub ЗаполнитьТиты()
    Dim titID As String        ' идентификатор
    Dim titName As String   ' наименование 
    Dim i As Integer, _
        j As Integer, _
        k As Integer, _
        l As Integer        ' счетчики
    Dim rn As Range
    Dim firstAddress As String
    
    Dim xla As Excel.Application
    Dim xlw As Excel.Workbook       ' объект рабочей книги
    Dim xls As Excel.Worksheet      ' объект рабочего листа

    i =  2                    ' начальная строка парсинга
     
    Set xla = New Excel.Application
    
    xla.Workbooks.Add Template:=xla.DefaultFilePath + "/tits.xls"
    
    ' создание нового объекта Exel Workbook
    Set xlw = xla.Workbooks( 1 )
    
    ' создание ссылки на текущий рабочий лист
    Set xls = xlw.ActiveSheet
    OIK.Activate
    
    While (titID <> "XEND") And (titID <> " ")   ' перебираем все идентификаторы до конца
        
        titID = OIK.Cells(i,  1 )
        
            With xls.Range("a1:a1110")
            Set rn = .Find(titID, LookIn:=xlValues)
                      
            If Not rn Is Nothing Then
            
                k = rn.Cells.Row
                l = rn.Cells.Column
               
                titName = xls.Cells(k, l +  1 )  '  наименование в соседней ячейке
                
            End If
        End With

        OIK.Cells(i,  1 ) = titName
        i = i +  1   '  на следующую строку
    
    Wend
    
    Set xls = Nothing
    Set xlw = Nothing
    Set xla = Nothing
   
End Sub

Работает достаточно быстро.

Одны проблема - неудобно переносить этот код и кнопку во множество файлов:-(
...
Рейтинг: 0 / 0
27.12.2005, 15:55:26
    #33459906
vkodor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel, заменить данные столбца по значению
Orlic
Одны проблема - неудобно переносить этот код и кнопку во множество файлов:-(

повесь на событие ввода данных
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False 'отключение повторного события
сделай нужные проверки
например
    Dim rng As Range
    'проверка попадания в диапозон Range("H18:H50")
    Set isect = Application.Intersect(Target, Range("H18:H50"))
    If Not isect Is Nothing Then

    End If
    'проверка что данные числовые
    If IsNumeric(Target.Value) Then

    End If
    и т.д.
Application.EnableEvents = False 'включение реакции на события
End Sub
и тогда придется только копировать лист
...
Рейтинг: 0 / 0
28.12.2005, 08:44:53
    #33460898
Orlic
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel, заменить данные столбца по значению
Мне кажется, что проще этот код с кнопкой вынести в отдельную книгу. А в коде поочередно открывать все XLS-файлы в текущей папке, обрабатывать их и сохранять. Вот только это разовая операция, и стоит ли шкурка выделки для человека, который особо не работал в Екселе :-(
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Excel, заменить данные столбца по значению / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]