(Я впервые опубликовал это как «сортировать» проект. Но данные отсортированы в начале. Это действительно больше манипуляции для вставки пустых ячеек, где это необходимо.)

У меня есть несколько столбцов данных с отметкой времени. Данные уже отсортированы от самых старых к новым в каждом столбце. Было бы неплохо, если нужно, перевести его с самого нового на самый старый, и я могу сделать это за пределами этого запроса. Отметки времени в одном столбце могут повторяться или не повторяться в других столбцах. Мне нужно манипулировать данными столбцов, чтобы при просмотре строк, всех столбцов метки времени всегда увеличивались по мере того, как я работаю по строкам.

Поэтому некоторые данные в некоторых столбцах должны быть перемещены вниз, оставляя пустые ячейки в этом столбце. Например, где столбец (B в примере) может не иметь данных в "10-30 8:41:10" , как другой столбец (A в примере), но он имеет данные в "10-30 8:41:08" и в "10-30 16:51:12" . Поэтому строки с данными "10-30 8:41:10" в других столбцах должны быть пустыми в этом столбце (например, ячейки B3 и B4, в приведенном ниже примере).

Изображения в качестве примера представляют собой лишь небольшую выборку реальных данных. Реальный пример того, что нужно манипулировать, имеет 21 столбец. Самый короткий столбец содержит 62 строки данных, а самый длинный столбец содержит 462 строки данных. Мне нужно манипулировать новым набором данных как минимум 3 раза в неделю. Я извлекаю эти данные в виде текстового файла и затем импортирую их в Excel. Я могу разграничить при необходимости, чтобы выделить дату, время или все, что нужно, прежде чем манипулировать для облегчения. Время всегда HH:MM:SS в 24-часовом формате. Год не актуален. Данные всегда будут в короткие сроки.

Сложность решения не имеет первостепенного значения, так как альтернатива состоит в том, чтобы перетасовать ячейки вручную. Я даже не могу выполнить одну манипуляцию до того, как наступит следующий цикл. Решение не должно быть живым / непрерывным. Я загружу данные в Excel, а затем манипулирую ими один раз. Никакие дополнительные данные не будут добавлены или изменены.

Я думаю, что В.Б. является ответом, но я никогда не использовал его и увязал в попытках. В настоящее время я смотрю, могу ли я использовать MIN/MAX в каждой строке, а затем VB, чтобы вставить и сдвинуть вниз в соответствующих столбцах. Моя другая идея - использовать RANK и / или «LARGE / SMALL», чтобы получить номер, назначенный каждой ячейке, а затем использовать другие функции, чтобы скопировать их на другой лист в правильных местах для выполнения манипуляции. Не знаю, сработает ли это, но пробую все, что я могу придумать.

Перед манипуляциями:
до манипуляции

После манипуляции:
после манипуляции

1 ответ1

0

Предполагая 100 строк данных ..

положил :

E1 ---->  =IFERROR(DATE(2018,MID(A1,1,2),MID(A1,4,2))+TIME(MID(A1,7,2),MID(A1,10,2),MID(A1,13,2)),"")   

и перетащите в G1, затем

I1 ---->  =IFERROR(RANK(E1,$E:$G,1),"")

и перетащите в K1, затем

M1 ---->  1 (type manually)
M2 ---->  =IF((ROW()-MATCH($M1,M:M,0)+1)<=MAX(COUNTIF($I$1:$I$100,$M1),COUNTIF($J$1:$J$100,$M1),COUNTIF($K$1:$K$100,$M1)),M1,M1+COUNTIF($I$1:$K$100,$M1))

затем

P1 ---->  =IF(IF(ROW()=1,TRUE,$M1<>OFFSET($M1,-1,0)),IFERROR(INDEX(A$1:A$100,MATCH($M1,I$1:I$100,0)),""),IF($M1>MAX($I$1:$K$100),"",IF(COUNTIF(I$1:I$100,$M1)<=1,"",IF(COUNTIF(INDIRECT("M1:M"&ROW()),$M1)<=COUNTIF(I$1:I$100,$M1),INDEX(A$1:A$100,MATCH($M1,I$1:I$100,0)+COUNTIF(INDIRECT("M1:M"&ROW()),$M1)-1),""))))

и перетащите на R1.

Затем перетащите E1:K1 на E1:K1, M2 на линию M140 и P1:R1 на P130:R130.

Это должно сделать это.


За кулисами :

  • столбец EG: используйте mid() для извлечения текста даты и времени и используйте date()+time для преобразования этого текста в значение времени / даты excel.
  • Столбец IK: используйте rank(), чтобы получить время в последовательности, оно будет иметь тот же номер, если это ничья.
  • столбец M: используйте countif(), чтобы зарезервировать и перечислить "время в последовательности" для каждой строки.
  • PR-колонка: [окей .. надо быть честным в этом .. это немного сложно ... но ДАЙТЕ сказать мне, если вы этого не сделаете (вы все равно являетесь владельцем квеста ..) , Надеюсь, вы чувствуете себя лучше, понимая это, чтобы вы могли настроить его позже / использовать его лучше. (:]

колонка PR:

Для ясности: вы можете скопировать формулу .. положить ее в notepad++ или блокнот и разбить (табулировать / ввести).

1-е: если это первое вхождение "время в последовательности" в столбце M, тогда используйте index() для столбца A: C, используя сопоставление для I: K. или эта часть IFERROR(INDEX(A$1:A$100,MATCH($M4,I$1:I$100,0)),"")

2-й: если это не первое вхождение в столбце M, используйте проверку с помощью countif() в каждом столбце A: C, чтобы увидеть, есть ли еще совпадения для той же «даты / времени».

Если не больше, покажите пустым. Если в соответствующем столбце найдено больше таких же «даты / времени», отобразите их, используя функцию index() для столбца A:C, используя сопоставление для I:K, которое было offset() для countif() для текущий столбец строки M. или эта часть: INDEX(A$1:A$100,MATCH($M1,I$1:I$100,0)+COUNTIF(INDIRECT("M1:M"&ROW()),$M1)-1)

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