Страницы: 1 2 След.
RSS
Заполнение диапазонов по первому признаку
 

Добрый день!

На практике столкнулся с такой проблемой: в столбце "Признак 1" имеются категориальные переменные, например, A, B, C. В столбце «Признак 2» относительно диапазона переменных имеется какое-то описание, но которое встречается только один раз в какой-то ячейке, а остальные - нули.

!!! Необходимо заполнить описанием все значения, где есть нули.

Итоговый ответ находится в столбце “Результат”.

Признак 1Признка 2Результат
A0ttt
Atttttt
A0ttt
Bvvvvvv
B0vvv
C0rrr
C0rrr
C0rrr
Crrrrrr
C0rrr

 
Vasilij_83, правила: файл-пример.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Цитата
Заполнение диапазонов по первому признаку
первый признак - это что? Ноль это тоже признак. Надо более конкретно описывать.
ну и №2.
По вопросам из тем форума, личку не читаю.
 
набор функций ПРОСМОТР и ЕСЛИ  помогут найти по определенному признаку
Лень двигатель прогресса, доказано!!!
 
Vasilij_83,
Цитата
Сергей написал:
функций ПРОСМОТР
Код
=ПРОСМОТР(2;1/(($C$4:$C$13<>0)*($B$4:$B$13=$B4));$C$4:$C$13)
Не бойтесь совершенства. Вам его не достичь.
 
Спасибо!

Не совсем понятно, как участвует 1/(($C$4:$C$13<>0)*($B$4:$B$13=$B4)) в данной функции. Сразу скажу, что мне понятно, что при делении на ноль в этом выражении формируется ошибка #ДЕЛ/0!. И еще вопрос.......а как быть с повторениями в категориальных переменных? Эта формула (=ПРОСМОТР(2;1/(($C$4:$C$13<>0)*($B$4:$B$13=$B4));$C$4:$C$13)) не будет работать в данном случае, если блоки таких переменных будут появляться ниже, но с другим описанием?
Изменено: Vasilij_83 - 09.01.2019 13:47:05
 
Vasilij_83, вам прежде всего надо понять
Цитата
JayBhagavan написал:
Vasilij_83 , правила: файл-пример.
По вопросам из тем форума, личку не читаю.
 
Vasilij_83, приложите файл пример.
формула ищет последнее значение в списке согласно заданным условиям
Не бойтесь совершенства. Вам его не достичь.
 
Добавил ниже блок А с другим описанием:

Признак 1Признка 2Результат
A0ttt
Atttttt
A0ttt
Bvvvvvv
B0vvv
C0rrr
C0rrr
C0rrr
Crrrrrr
C0rrr
A0www
Awwwwww
A0www
A0www
 
Vasilij_83, файл пример это файл в формате ексель.
Код
Изменено: Mershik - 09.01.2019 14:32:08
Не бойтесь совершенства. Вам его не достичь.
 
=ЕСЛИ($B2=0;ИНДЕКС($B:$B;ЕСЛИОШИБКА(АГРЕГАТ(14;6;СТРОКА(ИНДЕКС($B:$B;СТРОКА($1:$1)+1):ИНДЕКС($B:$B;СТРОКА()-1))/(ИНДЕКС($B:$B;СТРОКА($1:$1)+1):ИНДЕКС($B:$B;СТРОКА()-1)<>0)/(ИНДЕКС($A:$A;СТРОКА($1:$1)+1):ИНДЕКС($A:$A;СТРОКА()-1)=$A2);1);АГРЕГАТ(15;6;СТРОКА(ИНДЕКС($B:$B;СТРОКА()+1):ИНДЕКС($B:$B;ЧСТРОК($B:$B)))/(ИНДЕКС($B:$B;СТРОКА()+1):ИНДЕКС($B:$B;ЧСТРОК($B:$B))<>0)/(ИНДЕКС($A:$A;СТРОКА()+1):ИНДЕКС($A:$A;ЧСТРОК($A:$A))=$A2);1)));$B2)

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Vasilij_83, может хватит уже "на пальцах" объяснять? У Вас не установлен Excel? Почему бы не показать Excel-файл, как того требуют правила?
 
мальчик буквально на пальцах обьяснил, что его зовут Хуан
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Приложить файл не позволяет политика моего работодателя.
 
а подготовить файл пример - не позволяет лень?
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Создайте файл-аналог с нейтральными данными.
 
Ігор Гончаренко, ТС вроде сообщил, что политика компании не позволяет приложить файл.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Если нет возможности ОТПРАВИТЬ файл, то сделайте это вечером из дома.
 
дел поспешил
Изменено: БМВ - 09.01.2019 14:46:22
По вопросам из тем форума, личку не читаю.
 
