У меня есть набор данных о заболеваниях, сохраненный в листе MS Excel, формат данных приведен ниже:

| Object Name | Symptom 1 | Symptom 2 | Symptom 3 |...| Symptom N | Disease | | ABC | 1 | 0 | 0 |...| n | XYZ | | ABC | 0 | 1 | 0 |...| n | XYZ | | ABC | 1 | 0 | 1 |...| n | YZX | | ABC | 1 | 1 | 0 |...| n | XYZ |

где в первый столбец вводится переменная, т. е. имя какого-либо объекта, и выходной столбец, т. е. последний столбец - это название болезни. Столбцы между ними являются столбцами симптомов для конкретной болезни этого объекта.

Теперь для каждой строки на листе я хочу получить все атрибуты симптомов, где значение равно 1, то есть этот симптом присутствует, используя столбец «Болезнь» в качестве переменной решения. Логика приведена ниже.

for each row in the sheet 
  -->  IF (Disease = XYZ)
  --> Get all the Symptoms variables where value is 1

Желаемый результат для первых строк следующий:

Ряд 1 -> XYZ (Симптом1)
Ряд 2 -> XYZ (Симптом2)
Ряд 3 -> XYZ (Симптом1, Симптом3)
Ряд 4 -> XYZ (Симптом1, Симптом2)


Как я могу сделать это в MS Excel, используя формулу IF? Помощь в этом отношении будет высоко оценена.

2 ответа2

0

Я думаю, что вы можете использовать функцию IF(и. Я написал следующее:= ЕСЛИ (И (H32 = 1, I32 = 1, J32 = 1), K32, "Без болезней")

H32, I32, J32 имели 1 или 0. К32 была «болезнь».

Вы также можете сделать что-то вроде этого:

= ЕСЛИ (H32+I32+J32 = 3, К32, К33)

К33 не был «болезнью», тогда как остальные клетки были такими же, как указано выше.

Это помогает?

0

Если вы можете позволить себе запасную пустую рабочую таблицу, вот пример. Пусть Sheet1 будет основным листом, а Sheet2 - пустым; названия симптомов приведены в Sheet1!$C$4:$F$4 , флаги на Sheet1!C5:F8 .

Тип

=B5&IF(Sheet1!C5,","&Sheet1!C$4,"")

в ячейку C5 на Sheet2 а затем скопируйте эту ячейку, чтобы заполнить блок Sheet2!C5:F8 . Последний столбец (Sheet2!F5:F8) будет содержать списки симптомов для каждой строки (с дополнительной запятой впереди).

Затем просто добавьте формулу

=G5&"("&REPLACE(Sheet2!F5,1,1,"")&")"

в ячейку Sheet1!H5 на Sheet1 и скопируйте его вниз по столбцу.

Если ваша база данных слишком велика, и такая трата не возможна, подумайте об использовании функции VBA с соответствующими изменениями.

Редактировать:

Некоторые предложения:

Если он работает нормально с ~ 2000 записями, но не может обработать весь размер, то, по крайней мере, вы можете разбить его на куски.

Решение VBA также является возможной альтернативой.

Еще одной альтернативой (OT) может быть использование Gnumeric. Он может читать / записывать файлы excel , а его функция concatenate может корректно обрабатывать диапазоны, поэтому для OP существует решение для одной ячейки.

Существует также возможность создания собственной excel Add-on , но в этом случае кажется, что это будет излишним.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .