Сохраняйте одинаковое значение для всех объединенных ячеек

#excel

Вопрос:

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

Итак, мое путешествие начинается с функции excel «Слияние и центр», которая предупреждает меня, что она сохранит только верхнее левое значение и удалит остальные, что очень глупо, потому что я больше не могу перетащить функцию в ячейку к другим, разве никто на этой планете не предположил, что будет намного проще сохранить одно и то же значение в каждой объединенной ячейке или установить, по крайней мере, простой флажок, чтобы пользователь мог выбирать между двумя исходами.

Хорошо, прежде чем я пришел на этот форум, я провел некоторое исследование, нашел много кодов VBA, трюков, методов, но ни один из них не принес мне того удовлетворения, которое я ищу, я пришел к выводу, что невозможно объединить и сохранить значения в ячейках, поэтому может кто-нибудь, пожалуйста, объясните мне, почему Microsoft не подумала об этом?

Вот простой пример того, что я ищу: введите описание изображения здесь

Комментарии:

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

Ответ №1:

Как вы поняли, объединенные ячейки-это худшие кошмары Excel и VBA! Избегайте их (поскольку они также создают ужасные структуры данных), если можете.

Если вы должны их использовать и вам нужна функция, которую вы можете перетащить вниз, вам нужно будет убедиться, что вы создали механизм, который может пропускать определенные строки. INDEX() способен извлекать значения со 2-м параметром, который сообщает функции, какую строку вы хотели бы получить из данного массива. Если мы убедимся, что этот 2-й параметр имеет устойчивый наклон, мы все равно сможем получить правильные значения:

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

Формула в C1 :

 =INDEX(A:A,ROW()-1-MOD(ROW()-1,3) 1)amp;B1
 

Комментарии:

1. спасибо за ответ, к сожалению, в моем реальном случае группы от А до F не имеют одинаковой длины, также у меня есть подгруппы, которые усложнят это, и объем данных большой.

Ответ №2:

После поиска по всему Интернету я не нашел идеального решения, поэтому я начал изучать VBA и создал эту прекрасную функцию, она определяет, объединены ячейки или нет, и если да, то возвращает верхнее значение ячейки.

 Function Merg(CellRef As Range) As String 

Dim MainCell As String 

If CellRef.MergeCells Then 
  MainCell = Left(CellRef.MergeArea.Address, InStr(1,CellRef.MergeArea.Address, ":") - 1)
Else 
  MainCell = CellRef.Address 
End If 

Merg = Range(MainCell).Value 

End Function 
 

Я не знаю, как правильно отображать код в Stackoverflow. Для меня всегда кошмарно разбираться в механике, вы можете посетить мою ту же тему на форуме Microsoft.

Комментарии:

1. Существует песочница , если вы хотите поиграть с различными функциями размещения на сайте. В вашем случае я использовал {} кнопку на панели редактирования, чтобы поместить ваш код в блок кода.

2. Я пробовал это, но это работает только с первой строкой

3. Ах, вам нужно выбрать весь нужный фрагмент текста в блоке кода, а затем нажать {} кнопку.

4. По какой-то причине я об этом не подумал, тх ^^