вот оно че!
принять файл с решением - видимо то же не получится(((
Изменено: Ігор Гончаренко - 09.01.2019 14:45:23
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
БМВ написал:
=INDEX($B$2:$B$15;MATCH(1;($B$2:$B$15<>0)*($A$2:$A$15=$A2))
В таком случае ответ будет такой,
Признак 1Признка 2Результат
A0ttt
Atttttt
A0ttt
Bvvvvvv
B0vvv
C0rrr
C0rrr
C0rrr
Crrrrrr
C0rrr
A0ttt
Awwwttt
A0ttt
A0ttt
что не совсем правильно. Вечером выложу файл. Спасибо!!!
 
Цитата
Mershik написал:
формула ищет последнее значение в списке согласно заданным условиям
Vasilij_83, конечно о чем Вам выше сказано было

а изначально данные именно такие были...а решение от JayBhagavan,  вам видимо тоже не нравится)
Не бойтесь совершенства. Вам его не достичь.
 
Mershik, на втором примере моя формула не выдаёт желаемый ТС результат.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Решение от JayBhagavan великолепно, но боюсь, что имеется более простой способ решения, так как при любого передаче таких формул в другие руки (например, коллеге), эти руки не распутают этот клубок Excel.
 
Код
Sub Replace0()
  Dim r&, rc&, v: r = 1 ' начнем с строки 1
  Do While Not IsEmpty(Cells(r, 1))
    rc = 0
    Do While Cells(r, 1) = Cells(r + rc, 1)
      If Cells(r + rc, 2) <> 0 Then v = Cells(r + rc, 2)
      rc = rc + 1
    Loop
    Cells(r, 2).Resize(rc, 1).Value = v: r = r + rc
  Loop
End Sub
Изменено: Ігор Гончаренко - 09.01.2019 15:24:45
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Решение на базе формулы от БМВ (вводить в D2):
=ЕСЛИ($A2=ИНДЕКС($A:$A;СТРОКА()-1);ИНДЕКС(D:D;СТРОКА()-1);ИНДЕКС($B2:$B$15;ПОИСКПОЗ(1;($B2:$B$15<>0)*($A2:$A$15=$A2);0)))
ФОРМУЛА МАССИВА (см. подпись)

Vasilij_83, не согласен. Моё решение выглядит наворочено (а БМВ показал лучше пример решения) и не решает Ваш пример с повтором групп признака 1.
Изменено: JayBhagavan - 09.01.2019 15:06:02

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
JayBhagavan, я и не спорю с Вашим утверждением, просто, если такое решение на время отпуска отдать коллеге, а там что-то слетит в формуле, то будет караул.  Сейчас пробую макрос и решение не базе формулы от БМВ.
 
Упростил :-)
=INDEX(INDEX(B:B;LOOKUP(2;1/($A$1:A1<>A2)/($A$2:A2=A2);ROW($A$2:A2))):INDEX(B:B;MATCH(1;INDEX(($A2:$A$15=A2)*($A3:$A$16<>A2););)+ROW()-1);MATCH(1;(INDEX(B:B;LOOKUP(2;1/($A$1:A1<>A2)/($A$2:A2=A2);ROW($A$2:A2))):INDEX(B:B;MATCH(1;INDEX(($A2:$A$15=A2)*($A3:$A$16<>A2););)+ROW()-1)<>0)*(INDEX(A:A;LOOKUP(2;1/($A$1:A1<>A2)/($A$2:A2=A2);ROW($A$2:A2))):INDEX(A:A;MATCH(1;INDEX(($A2:$A$15=A2)*($A3:$A$16<>A2););)+ROW()-1)=$A2);0))
Изменено: БМВ - 09.01.2019 15:46:29 (Вложение в сообщении ниже)
По вопросам из тем форума, личку не читаю.
 
Мое решение, если еще актуально...

Option Explicit
Sub priznak()
   Dim wsh As Worksheet
   Dim n, i As Integer
   Set wsh = ThisWorkbook.Worksheets(1)
   n = 2
   Do While wsh.Cells(n, 1).Value <> ""
       If wsh.Cells(n, 2).Value <> 0 Then
           wsh.Cells(n, 3).Value = wsh.Cells(n, 2).Value
       Else
           i = 2
           Do While wsh.Cells(i, 1).Value <> ""
               If wsh.Cells(i, 2).Value <> 0 And wsh.Cells(i, 1).Value = wsh.Cells(n, 1).Value Then
                   wsh.Cells(n, 3).Value = wsh.Cells(i, 2).Value
               End If
           i = i + 1
           Loop
       End If
       n = n + 1
   Loop
End Sub
 
PRN1977, кнопка для оформления кода в сообщении
<...>
Страницы: 1 2 След.
Наверх