#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. По какой-то причине я об этом не подумал, тх ^^