Страницы: 1
RSS
Сравнение диапазонов двух таблиц с несколькими условиями, Сравнить два столбца, исходя из текстовых условий и значениям смежных столбцов
 
Доброго дня!
Необходимо сравнить столбец "А" таблицы№1 со столбцом "Е" таблицы№2 и вывести все значения ячеек из столбца А , В, С при условиях:
1) Значения в столбце "А" начинаются с буквы t
2) Значения в столбце "B" не равны 0
3) Значения в столбце "А" не совпадают со значениями в столбце "Е" (их необходимо вывести в таблицу 4)

Правильные значения в файле подсветил зеленым в таблице3.
 
Цитата
rafa_el написал: Необходимо
Кому? Если вам, то что вы конкретно уже сделали и что конкретно у вас не получается?!
ps Есть Правила - п. 2.7, посмотрите еще раз... ;)
"Ctrl+S" - достойное завершение ваших гениальных мыслей!.. ;)
 
Конечно, необходимо это только мне ;)
Просто я думал, что жалостливую историю про то как я мучаюсь и почти плачу, делая эти операции ручками никому не интересны...
 

Цитата
Z написал:
что вы конкретно уже сделали
Это одинаковые товары которые должны быть в табл. 4 (переменные из другого файла)
Формула№1 это №строки, удовлетворяющее условиям
Формула№2 это Нужная ячейка

Код
=ЕСЛИ(СЧЁТЕСЛИ('Выгрузка Каталога Товаров'!C:C;'Поставщик1'!S2&"*");МАКС($A1:A$2)+1;"")
=ИНДЕКС('Выгрузка Каталога Товаров'!S:S;ПОИСКПОЗ(СТРОКА(A1);$A:$A;0))

 
1 и 2 делаете фильтром.
Для 3 делаете допстолбец с формулой и фильтруете ещё и по нему.
Минутное дело...
И получаем что в таблицу3 забыли добавить
t2212-A 12 192
Изменено: Hugo - 11.03.2018 16:52:14
 
Доброе время суток.
Offtop
Цитата
rafa_el написал:
про то как я мучаюсь
Не мучайтесь! Почувствуйте себя работодателем!
 
Так вся суть сего послания, чтобы ЭТО фильтром не делать, а выводить автоматически.
 
Про автоматически разговора не было! :)
 
Цитата
Hugo написал:
И получаем что в таблицу3 забыли добавитьt2212-A
Да
 
Код
Sub DoItForMe()
Dim Dict As Object, a&, b&, arr(), aa As Range, arr0()
Set Dict = CreateObject("Scripting.Dictionary")
a = Sheets(1).UsedRange.Rows.Count
arr = Sheets(1).Range(Cells(3, 1), Cells(a, 3)).Value
For Each aa In Range(Cells(3, 5), Cells(a, 5))
  If Not Dict.Exists(aa.Value) Then Dict.Add aa.Value, 0
Next
ReDim arr0(1 To UBound(arr, 1), 1 To 3): b = 1
For a = 1 To UBound(arr, 1)
  If arr(a, 2) > 0 And Len(arr(a, 1)) > 0 And Left(arr(a, 1), 1) = "t" And Not Dict.Exists(arr(a, 1)) Then
    arr0(b, 1) = arr(a, 1): arr0(b, 2) = arr(a, 2): arr0(b, 3) = arr(a, 3): b = b + 1
  End If
Next
[M3].Resize(b - 1, 3) = arr0
End Sub
 
ну допустим
=IFERROR(INDEX(A:A;SMALL(IF(($B$3:$B$20>0)*(COUNTIF($E$3:E34;$A$3:$A$20)=0)*(LEFT($A$3:$A$20;1)="t");ROW($A$3:$A$20));ROW(A1)));"")
и
=IFERROR(INDEX(A:A;SMALL(IF((COUNTIF($E$3:E34;$A$3:$A$20)<>0)*(LEFT($A$3:$A$20;1)="t");ROW($A$3:$A$20));ROW(A1)));"")
По вопросам из тем форума, личку не читаю.
 
Anchoret, Ваш макрос не выводит 3 условие
Цитата
rafa_el написал:
3) Значения в столбце "А" не совпадают со значениями в столбце "Е" (их необходимо вывести в таблицу 4)
И выводит таблицу 3 в таблицу4
Ну а так супер :)  Спасибо!

БМВ,  Спасибо!
Ваша формула тоже работает.
Какой все таки крутой форум у вас!
Все добрые и отзывчивые :D  
 
Код
Sub DoItForMe()
Dim Dict As Object, a&, b&, c&, arr(), aa As Range, arr0(), arr1()
Set Dict = CreateObject("Scripting.Dictionary")
a = Sheets(1).UsedRange.Rows.Count
arr = Sheets(1).Range(Cells(3, 1), Cells(a, 3)).Value
For Each aa In Range(Cells(3, 5), Cells(a, 5))
  If Not Dict.exists(aa.Value) Then Dict.Add aa.Value, 0
Next
ReDim arr0(1 To UBound(arr, 1), 1 To 3): b = 1
ReDim arr1(1 To UBound(arr, 1), 1 To 3): c = 1
For a = 1 To UBound(arr, 1)
  If arr(a, 2) > 0 And Len(arr(a, 1)) > 0 And Left(arr(a, 1), 1) = "t" And Not Dict.exists(arr(a, 1)) Then
    arr0(b, 1) = arr(a, 1): arr0(b, 2) = arr(a, 2): arr0(b, 3) = arr(a, 3): b = b + 1
  ElseIf Len(arr(a, 1)) > 0 And Left(arr(a, 1), 1) = "t" And Dict.exists(arr(a, 1)) Then
    arr1(c, 1) = arr(a, 1): arr1(c, 2) = arr(a, 2): arr1(c, 3) = arr(a, 3): c = c + 1
  End If
Next
If b > 1 Then [I3].Resize(UBound(arr, 1), 3) = arr0: Range("I3:I" & b + 1).Interior.Color = vbGreen
If c > 1 Then [M3].Resize(UBound(arr, 1), 3) = arr1: Range("M3:M" & c + 1).Interior.Color = vbRed
End Sub
Изменено: Anchoret - 11.03.2018 17:50:22
Страницы: 1
Наверх