Я хотел бы добраться из точки А в точку Б, как показано ниже. Я думал, что это транспонированное решение, но, похоже, оно работает не так, как предполагалось.
По сути, я пытаюсь найти способ легко собирать данные и управлять ими (пункт А), а затем отображать их определенным образом (пункт Б).
Пытаетесь получить представление о том, как решить эту проблему с помощью Excel или с помощью программирования?
Точка А
Точка Б
Выполнять это в Excel и C# — это две совершенно разные вещи.
Выполнимо с помощью функции ПОИСКПОЗ:
Допустим, у вас есть первая таблица на Листе Sheet1.
На листе 2 назовите столбцы точно так же, как вы:
Теперь в ячейку B2 скопируйте и вставьте следующее:
=IF(SUM(ISNUMBER(MATCH(Sheet1!$A$2:$A$5,$A2,0))*ISNUMBER(MATCH(Sheet1!$B$2:$B$5,B$1,0)))>0,"x","")
Затем перетащите угол ячейки, чтобы заполнить всю таблицу.
Мы пытаемся проверить, соответствует ли каждая ячейка в столбце A листа Sheet1 содержимому заголовка строки (server1):
MATCH(Sheet1!$A$2:$A$5,$A2,0)
Это оценивается как {1, 1, #N/A, #N/A}
.
Затем мы сохраняем только те ячейки, которые являются числами, используя ISNUMBER
(обратите внимание на размещение знака $ на $A2, который блокирует столбец, но не строку, чтобы он продолжал указывать на заголовок столбца, когда мы перетаскиваем угол ячейки):
ISNUMBER(MATCH(Sheet1!$A$2:$A$5,$A2,0))
Это оценивается как {TRUE, TRUE, FALSE, FALSE}
.
Мы делаем то же самое для заголовка столбца (на этот раз мы блокируем строку B$1, чтобы сохранить заголовок) и перемножаем два массива. В итоге у нас есть {TRUE * TRUE, TRUE * FALSE, FALSE * TRUE, FALSE * FALSE}
, который оценивается как {1, 0, 0, 0}
.
Мы суммируем все эти числа, используя SUM
, и с помощью простого IF
мы можем сказать, что если эта сумма равна единице или больше, то я хочу отобразить x
.
Это не очень хороший ответ. Хотя это работает, это очень трудоемкое и ручное решение, и оно очень похоже на что-то, созданное LLM.
Я имею в виду, что я сделал все, что мог, извините, если я говорю как ChatGPT, но не нужно грубить. Черт возьми, ИИ в наши дни делает всех параноиками
Если у вас Excel 365:
=LET(
serverdata, A2:A5,
servicesdata, B2:B5,
servers, UNIQUE(serverdata),
services, TRANSPOSE(UNIQUE(servicesdata)),
matchMatrix, IF(COUNTIFS(serverdata, servers, servicesdata, services) > 0, "x", ""),
VSTACK(HSTACK("", services), HSTACK(servers, matchMatrix))
)
serverdata: ссылка на диапазон ввода сервера.
Servicesdata: ссылка на диапазон входных данных служб.
серверы: извлекайте уникальные имена серверов из данных сервера.
сервисы: извлекайте уникальные имена сервисов из данных сервисов и транспонируйте их в строковый формат.
matchMatrix: проверка каждой комбинации серверов и служб. Если совпадение найдено (т. е. сервер предлагает услугу), поставьте «х»; в противном случае оставьте ячейку пустой.
VSTACK: уложите строку заголовка (услуги) поверх матрицы соответствия, начиная с пустой ячейки.
HSTACK: расположите имена серверов слева от матрицы соответствия.
Заполните x, когда есть совпадение
Есть ли шанс, что вы сможете объяснить суть пятилетнему ребенку?
@Rod - зависит от того, насколько они умны, см. выше.
Этот вопрос не по теме Stack Overflow. Если вы спрашиваете, как это сделать в Excel, то это вопрос об использовании программного обеспечения, см. SuperUser. Если вы спрашиваете, как это сделать на C#, вам следует выяснить, какие шаги вам нужно выполнить для преобразования данных, прежде чем пытаться создать код.