Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Поиск совпадений - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Поиск совпадений (Макрос)
Поиск совпадений
iGenex Дата: Суббота, 08.09.2012, 15:58 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Здравствуйте, уважаемые форумчане.
Суть проблемы: помогите пожалуйста написать макрос. Суть его такова:
Есть к примеру два столбца: в первом не обрезанные строки, во втором обрезанные (имеется ввиду текст в ячейке), но они на разных позициях. Строки во втором столбце должны оставаться на своих местах.
Т.е. выбираем первую строку первого столбца, копируем 30 знаков (к примеру) начиная с 7 от начала (можно и без этого, но желательно), ищем во втором столбце совпадение - если нашло, то копируем эту строку с первого столбца, туда, где было найдено совпадение во второй. И помечаем в обоих столбцах желтым цветом. Если совпадение найдено не было то красным, и переходим к след. И так по циклу до последней строки первого столбца.
Это очень сложно?
В прикрепленном файле небольшой пример.... просто таких строк более 10 000 - в ручную это не реал, в те сроки которые у меня.
Буду оооочень благодарен за помощь.
К сообщению приложен файл: _Microsoft_Exce.xlsx (65.7 Kb)
 
Ответить
СообщениеЗдравствуйте, уважаемые форумчане.
Суть проблемы: помогите пожалуйста написать макрос. Суть его такова:
Есть к примеру два столбца: в первом не обрезанные строки, во втором обрезанные (имеется ввиду текст в ячейке), но они на разных позициях. Строки во втором столбце должны оставаться на своих местах.
Т.е. выбираем первую строку первого столбца, копируем 30 знаков (к примеру) начиная с 7 от начала (можно и без этого, но желательно), ищем во втором столбце совпадение - если нашло, то копируем эту строку с первого столбца, туда, где было найдено совпадение во второй. И помечаем в обоих столбцах желтым цветом. Если совпадение найдено не было то красным, и переходим к след. И так по циклу до последней строки первого столбца.
Это очень сложно?
В прикрепленном файле небольшой пример.... просто таких строк более 10 000 - в ручную это не реал, в те сроки которые у меня.
Буду оооочень благодарен за помощь.

Автор - iGenex
Дата добавления - 08.09.2012 в 15:58
ABC Дата: Суббота, 08.09.2012, 17:47 | Сообщение № 2
Группа: Друзья
Ранг: Обитатель
Сообщений: 397
Репутация: 112 ±
Замечаний: 0% ±

Excel 2007
красить не будет, но сверяет
[vba]
Code
Sub www()
Dim rez(), arr, arr1, i&, j&
arr = Range([D2], Range("D" & Rows.Count).End(xlUp)).Value
arr1 = Range([I2], Range("I" & Rows.Count).End(xlUp)).Value
ReDim rez(1 To UBound(arr), 1 To 1)
With CreateObject("Scripting.Dictionary")
       .CompareMode = 1
       For i = 1 To UBound(arr)
           For j = 1 To UBound(arr1)
               If Mid(arr(i, 1), 7, 30) = Mid(arr1(j, 1), 7, 30) Then
                   rez(j, 1) = arr(i, 1)
               End If
           Next j
       Next i
End With
[H2:H65536].Clear
[H2].Resize(UBound(arr)).Value = rez
End Sub
[/vba]
или не допонял???


MS Excel 2007 and 2010...
-------------------------------
С Уважением, Даулет


Сообщение отредактировал ABC - Суббота, 08.09.2012, 17:57
 
Ответить
Сообщениекрасить не будет, но сверяет
[vba]
Code
Sub www()
Dim rez(), arr, arr1, i&, j&
arr = Range([D2], Range("D" & Rows.Count).End(xlUp)).Value
arr1 = Range([I2], Range("I" & Rows.Count).End(xlUp)).Value
ReDim rez(1 To UBound(arr), 1 To 1)
With CreateObject("Scripting.Dictionary")
       .CompareMode = 1
       For i = 1 To UBound(arr)
           For j = 1 To UBound(arr1)
               If Mid(arr(i, 1), 7, 30) = Mid(arr1(j, 1), 7, 30) Then
                   rez(j, 1) = arr(i, 1)
               End If
           Next j
       Next i
End With
[H2:H65536].Clear
[H2].Resize(UBound(arr)).Value = rez
End Sub
[/vba]
или не допонял???

Автор - ABC
Дата добавления - 08.09.2012 в 17:47
ikki Дата: Суббота, 08.09.2012, 19:47 | Сообщение № 3
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
ABC, а словарь зачем? blink


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki
 
Ответить
СообщениеABC, а словарь зачем? blink

