nilem, переносит правильно, но если значение в Общий начинается с буквы, то эта ячейка не учавствует в поиске(( и ненайденые артикулы из Сортировка не помечаются((
nilem, переносит правильно, но если значение в Общий начинается с буквы, то эта ячейка не учавствует в поиске(( и ненайденые артикулы из Сортировка не помечаются((227
Даже не знаю, у меня работает и с буквами, и с цифрами (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 уже не нужно, поэтому так лучше
[vba]
Код
Sub СортировкаZ3массив44() Dim x, i& 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 If Not .Find(x(i, 1), LookAt:=xlWhole) 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]
Даже не знаю, у меня работает и с буквами, и с цифрами (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 уже не нужно, поэтому так лучше
[vba]
Код
Sub СортировкаZ3массив44() Dim x, i& 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 If Not .Find(x(i, 1), LookAt:=xlWhole) 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
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]
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
какая-то непонятка с 16-м сравниваем Общий с Сортировка
[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) 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("E1").Resize(i - 1).Value = x MsgBox Timer - tm End Sub
[/vba]
сравниваем Сортировка с Общий
[vba]
Код
'ищем соответствия на листе Общий и пишем на лист Сортировка Sub СортировкаZ6массив22() Dim x, i&, r As Range d1 = Time With Sheets("Сортировка") 'что ищем x = .Range("A1", .Cells(Rows.Count, 1).End(xlUp)).Value End With With Sheets("Общий").Columns(1) 'а где ищем? ...на листе Общий <img rel="usm" src="http://www.excelworld.ru/sml2/smile.gif" border="0" align="absmiddle" alt=":)" /> 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("E1").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]
какая-то непонятка с 16-м сравниваем Общий с Сортировка
[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) 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("E1").Resize(i - 1).Value = x MsgBox Timer - tm End Sub
[/vba]
сравниваем Сортировка с Общий
[vba]
Код
'ищем соответствия на листе Общий и пишем на лист Сортировка Sub СортировкаZ6массив22() Dim x, i&, r As Range d1 = Time With Sheets("Сортировка") 'что ищем x = .Range("A1", .Cells(Rows.Count, 1).End(xlUp)).Value End With With Sheets("Общий").Columns(1) 'а где ищем? ...на листе Общий <img rel="usm" src="http://www.excelworld.ru/sml2/smile.gif" border="0" align="absmiddle" alt=":)" /> 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("E1").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