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

Вход

Регистрация

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

 

= Мир MS Excel/Сравнение двух листов (макросы) - Страница 2 - Мир MS Excel

Старая форма входа
  • Страница 2 из 2
  • «
  • 1
  • 2
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Сравнение двух листов (макросы) (Формулы/Formulas)
Сравнение двух листов (макросы)
227 Дата: Вторник, 05.05.2015, 11:53 | Сообщение № 21
Группа: Пользователи
Ранг: Новичок
Сообщений: 16
Репутация: 0 ±
Замечаний: 20% ±

Excel для Mac
nilem, переносит правильно, но если значение в Общий начинается с буквы, то эта ячейка не учавствует в поиске((
и ненайденые артикулы из Сортировка не помечаются((
 
Ответить
Сообщениеnilem, переносит правильно, но если значение в Общий начинается с буквы, то эта ячейка не учавствует в поиске((
и ненайденые артикулы из Сортировка не помечаются((

Автор - 227
Дата добавления - 05.05.2015 в 11:53
nilem Дата: Вторник, 05.05.2015, 13:03 | Сообщение № 22
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
Даже не знаю, у меня работает и с буквами, и с цифрами (Win7). Жаль, алгоритм очень хороший.
Тогда давайте использовать Find. Там у нас был код, чтобы переносить значения из Сортировка в Общий. А вот этот запишет "zzz" для тех кодов на листе Сортировка, кот. не имеют соответствий на листе Общий
[vba]
Код
Sub СортировкаZ3массив33()
Dim x, i&, r As Range
Dim tm#: tm = Timer
With Sheets("Сортировка")
       x = .Range("A1", .Cells(Rows.Count, 1).End(xlUp)).Value
End With
With Sheets("Общий").Columns(1)
       For i = 1 To UBound(x)
           If x(i, 1) > 0 Then
               Set r = .Find(x(i, 1), LookAt:=xlWhole)
               If Not r Is Nothing Then x(i, 1) = "" Else x(i, 1) = "zzz"
           End If
       Next i
End With
Sheets("Сортировка").Range("C1").Resize(i - 1).Value = x
MsgBox Timer - tm
End Sub
[/vba]

вообще-то r As Range уже не нужно, поэтому так лучше


Яндекс.Деньги 4100159601573

Сообщение отредактировал nilem - Вторник, 05.05.2015, 13:07
 
Ответить
СообщениеДаже не знаю, у меня работает и с буквами, и с цифрами (Win7). Жаль, алгоритм очень хороший.
Тогда давайте использовать Find. Там у нас был код, чтобы переносить значения из Сортировка в Общий. А вот этот запишет "zzz" для тех кодов на листе Сортировка, кот. не имеют соответствий на листе Общий
[vba]
Код
Sub СортировкаZ3массив33()
Dim x, i&, r As Range
Dim tm#: tm = Timer
With Sheets("Сортировка")
       x = .Range("A1", .Cells(Rows.Count, 1).End(xlUp)).Value
End With
With Sheets("Общий").Columns(1)
       For i = 1 To UBound(x)
           If x(i, 1) > 0 Then
               Set r = .Find(x(i, 1), LookAt:=xlWhole)
               If Not r Is Nothing Then x(i, 1) = "" Else x(i, 1) = "zzz"
           End If
       Next i
End With
Sheets("Сортировка").Range("C1").Resize(i - 1).Value = x
MsgBox Timer - tm
End Sub
[/vba]

вообще-то r As Range уже не нужно, поэтому так лучше

Автор - nilem
Дата добавления - 05.05.2015 в 13:03
227 Дата: Вторник, 05.05.2015, 14:16 | Сообщение № 23
Группа: Пользователи
Ранг: Новичок
Сообщений: 16
Репутация: 0 ±
Замечаний: 20% ±

Excel для Mac
nilem, ненайденое помечается zzz правильно, но в Общий ничего не пишется(((
Никак не могу понять что нужно с чем поменять(((
 
Ответить
Сообщениеnilem, ненайденое помечается zzz правильно, но в Общий ничего не пишется(((
Никак не могу понять что нужно с чем поменять(((

Автор - 227
Дата добавления - 05.05.2015 в 14:16
nilem Дата: Вторник, 05.05.2015, 14:33 | Сообщение № 24
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
но в Общий ничего не пишется

см. код в сообщении № 16 (можно, наверное, их объединить... А можно и так оставить :))


Яндекс.Деньги 4100159601573
 
Ответить
Сообщение
но в Общий ничего не пишется

см. код в сообщении № 16 (можно, наверное, их объединить... А можно и так оставить :))

Автор - nilem
Дата добавления - 05.05.2015 в 14:33
Hugo Дата: Вторник, 05.05.2015, 15:05 | Сообщение № 25
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3255
Репутация: 707 ±
Замечаний: 0% ±

2019
Hugo, означает и это, что на винде этот макрос будет работать намного быстрее?

Нет. Это означает, что на винде можно написать другой макрос, который работает намного быстрее. Ну или ненамного - зависит от задачи.


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
Сообщение
Hugo, означает и это, что на винде этот макрос будет работать намного быстрее?

Нет. Это означает, что на винде можно написать другой макрос, который работает намного быстрее. Ну или ненамного - зависит от задачи.

Автор - Hugo
Дата добавления - 05.05.2015 в 15:05
227 Дата: Вторник, 05.05.2015, 15:33 | Сообщение № 26
Группа: Пользователи
Ранг: Новичок
Сообщений: 16
Репутация: 0 ±
Замечаний: 20% ±

Excel для Mac
nilem, 16 очень хорошо работает, но в нем логика наоборот, там сравнивается Общий с Сортировка, а нужно наоборот сравнивать. Если меняю местами, то сравнивает правильно, но пишет из Общий в Сортировка. То есть сравнивает в одну сторону, а пишет в обратную. Я уже чего только не пробовал там менять местами, все равно упорно пишет наоборот, никак не могу понять((( Только на вас вся надежда. Подскажите пожалуйста. Очень нужна скорость вашего алгоритма. Тестовый файл прикрепляю.
Наоборот пишет вот этот:

[vba]
Код
Sub СортировкаZ6массив22()
Dim x, i&, r As Range
Dim tm#: tm = Timer
d1 = Time
With Sheets("Сортировка")
      x = .Range("A1", .Cells(Rows.Count, 1).End(xlUp)).Value
End With
With Sheets("Общий").Columns(1)
      For i = 1 To UBound(x)
          Set r = .Find(x(i, 1), LookAt:=xlWhole)
          If r Is Nothing Then x(i, 1) = "zzz" Else x(i, 1) = r(1, 2)
      Next i
End With
Sheets("Сортировка").Range("B1").Resize(i - 1).Value = x
Beep
d2 = Time
Время = MsgBox((DateDiff("n", d1, d2) \ 60 & " час " & DateDiff("n", d1, d2) Mod 60 & " мин " & DateDiff("s", d1, d2) Mod 60 & " сек"), 0, "Затрачено:")
End Sub
[/vba]
К сообщению приложен файл: Test-2.xlsx (41.7 Kb)


Сообщение отредактировал 227 - Вторник, 05.05.2015, 15:56
 
Ответить
Сообщениеnilem, 16 очень хорошо работает, но в нем логика наоборот, там сравнивается Общий с Сортировка, а нужно наоборот сравнивать. Если меняю местами, то сравнивает правильно, но пишет из Общий в Сортировка. То есть сравнивает в одну сторону, а пишет в обратную. Я уже чего только не пробовал там менять местами, все равно упорно пишет наоборот, никак не могу понять((( Только на вас вся надежда. Подскажите пожалуйста. Очень нужна скорость вашего алгоритма. Тестовый файл прикрепляю.
Наоборот пишет вот этот:

[vba]
Код
Sub СортировкаZ6массив22()
Dim x, i&, r As Range
Dim tm#: tm = Timer
d1 = Time
With Sheets("Сортировка")
      x = .Range("A1", .Cells(Rows.Count, 1).End(xlUp)).Value
End With
With Sheets("Общий").Columns(1)
      For i = 1 To UBound(x)
          Set r = .Find(x(i, 1), LookAt:=xlWhole)
          If r Is Nothing Then x(i, 1) = "zzz" Else x(i, 1) = r(1, 2)
      Next i
End With
Sheets("Сортировка").Range("B1").Resize(i - 1).Value = x
Beep
d2 = Time
Время = MsgBox((DateDiff("n", d1, d2) \ 60 & " час " & DateDiff("n", d1, d2) Mod 60 & " мин " & DateDiff("s", d1, d2) Mod 60 & " сек"), 0, "Затрачено:")
End Sub
[/vba]

Автор - 227
Дата добавления - 05.05.2015 в 15:33
nilem Дата: Вторник, 05.05.2015, 16:11 | Сообщение № 27
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
какая-то непонятка с 16-м :)
сравниваем Общий с Сортировка

сравниваем Сортировка с Общий


Яндекс.Деньги 4100159601573
 
Ответить
Сообщениекакая-то непонятка с 16-м :)
сравниваем Общий с Сортировка

сравниваем Сортировка с Общий

Автор - nilem
Дата добавления - 05.05.2015 в 16:11
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Сравнение двух листов (макросы) (Формулы/Formulas)
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск:

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