- Имеем 2 ячейки, скажем: А1 и В1; -В ячейке А1 имеется следующая запись: 1;4;6;8; -В ячейке В1 имеется следующая запись: 2;5;6;8;
Вопрос в том, какую функцию нужно поставить в ячейку С1, чтоб в ней была следующая информация: 1;2;4;5, а именно произвести выборку чисел, которые не повторяются в ячейках А1 и В1?????? Уточню - нужно выбрать числа из ячейки А1, которые не повторяются в В1, и из В1, выбрать числа, которые не повторяются в А1, и эти числа указать в ячейке С1
Знатоки Excel, подсобите, есть такой вопрос:
- Имеем 2 ячейки, скажем: А1 и В1; -В ячейке А1 имеется следующая запись: 1;4;6;8; -В ячейке В1 имеется следующая запись: 2;5;6;8;
Вопрос в том, какую функцию нужно поставить в ячейку С1, чтоб в ней была следующая информация: 1;2;4;5, а именно произвести выборку чисел, которые не повторяются в ячейках А1 и В1?????? Уточню - нужно выбрать числа из ячейки А1, которые не повторяются в В1, и из В1, выбрать числа, которые не повторяются в А1, и эти числа указать в ячейке С1Дмитрий
т.е. сделать выборку чисел, возможно только через макрос? а возможен перенос макроса из одного файла в другой?, т.к. значения исходного документа не подлежат огласке
т.е. сделать выборку чисел, возможно только через макрос? а возможен перенос макроса из одного файла в другой?, т.к. значения исходного документа не подлежат огласкеДмитрий
Можно еще ручками И формулам может получиться. Данные-Разделить_по_столбцам, далее формулой массива отобрать уникальные. Но сама мысль: разъединить, чтобы потом объединить... Если конечный результат не такой секретный, как
Можно еще ручками И формулам может получиться. Данные-Разделить_по_столбцам, далее формулой массива отобрать уникальные. Но сама мысль: разъединить, чтобы потом объединить... Если конечный результат не такой секретный, как
Вообщем такая ситуация, есть два списка в EXCEL, точнее две колонки с адресами, одни данные предоставлены скажем управляющей компанией, другие данные из нашей базы, мне необходимо по каждому дому (1 дом - 1 строка), адрес дома в ячейке А1, номера квартир в ячейке В1 (данные управляющей) и С1(Наши данные), нужно в строке Д1 выделить спорные адреса, т.е. исключить одинаковые номера квартир, которые есть и в наших данных и данных управлялки, поясню так, они пишут что в доме по улице Достоевкого у них числятся квартиры: 1,3,5; В нашем списке числятся квартиры 1,2,4; нужно чтоб в Д1, были указаны квартиры, которые не совпадают, т.е. 2,3,4,5
Вообщем такая ситуация, есть два списка в EXCEL, точнее две колонки с адресами, одни данные предоставлены скажем управляющей компанией, другие данные из нашей базы, мне необходимо по каждому дому (1 дом - 1 строка), адрес дома в ячейке А1, номера квартир в ячейке В1 (данные управляющей) и С1(Наши данные), нужно в строке Д1 выделить спорные адреса, т.е. исключить одинаковые номера квартир, которые есть и в наших данных и данных управлялки, поясню так, они пишут что в доме по улице Достоевкого у них числятся квартиры: 1,3,5; В нашем списке числятся квартиры 1,2,4; нужно чтоб в Д1, были указаны квартиры, которые не совпадают, т.е. 2,3,4,5Дмитрий
Function sravni(s1$, s2$, razd$) Dim a, b, el, t$, dic1 As Object, dic2 As Object, dic3 As Object
a = Split(s1, razd) b = Split(s2, razd)
Set dic1 = CreateObject("scripting.dictionary") dic1.comparemode = 1 Set dic2 = CreateObject("scripting.dictionary") dic2.comparemode = 1 Set dic3 = CreateObject("scripting.dictionary") dic3.comparemode = 1 For Each el In a: dic1.Item(Trim(el)) = 0&: Next For Each el In b t = Trim(el) dic2.Item(t) = 0& If Not dic1.exists(t) Then dic3.Item(t) = 0& Next For Each el In a t = Trim(el) If Not dic2.exists(t) Then dic3.Item(t) = 0& Next
Function sravni(s1$, s2$, razd$) Dim a, b, el, t$, dic1 As Object, dic2 As Object, dic3 As Object
a = Split(s1, razd) b = Split(s2, razd)
Set dic1 = CreateObject("scripting.dictionary") dic1.comparemode = 1 Set dic2 = CreateObject("scripting.dictionary") dic2.comparemode = 1 Set dic3 = CreateObject("scripting.dictionary") dic3.comparemode = 1 For Each el In a: dic1.Item(Trim(el)) = 0&: Next For Each el In b t = Trim(el) dic2.Item(t) = 0& If Not dic1.exists(t) Then dic3.Item(t) = 0& Next For Each el In a t = Trim(el) If Not dic2.exists(t) Then dic3.Item(t) = 0& Next
Сдается мне, что номера квартир являются положительными целыми числами, причем не очень большими (не более 1000), поэтому можно обойтись без словарей, заодно и отсортировав номера по возрастанию: [vba]
Код
Function sravni2$(s1$, s2$, Optional razd$ = ";") Dim x, s$, i& ReDim a&(1 To 1000) For Each x In Split(s1 & razd & s2, razd) i = Val(x) If i > UBound(a) Then ReDim Preserve a&(1 To i) If i > 0 Then a(i) = a(i) + 1 Next x For i = 1 To UBound(a) If a(i) = 1 Then s = IIf(Len(s), s & razd, "") & i Next i sravni2 = s End Function
[/vba]
Сдается мне, что номера квартир являются положительными целыми числами, причем не очень большими (не более 1000), поэтому можно обойтись без словарей, заодно и отсортировав номера по возрастанию: [vba]
Код
Function sravni2$(s1$, s2$, Optional razd$ = ";") Dim x, s$, i& ReDim a&(1 To 1000) For Each x In Split(s1 & razd & s2, razd) i = Val(x) If i > UBound(a) Then ReDim Preserve a&(1 To i) If i > 0 Then a(i) = a(i) + 1 Next x For i = 1 To UBound(a) If a(i) = 1 Then s = IIf(Len(s), s & razd, "") & i Next i sravni2 = s End Function
Вообщем вот: Прикладываю уменьшенную книгу, которая у меня есть, в этом варианте мала часть от всех адресов, но смысл думаю будет понятен ( добавил расширение .XLS к расширению .rar, так как не хотел загружать пример
Вообщем вот: Прикладываю уменьшенную книгу, которая у меня есть, в этом варианте мала часть от всех адресов, но смысл думаю будет понятен ( добавил расширение .XLS к расширению .rar, так как не хотел загружать примерKreoner
Сообщение отредактировал Kreoner - Четверг, 01.08.2013, 08:30
Интересно, чья функция "Подошла" В приложенном файле ни моя функция, ни функция от Hugo работают не корректно, т.к. в данных используются разные разделители, в столбце "I" - точка с запятой, в столбце "J" - запятая. Чтобы работало правильно, нужно привести к одному виду, либо переписывать функции
PS: Зачем в данном примере приложили по 300 строк "секретных" данных на "Лист1" и "Лист3"?
Интересно, чья функция "Подошла" В приложенном файле ни моя функция, ни функция от Hugo работают не корректно, т.к. в данных используются разные разделители, в столбце "I" - точка с запятой, в столбце "J" - запятая. Чтобы работало правильно, нужно привести к одному виду, либо переписывать функции
PS: Зачем в данном примере приложили по 300 строк "секретных" данных на "Лист1" и "Лист3"?MCH
MCH, данные на других листах не являются закрытыми, в них не указанны квартиры и собственники, по поводу формула, запятые я заменил на ; - так что все сработало
P/S использовал Вашу функцию
MCH, данные на других листах не являются закрытыми, в них не указанны квартиры и собственники, по поводу формула, запятые я заменил на ; - так что все сработало
Михаил, а если номер квартиры будет записан типа "14б" или "15/2"? А если вдруг, по ошибке, на одной половине номер будет повторяться?
В моём варианте нужно бы сделать пару несущественных коррекций:
[vba]
Код
Function sravni(s1$, s2$, Optional razd$ = ",") '... sravni = Join(dic3.keys, razd) End Function
[/vba] Да, сортировки нет... Но можно добавить как внешнюю функцию что-нибудь хоть пузырьком (правда так отсортируются как текст, но можно подкрутить):
[vba]
Код
'.... a = dic3.keys SortArray a sravni = Join(a, razd) End Function
Private Sub SortArray(ByRef a As Variant) Dim i As Long, j As Long Dim t As Variant
'standard bubble sort loops For i = LBound(a) To UBound(a) - 1 For j = i + 1 To UBound(a) If a(i) > a(j) Then 'change to < for descending order t = a(i) a(i) = a(j) a(j) = t End If Next j Next i End Sub
[/vba]
Михаил, а если номер квартиры будет записан типа "14б" или "15/2"? А если вдруг, по ошибке, на одной половине номер будет повторяться?
В моём варианте нужно бы сделать пару несущественных коррекций:
[vba]
Код
Function sravni(s1$, s2$, Optional razd$ = ",") '... sravni = Join(dic3.keys, razd) End Function
[/vba] Да, сортировки нет... Но можно добавить как внешнюю функцию что-нибудь хоть пузырьком (правда так отсортируются как текст, но можно подкрутить):
[vba]
Код
'.... a = dic3.keys SortArray a sravni = Join(a, razd) End Function
Private Sub SortArray(ByRef a As Variant) Dim i As Long, j As Long Dim t As Variant
'standard bubble sort loops For i = LBound(a) To UBound(a) - 1 For j = i + 1 To UBound(a) If a(i) > a(j) Then 'change to < for descending order t = a(i) a(i) = a(j) a(j) = t End If Next j Next i End Sub
Михаил, а если номер квартиры будет записан типа "14б" или "15/2"? А если вдруг, по ошибке, на одной половине номер будет повторяться?
Игорь, так не было же примера, поэтому и указал в своем решении, по какому принципу реализовал Не спорю, что твой вариант более универсален, т.к. может работать с текстовыми значениями, у не чувствителен к дублям в рамках отдельной строки
Михаил, а если номер квартиры будет записан типа "14б" или "15/2"? А если вдруг, по ошибке, на одной половине номер будет повторяться?
Игорь, так не было же примера, поэтому и указал в своем решении, по какому принципу реализовал Не спорю, что твой вариант более универсален, т.к. может работать с текстовыми значениями, у не чувствителен к дублям в рамках отдельной строкиMCH