"Розділити" розділений рядок, зберігаючи порожні записи


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. Хоча все-таки сподіваюся, що хтось має більш елегантне рішення: це додає до мого документа купу додаткових матеріалів, і мені все одно потрібно оновити номери рядків у кількох різних місцях, оскільки в набір даних додано більше вимірювань. (Дякую А.І. Е., що принаймні дозволив мені
стискати

Відповіді:


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 Таблиці здатні дуже просто обробляти багатозначні результати з точки зору кінцевих користувачів. З іншого боку, це дозволяє використовувати спеціальне позначення, яке дозволяє кінцевим користувачам визначати масиви.

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

Пояснення формули

{A1:B4;C1:D4}

Це масив 2 X 8, складений двома масивами / діапазонами 2 X 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.