Страницы: 1
RSS
Сгруппировать ненулевіе значения из двух столбцов в один с подтягиванием данных из третьего столбца
 
Всем привет. Есть 2 колонки "А" и "В" с цифровыми значениями и колонка "C" со значениями относящимися к колонкам "А" и "В" одновременно. Необходимо в колонку "F" сгруппировать все значения из колонок "A" и "B" (кроме 0) последовательностью обработки колонок "А" и "В" слева-направо и сверху-вниз. Дополнительно, в колонку "G" выводятся значения из колонки "C", для найденных значений (кроме 0) колонок "А" и "B".

Пример:
1. Слева направо, сверху вниз проверяем значения колонок "А" и "В". Т.е. сначала обращаемся к ячейке "А1", далее "В1", далее "А2", далее "В2" и т.д. вниз до конца.
2. Найдя любое значение не =0 переносим его в колонку "F" друг за другом. Здесь это будут цифры -15, 15, 22, 25 и тд как на скриншоте и в файл примере.
3. В колонку "G", соответственно переносятся значения из колонки "С", найденных ранее значений колонок "А" и "В" той же строки. То есть, здесь для первого найденного числа не равное нулю в B5 = -15 выводим соответствующее число из С5 = 4. Далее найдя в А6 значение 15 выводим из С6 значение 5 и тд. Т.е. берем из той же строки.

На скриншоте наглядно показал как группируются цифры, файл пример прилагаю. Благодарю за помощь!

 
Изменено: vikttur - 18.08.2021 11:32:17
 
oleg9911, Вариант, при условии, что в диапазоне А:B, в 1ой строке может быть только одно значение неравное 0 (как в примере)

для столбца F
Код
=ЕСЛИОШИБКА(СУММ(ИНДЕКС($A$1:$B$26;НАИМЕНЬШИЙ(ЕСЛИ($A$2:$B$26<>0;СТРОКА($A$2:$A$26));СТРОКА(A1));;1));"")
Для столбца G
Код
=ЕСЛИОШИБКА(ИНДЕКС($A$1:$C$26;НАИМЕНЬШИЙ(ЕСЛИ($A$2:$B$26<>0;СТРОКА($A$2:$A$26));СТРОКА(A1));3);"")
Формулы массива (вводим через ctrl + shift + enter)
Изменено: Александр П. - 18.08.2021 09:38:28
 
oleg9911, вариант
Код
Sub mrshkei()
Dim arr, arr2, lr As Long, i As Long,  k As Long
lr = Cells(Rows.Count, 1).End(xlUp).Row
arr = Range("A2:C" & lr)
ReDim arr2(1 To UBound(arr), 1 To 2): k = 1
For i = LBound(arr) To UBound(arr)
    If arr(i, 1) <> 0 And arr(i, 3) <> 0 Then
        arr2(k, 1) = arr(i, 1)
        arr2(k, 2) = arr(i, 3)
        k = k + 1
    ElseIf arr(i, 2) <> 0 And arr(i, 3) <> 0 Then
        arr2(k, 1) = arr(i, 2)
        arr2(k, 2) = arr(i, 3)
        k = k + 1
    End If
Next i
Range("F2").Resize(UBound(arr2), 2) = arr2
End Sub
Изменено: Mershik - 18.08.2021 09:34:58
Не бойтесь совершенства. Вам его не достичь.
Страницы: 1
Наверх