Автор - ikki
Дата добавления - 08.09.2012 в 19:47
KuklP Дата: Суббота, 08.09.2012, 19:54 | Сообщение № 4
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
biggrin


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
Сообщениеbiggrin

Автор - KuklP
Дата добавления - 08.09.2012 в 19:54
Hugo Дата: Суббота, 08.09.2012, 20:34 | Сообщение № 5
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3252
Репутация: 707 ±
Замечаний: 0% ±

2019
Словарь круто smile
Не вполне понятно, когда начинаешь вникать - а если в первом файле 10 строк с одинаковым началом? А если у них разное продолжение?
А вообще конечно словарь можно использовать smile


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеСловарь круто smile
Не вполне понятно, когда начинаешь вникать - а если в первом файле 10 строк с одинаковым началом? А если у них разное продолжение?
А вообще конечно словарь можно использовать smile

Автор - Hugo
Дата добавления - 08.09.2012 в 20:34
ABC Дата: Суббота, 08.09.2012, 20:40 | Сообщение № 6
Группа: Друзья
Ранг: Обитатель
Сообщений: 397
Репутация: 112 ±
Замечаний: 0% ±

Excel 2007
учусь biggrin
[vba]
Code
Sub www()
Dim rez(), arr, arr1, i&, j&
arr = Range([D2], Range("D" & Rows.Count).End(xlUp)).Value
arr1 = Range([I2], Range("I" & Rows.Count).End(xlUp)).Value
ReDim rez(1 To UBound(arr), 1 To 1)
With CreateObject("Scripting.Dictionary")
      For i = 1 To UBound(arr)
          .Item(Mid(arr(i, 1), 7, 30)) = i
      Next
        
      For i = 1 To UBound(arr1)
      If .exists(Mid(arr1(i, 1), 7, 30)) Then
          rez(i, 1) = arr(.Item(Mid(arr1(i, 1), 7, 30)), 1)
      End If
      Next
        
End With
[H2:H65536].Clear
[H2].Resize(UBound(arr)).Value = rez
End Sub
[/vba]


MS Excel 2007 and 2010...
-------------------------------
С Уважением, Даулет


Сообщение отредактировал ABC - Суббота, 08.09.2012, 20:49
 
Ответить
Сообщениеучусь biggrin
[vba]
Code
Sub www()
Dim rez(), arr, arr1, i&, j&
arr = Range([D2], Range("D" & Rows.Count).End(xlUp)).Value
arr1 = Range([I2], Range("I" & Rows.Count).End(xlUp)).Value
ReDim rez(1 To UBound(arr), 1 To 1)
With CreateObject("Scripting.Dictionary")
      For i = 1 To UBound(arr)
          .Item(Mid(arr(i, 1), 7, 30)) = i
      Next
        
      For i = 1 To UBound(arr1)
      If .exists(Mid(arr1(i, 1), 7, 30)) Then
          rez(i, 1) = arr(.Item(Mid(arr1(i, 1), 7, 30)), 1)
      End If
      Next
        
End With
[H2:H65536].Clear
[H2].Resize(UBound(arr)).Value = rez
End Sub
[/vba]

Автор - ABC
Дата добавления - 08.09.2012 в 20:40
Hugo Дата: Суббота, 08.09.2012, 20:52 | Сообщение № 7
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3252
Репутация: 707 ±
Замечаний: 0% ±

2019
Вот тут

[vba]
Code
    For i = 1 To UBound(arr1)
           If .exists(Mid(arr1(i, 1), 7, 30)) Then
               rez(i, 1) = arr(.Item(Mid(arr1(i, 1), 7, 30)), 1)
           End If
       Next
[/vba]
я бы добавил переменную для скорости:

[vba]
Code
For i = 1 To UBound(arr1)
tmp = Mid(arr1(i, 1), 7, 30)
If .exists(tmp) Then
rez(i, 1) = arr(.Item(tmp), 1)
End If
Next
[/vba]

Вообще мне кажется, что rez не нужен - меняйте сразу в arr1.


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеВот тут

[vba]
Code
    For i = 1 To UBound(arr1)
           If .exists(Mid(arr1(i, 1), 7, 30)) Then
               rez(i, 1) = arr(.Item(Mid(arr1(i, 1), 7, 30)), 1)
           End If
       Next
[/vba]
я бы добавил переменную для скорости:

[vba]
Code
For i = 1 To UBound(arr1)
tmp = Mid(arr1(i, 1), 7, 30)
If .exists(tmp) Then
rez(i, 1) = arr(.Item(tmp), 1)
End If
Next
[/vba]

Вообще мне кажется, что rez не нужен - меняйте сразу в arr1.

