«Разделить» строку с разделителями, сохраняя пустые записи


10

Я пытаюсь использовать SPLITи JOINфункции в Google Таблицах (новая версия) манипулировать некоторые данные, и я бегу в проблемы , потому что SPLITне сохраняя пустые записи.

Источник данных настроен так:

   |  A    B    C    D
-----------------------
1  |  q    5    r    2
2  |  s         t    4
3  |  u    8    v
4  |  w    3    x    6

(Пустые записи в этом наборе данных представляют «нет измерения», что отличается от измерения 0)

По столбцам Aи Cя получаю желаемый результат, используя формулу:

=SPLIT(JOIN("~",A1:A4,C1:C4),"~")

Это создает строку, которая, как и ожидалось, идет в q s u w r t v xкаждой ячейке.

Однако этот метод не работает на столбцах Bи D. JOINфункционирует как положено, давая вывод:

5~~8~3~2~4~~6

Выполнение SPLITэтого вывода, однако, приводит к проблеме: я остаюсь 5 8 3 2 4 6без пустых ячеек между 5и 8или между 4и 6, что означает, что пары разбиты (например, sи vдолжны соответствовать пустым ячейкам, но вместо этого wи xделать). Кажется, проблема в том, что SPLITинтерпретируется ~~как один разделитель, а не как два разделителя с нулевой записью между ними.

Кто-нибудь знает, как сохранить пустые записи в такого рода сценарии?

Желаемый результат будет выглядеть так

q  s  u  w  r  t  v  x
5     8  3  2  4     6

Устранит ли проблему пробел в этих пустых полях?
Эль

Ввод "" приводит к тому, что пустая запись сохраняется (спасибо, @AlE.!), Но все равно было бы предпочтительнее иметь технологическое решение, не в последнюю очередь потому, что ввод вручную "" во все эти записи будет и очень трудоемким, и подвержен ошибкам.
LiberalArtist

Формулы электронных таблиц не моя сильная сторона. Возможно, что-то можно сделать, IF()чтобы автоматически преобразовать пустые поля в пробелы.
Эль

1
Обновление: идея @ AlE. Действительно позволила мне выполнить вычисления в ближайшем будущем, используя =ARRAYFORMULA(IF(ISBLANK(B1:B4)," ",B1:B4))для создания фиктивного набора столбцов с "" в пустых ячейках, которые затем используются для SPLITи JOIN. Тем не менее, мы все еще надеемся, что у кого-то есть более элегантное решение: это добавляет кучу дополнительных вещей в мой документ, и мне все еще нужно, чтобы я обновлял номера строк в нескольких разных местах по мере добавления большего количества измерений в набор данных. (Спасибо AI E. за то, что я хотя бы позволил мне сейчас
обработать

Ответы:


3

Попробуйте следующее решение.

формула

=ARRAYFORMULA(TRIM(SPLIT(JOIN(" ,", A1:A4,C1:C4), ",")))

Разъяснения

Вы уже показали нам , что SPLITфункция игнорирует пустые ячейки, поэтому я выбираю эту строку в качестве разделителя: " ,". Промежуточный результат JOINфункции выглядит так:
введите описание изображения здесь

Я выбираю разделитель для SPLITфункции будет следующим образом : ",". Промежуточный результат SPLITфункции выглядит так:
введите описание изображения здесь

Однако теперь мы имеем дело с дополнительными пробелами. Поэтому я использовал TRIMфункцию, чтобы удалить все конечные или начальные пробелы (в сочетании с ARRAYFORMULA). Сравните LENзначения каждого промежуточного результата.

Результат

введите описание изображения здесь

пример

Я создал файл примера для вас: SPLIT, чтобы сохранить пустые ячейки


2

Попробуйте следующее решение.

Код

function myJoin() { 
  var output = []; 
  for(var i = 0, iLen = arguments.length; i < iLen; i++) {
    for(var r = 0, rLen = arguments[i].length; r < rLen; r++) {
      output.push(arguments[i][r][0]);
    }    
  }
  return [output];
}

Применение

введите описание изображения здесь

Добавьте в функцию столько диапазонов, сколько захотите, и они будут обработаны. Добавьте этот маленький скрипт в редактор скриптов вашей электронной таблицы (Инструменты> Редактор скриптов; нажмите кнопку Сохранить).

пример

Я создал файл примера для вас: SPLIT, чтобы сохранить пустые ячейки


2

Короткий ответ

Следующая формула возвращает желаемый результат.

=Transpose({A1:B4;C1:D4})

Расширенный ответ

Этот ответ сфокусирован на предоставлении способа получить желаемый результат, а не на обсуждении того, как заставить выбранный подход работать.

Проблема XY

ОП хочет получить X и думает, что Y должен вернуть этот результат. Этот подход проблематичен, потому что у Y есть некоторые оговорки. Это может быть проблемой мэра, так как ОП спрашивает о том, как заставить Y работать, вместо того, чтобы спрашивать, как получить X, но он не такой большой, потому что он предоставляет контекст и желаемый результат.

Решение

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

Вышеуказанные функции позволяют получить ожидаемый результат без использования функций SPLIT () и JOIN () и без присущих им предостережений.

Объяснение формулы

{A1:B4;C1:D4}

Это массив 2 × 8, созданный двумя массивами / диапазонами 2 × 4. Точка с запятой ( ;) используется в предположении, что десятичный разделитель электронной таблицы - точка ( .). Если десятичный разделитель был запятой, замените его обратной косой чертой ( \).

=Transpose({A1:B4;C1:D4})

Преобразует массив 2 X 8 в массив 8 X 2.

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

Ссылки


1

Если вы присоединитесь и сделаете разделитель «», то есть запятой с предыдущим пробелом, он автоматически сохранит это пространство, когда вы снова разделите его:

=SPLIT(JOIN(" ,",A1:A4),",")
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.