Excel — Перенести текст ячейки в соседнюю ячейку, содержащую формулу

Excel — Перенести текст ячейки в соседнюю ячейку, содержащую формулу

У меня есть таблица, заполненная данными из других таблиц. Формулы в ячейках моей таблицы довольно простые (ссылка на ячейку в другом рабочем листе).

Пример таблицы

В моей таблице есть строки «Заголовок» (в данном случае строки 57 и 64), содержащие только одно текстовое значение, которое я хотел бы перенести в соседние ячейки, поскольку соседние ячейки в этих строках всегда будут пустыми.

Если бы значения в таблице были введены вручную, то проблем бы не возникло, и ячейка выглядела бы именно так, как мне нужно, как на изображении ниже.

Таблица имеет вид, который был бы, если бы данные вводились вручную, и имеет вид, который я хочу

Значение первой ячейки в строке 57 не переполняется, поскольку соседняя ячейка содержит формулу (формула в основном "=OtherCell", где OtherCell не содержит никакого значения (точнее, значение ""))

Важно отметить, что положение строки «заголовок» меняется и встречается во многих строках таблицы, поскольку данные автоматически извлекаются из базы данных.

Как мне этого добиться...

  • Без использования ручного вмешательства (это автоматизированные отчеты, я не могу удалить формулы, потому что следующий сформированный отчет будет ошибочным)
  • VBA можно использовать, но не таким образом, чтобы это изменяло таблицу «необратимым» образом (таким образом, чтобы при следующем расчете листа данные были ошибочными) по той же причине, что и ручное вмешательство.

Я использую Excel 2013, но полагаю, что этот вопрос относится к версиям Excel 2007+.

решение1

Короткий ответ: невозможно.

Развернутый ответ заключается в том, что только действительно пустые ячейки позволят тексту из следующей ячейки слева переместиться и отобразиться в этой ячейке.

Именно так работает Excel.

Если вы конкретноисключатьручного вмешательства, удаления формул, а также VBA, на самом деле не остается ничего, кроме как принять значения по умолчанию, которые заключаются в том, что формула в ячейке справа не позволит тексту выходить за ее пределы.

Не стреляйте в посланника.

решение2

Если бы вы действительно хотели это сделать, то могли бы создать сложную формулу для самой левой ячейки, которая должна была бы это обрабатывать. Это не позволило бы использовать данные таблицы напрямую в дальнейших вычислениях, а второй и третий столбцы на самом деле не использовались бы, что могло бы беспокоить пользователя. Но это сработало бы, чтобы показать данные И полную запись в первом столбце. Можно было бы их удалить, что могло бы сделать это более приемлемым для пользователей.

Поскольку в первом столбце есть явные числовые и буквенные записи, но НЕТ буквенно-цифровых записей, можно сначала проверить это с помощью ISTEXT(). If NOT, then one has the current formula for that column AND the formulas for the second and third columns. One would need toTEXT(), обернуть каждую из них и добавить пробелы по мере необходимости для внешнего вида, но желаемого вида можно добиться, хотя и с изрядной долей работы.

Если тест пройден успешно, то в ячейке просто будет текстовый результат, который есть сейчас, без чтения второго и третьего столбцов, поскольку, насколько я понимаю, в них ничего нет.

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

Однако, если они используются в другом месте, можно также просто использовать формулы, используемые для заполнения этой таблицы напрямую, не ища что-то в таблице, а выполняя поиск первого уровня в исходных данных. Так что это прямой поиск, а не поиск в уже просмотренном материале. Немного «чище» в некотором смысле.

решение3

Используя VBA, вы можете аннулировать ячейки, содержащие формулу, которая ничего не возвращает:

Private Sub CommandButton21_Click()
    For Each c In Worksheets("yourworksheet").Range("yourrange")
        If c.Text = "" Then c.Select: Selection.ClearContents
    Next
End Sub

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

решение4

Чтобы получить желаемый вид, вам нужно будет реструктурировать исходные данные. Вместо того, чтобы иметь заголовки разделов, как это, возьмите значение этих заголовков разделов и поместите их в новый столбец, в каждой строке, связанной с этим разделом. Это будет выглядеть так:

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

Если вы не можете изначально расположить исходные данные таким образом, вы можете сделать это самостоятельно, творчески используя ВПР и/или ИНДЕКС/ПОИСКПОЗ, чтобы найти строки, в которых столбец B в исходных данных пуст.

Затем вы можете взять эти данные и создать сводную таблицу, суммирующую их, которую можно преобразовать в желаемый вами макет. Вот макет этого (я установил поля Page, Rev и Description для использования табличного макета, отключил все итоги и отключил отображение кнопок развернуть/свернуть):

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

Связанный контент