Автор - Hugo
Дата добавления - 08.09.2012 в 20:52
ABC Дата: Суббота, 08.09.2012, 21:22 | Сообщение № 8
Группа: Друзья
Ранг: Обитатель
Сообщений: 397
Репутация: 112 ±
Замечаний: 0% ±

Excel 2007
что-то без rez не получается у меня


и на 2003 ругается на строку [H2].Resize(UBound(arr)).Value = rez
на 2010 работает


MS Excel 2007 and 2010...
-------------------------------
С Уважением, Даулет


Сообщение отредактировал ABC - Суббота, 08.09.2012, 21:27
 
Ответить
Сообщениечто-то без rez не получается у меня


и на 2003 ругается на строку [H2].Resize(UBound(arr)).Value = rez
на 2010 работает

Автор - ABC
Дата добавления - 08.09.2012 в 21:22
Hugo Дата: Суббота, 08.09.2012, 21:43 | Сообщение № 9
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3252
Репутация: 707 ±
Замечаний: 0% ±

2019
Первый раз tmp ускорения не даст, лишнее.
Такой вариант кода ABC:


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеПервый раз tmp ускорения не даст, лишнее.
Такой вариант кода ABC:

Автор - Hugo
Дата добавления - 08.09.2012 в 21:43
nerv Дата: Воскресенье, 09.09.2012, 01:22 | Сообщение № 10
Группа: Редакторы
Ранг: Обитатель
Сообщений: 431
Репутация: 193 ±
Замечаний: 0% ±

Quote (ikki)
ABC, а словарь зачем?

Что за глупый вопрос? Ты из дома выходишь без словаря? )

Quote (Hugo)
Словарь круто
Не вполне понятно, когда начинаешь вникать - а если в первом файле 10 строк с одинаковым началом? А если у них разное продолжение?
А вообще конечно словарь можно использовать

еще бы Hugo сказал по другому laugh

Quote (Hugo)
Вот тут

Quote (Hugo)
я бы добавил переменную для скорости:

правильно! Чтобы выхлоп был больше )))

А, вообще, я код и задачу не смотрел. Пришел поржать, а то совсем грустно...

p.s.: предлагаю от arr и arr1 перейти к data и result


Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


YM 41001156540584 / WM WMR R21924176233

https://github.com/nervgh/vba
 
Ответить
Сообщение
Quote (ikki)
ABC, а словарь зачем?

Что за глупый вопрос? Ты из дома выходишь без словаря? )

Quote (Hugo)
Словарь круто
Не вполне понятно, когда начинаешь вникать - а если в первом файле 10 строк с одинаковым началом? А если у них разное продолжение?
А вообще конечно словарь можно использовать

еще бы Hugo сказал по другому laugh

Quote (Hugo)
Вот тут

Quote (Hugo)
я бы добавил переменную для скорости:

правильно! Чтобы выхлоп был больше )))

А, вообще, я код и задачу не смотрел. Пришел поржать, а то совсем грустно...

p.s.: предлагаю от arr и arr1 перейти к data и result

Автор - nerv
Дата добавления - 09.09.2012 в 01:22
Гость Дата: Вторник, 14.05.2013, 08:14 | Сообщение № 11
Группа: Гости
помогите пожалуйста. у меня таблицы на 2х листах. работать нужно только с 3мя столбцами. с одним столбцом на одном листе и с 2мя на другом. на первом листе слобец с номерами, на втором столбец с теми же номерами и столбец с зарплатой. надо написать цикл что бы он сверял номера и если номера одинаковые он проверял зарплату
 
Ответить
Сообщениепомогите пожалуйста. у меня таблицы на 2х листах. работать нужно только с 3мя столбцами. с одним столбцом на одном листе и с 2мя на другом. на первом листе слобец с номерами, на втором столбец с теми же номерами и столбец с зарплатой. надо написать цикл что бы он сверял номера и если номера одинаковые он проверял зарплату

Автор - Гость
Дата добавления - 14.05.2013 в 08:14
Pelena Дата: Вторник, 14.05.2013, 08:31 | Сообщение № 12
Группа: Админы
Ранг: Местный житель
Сообщений: 19184
Репутация: 4420 ±
Замечаний: ±

Excel 365 & Mac Excel
Гость, прочитайте Правила форума, создайте свою тему и прикрепите файл с примером в формате xls.
Не понятно, что значит "проверял зарплату"


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеГость, прочитайте Правила форума, создайте свою тему и прикрепите файл с примером в формате xls.
Не понятно, что значит "проверял зарплату"

Автор - Pelena
Дата добавления - 14.05.2013 в 08:31
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Поиск совпадений (Макрос)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!