powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Excel, заменить данные столбца по значению
8 сообщений из 8, страница 1 из 1
Excel, заменить данные столбца по значению
    #33458917
Orlic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Корявое название топика, объясняю по русски...

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

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

Спасибо.

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

Здесь
И здесь
...
и еще можно покапаться
...
Рейтинг: 0 / 0
Excel, заменить данные столбца по значению
    #33459174
Orlic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я сейчас пытаюсь сделать следующее:
Код: 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
Excel, заменить данные столбца по значению
    #33459234
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dim i As Integer, j As Integer
иначе i - variant

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

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

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

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
Excel, заменить данные столбца по значению
    #33459906
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Excel, заменить данные столбца по значению
    #33460898
Orlic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне кажется, что проще этот код с кнопкой вынести в отдельную книгу. А в коде поочередно открывать все XLS-файлы в текущей папке, обрабатывать их и сохранять. Вот только это разовая операция, и стоит ли шкурка выделки для человека, который особо не работал в Екселе :-(
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Excel, заменить данные столбца по значению
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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