Я хочу скопировать из исходного листа выбранные столбцы (h,f,e,g,k) из соответствующих строк (соответствующие строки имеют запись в столбце B, которая соответствует целевому листу A1/"заголовку")
Формула, которую я использую, кажется, пропускает первую строку соответствующих данных. Не могу понять почему.
Исходный лист имеет заголовок в строке 1, данные начинаются со строки 2. На целевых листах заголовок листа находится в строке 1, заголовок в строке 2, затем данные копируются, начиная со строки 3.
Формула в ячейке B3 на листе назначения:
=ЕСЛИОШИБКА(ИНДЕКС('Вставить данные'!$B$1:$K$4000,МАЛЫЙ(ЕСЛИ('Вставить данные'!$B$1:$B$4000=$A$1,ROW('Вставить данные'!$ B$1:$B$4000)),ROWS($H$1:$H2)),7),"")
это должно взять количество из столбца H на исходном листе и поместить его в столбец B на целевом листе.
Формула в ячейке E3 на листе назначения:
=ЕСЛИОШИБКА(ИНДЕКС('Вставить данные'!$B$1:$K$4000,SMALL(IF('Вставить данные'!$B$1:$B$4000=$A$1,ROW('Вставить данные'!$ B$1:$B$4000)),ROWS($G$1:$G2)),6),"")
это должно взять DESC из столбца G на исходном листе и поместить его в столбец E на целевом листе.
Я не уверен, почему вы не используете FILTER. (возможно, у вас нет MS365).
Но вы можете поместить формулу ниже в B3:
=IFERROR(INDEX('Paste-Data'!$A$1:$K$4000, SMALL(IF('Paste-Data'!$B$2:$B$4000 = $A$1, ROW('Paste-Data'!$B$2:$B$4000)),ROW(H1:H6)), {1,8,6,5,7,11}),"")
Номер строки, которую вы хотите выбрать:
SMALL(IF('Paste-Data'!$B$2:$B$4000 = $A$1, ROW('Paste-Data'!$B$2:$B$4000)), ROW(H1:H6))
Номер столбца, который вы хотите выбрать: {1, 8, 6, 5, 7, 11}
Результат выглядит так:
Потрясающе, спасибо. Я попробую это и дам вам знать!
В вашей формуле используется ROW, а не ROWS, и номер вашей строки, начинающийся с $B$2 вместо $B$1 в SMALL (устранил мою проблему. Мне не удалось заставить работать массив выбора столбца вместо {1,4,7, и т. д.}, мне пришлось указать точный номер столбца для извлечения в каждом столбце dest. Не знаю, в чем разница и как вы получили показанный результат. В конце концов, у меня это не сработало. готовая формула для B3: =IFERROR(INDEX('Paste-Data'!$B$1:$K$4000,SMALL(IF('Paste-Data'!$B$2:$B$4000=$A$1, ROW('Вставить данные'!$B$2:$B$4000)),ROW($H1:$H$4000)),7)&"","")
У вас нет MS365? В противном случае выбор нескольких строк и столбцов, вероятно, вам не подойдет. Или вы пытались ввести его как формулу массива? используя Ctrl + Shift + Enter? У меня нет Excel до 365, поэтому я не могу подтвердить себя.
Если вы используете рабочий стол MS365, вам не нужно использовать ctrl+shift+enter. Просто поместите формулу в B3, и она прольется. Вы когда-нибудь пробовали использовать индекс для выбора нескольких строк и столбцов? очень простой способ проверить это =INDEX('Paste-Data'!A1:K6,{1;2},{3,4})
. Вот как это выглядит:i.imgur.com/PF7a4nU.png (я использую Excel для Mac версии 16.86 (24042911), но уверен, что то, что работает на Mac, будет работать и в Windows)
Я также пытаюсь не просто захватить целые столбцы, я использовал функцию массива, потому что мне нужно было извлекать только те данные, которые соответствуют критериям в этом столбце NAME.... Сейчас я смотрю на функцию FILTER. Похоже, он не способен переупорядочивать столбцы, это одна из тех новых функций типа Spill... если бы мои исходные данные и данные назначения совпадали, это было бы здорово, но я не могу понять, как переупорядочить ФИЛЬТР.
возможно, ключевая информация, которую я упустил, заключается в том, что исходные данные будут часто меняться - я никогда не знаю, сколько строк в каждом столбце «Имя» у меня будет. Моя цель - иметь несколько листов, каждый с именем, и для каждого листа копировать только строки с совпадающим именем, а также копировать только те столбцы, которые мне нужны, и переупорядочивать эти столбцы... возможно, это сложнее, чем идеально. , но я пытаюсь взять экспортированные данные из одного программного обеспечения и автоматически отформатировать их для использования в другом программном обеспечении.
Используйте HSTACK
, чтобы изменить порядок столбцов, а затем используйте FILTER
поверх переставленных столбцов. support.microsoft.com/en-us/office/…
Как насчет этого?
Формула в ячейке B16:
=INDEX($C$1:$K$6;MATCH(INDIRECT("A"&ROW()-2-LEN($A16));$B$1:$B$6;0)-1+LEN($A16);MATCH(B$15;$C$1:$K$1;0))
Это вернет желаемый результат для любого пользователя (Джо, Боба).
Вам нужно обратить внимание на 2 вещи:
INDIRECT
, который является нестабильной функцией, поэтому, если вы используете его интенсивно, это может привести к перегрузке ваших рабочих листов.
Почему бы просто не использовать функцию
FILTER
?