ViktorB3 0 / 0 / 0 Регистрация: 07.07.2017 Сообщений: 32 |
||||
1 |
||||
Excel 04.06.2019, 15:34. Показов 8414. Ответов 4 Метки нет (Все метки)
Всем Доброго времени суток! Суть вопроса такова: Есть объединенная ячейка (R2C2). Нужно пройтись по всем строкам, входящие в эту ячейку, т.е. начинаем со строки 2 и до 20. При этом каждый раз необходимо проверять значение объединенной ячейки. Пробовал вот так:
Но т.к. таких объединенных ячеек много, экран «некрасиво моргает» при выделении каждой ячейки. Может есть какой-нибудь способ лучше для выполнения такой задачи? Миниатюры
0 |
3827 / 2254 / 751 Регистрация: 02.11.2012 Сообщений: 5,930 |
|
04.06.2019, 15:41 |
2 |
опишите для чего в общем эта манипуляция.
0 |
0 / 0 / 0 Регистрация: 07.07.2017 Сообщений: 32 |
|
04.06.2019, 15:49 [ТС] |
3 |
Мне необходимо знать к какой объединенной ячейке относится строка выбранной мною ячейки. Потом значение объединенной ячейки используется для выбора переменной. (Но эт я уже слишком далеко пошел)
0 |
Заблокирован |
||||
04.06.2019, 15:52 |
4 |
|||
Сообщение было отмечено ViktorB3 как решение РешениеViktorB3, примерно так-
1 |
0 / 0 / 0 Регистрация: 07.07.2017 Сообщений: 32 |
|
04.06.2019, 15:56 [ТС] |
5 |
Остап Бонд, Огромное СПАСИБО!!! Оказывается ларчик просто открывался!
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
04.06.2019, 15:56 |
5 |
3 ответа
Даже если это действительно не рекомендуется использовать ячейки слияния в Excel (используйте Center Across Selection
, если это необходимо), ячейка, которая «содержит» значение — это значение верхний левый (по крайней мере, способ выразить это).
Следовательно, вы можете получить значение объединенных ячеек в диапазоне B4:B11
несколькими способами:
-
Range("B4").Value
-
Range("B4:B11").Cells(1).Value
-
Range("B4:B11").Cells(1,1).Value
Вы также можете заметить, что все остальные ячейки в них не имеют значения. Во время отладки вы можете увидеть, что значение empty
.
Также обратите внимание, что Range("B4:B11").Value
не будет работать (вызывает ошибку выполнения номер 13 при попытке Debug.Print
), потому что он возвращает массив.
JMax
23 фев. 2012, в 07:31
Поделиться
Джош Браун дал (в комментарии), что я считаю лучшим ответом:
Когда я не знаю границ объединенной области, я получаю значение с помощью
Range("B6").MergeArea.Cells(1,1).Value
Это полезно в VBA, когда, например, вы перебираете файлы, которые могли бы объединить ячейки неизвестных диапазонов, поэтому вы можете быть гораздо более общим с помощью этого метода. Спасибо, Джош!
todd w
04 дек. 2013, в 02:03
Поделиться
Это можно сделать в 2 этапа:
Сначала укажите диапазон объединенных ячеек; выделите объединенную ячейку, затем перейдите на панель ленты: Formulas Tab --> Define Name;
Убедитесь, что в названии нет пробелов. Пример: defined_Name
. Перейдите в нужную ячейку, в которой вы хотите увидеть результат/результат. В этой ячейке введите: =defined_Name
.
Нажмите enter, потому что сделанный.
Christopher Lazok
21 авг. 2014, в 16:24
Поделиться
Ещё вопросы
- 1Закрывает ли файл открытие и выполнение операции над этим файлом в одной строке?
- 0Javascript setinterval, играющий все, когда я возвращаюсь к окну
- 1Внешнее переопределение функции модуля Python
- 0невозможно открыть div при наведении курсора и выбрать содержимое внутри div
- 0Запрос данных УЗЕЛ УГЛОВОЙ
- 0Что за ужасный сбой с моим триггером mysql?
- 0Как закрыть определенную веб-страницу с помощью PHP?
- 1c # Datetime привязанный текстовое поле удаляет начинающиеся 0
- 1Java: создание пользовательских наборов элементов
- 1Происходит ли бокс при передаче массива через интерфейс IList <T>?
- 0Перебрать массив несколько раз
- 1Как я могу вычислить гессиан функции потерь в MXNet?
- 0PHP IMAP получает вложение с сервера Microsoft Exchange
- 1Используйте Joda-Time для расчета следующего дня недели со временем
- 1Как исправить экспресс предупреждение вебпака? [Дубликат]
- 0Поведение boost :: condition_variable :: notify_one ()
- 0Не удается удалить файлы cookie SMSESSION, PHPSESSID, в Siteminder
- 1D3 v4 силовой ориентированный граф с прямоугольниками
- 1Комбинации без дубликатов всех элементов в Python
- 1подсчет количества значений в определенном ключе для словаря Python
- 1Получить значение из текстового поля внутри DataTemplate (WPF)
- 1Скопируйте запись в bindingsource
- 1Изменить VisualState элемента ListBox
- 0Невозможно манипулировать унаследованной областью действия в ссылке директивы (реализация директивы кода конами)
- 0добавление div в конце динамически созданной строки
- 0Что такое максимальный край в минимаксном алгоритме?
- 0Jquery Accordion, оставайтесь открытыми при обновлении / изменении страницы
- 0Путаница в использовании шаблонов и структур в c ++
- 0Маскировка нежелательных битов из массива uint64_t
- 0Ограничение PHP $ _POST
- 0Похоже, что селектор идентификатора jQuery не позволяет «. ‘ . В чем причина? Что может быть обходным путем? [Дубликат]
- 0jscrollpane scrolltobottom, но сделать паузу при наведении курсора на полосу прокрутки
- 1Как удалить элементы из общего списка от начала до определенного условия
- 0Классный производный дизайн
- 0Отступы Visual Studio для краткой инициализации
- 0Grunt застревает при построении дерева задач для проекта ng-grid в Webstorm в Windows 2012
- 1Прочитать форму файла txt и выполнить операцию по имени в Python
- 1Прошедший FAB стал виден на некоторое время
- 1Повышение производительности функции, которая обрабатывает массив, используя деструктуризацию и рекурсию
- 0Ошибка сегментации при инициализации вектора инициализированным массивом в C ++
- 1Можно ли JToolTip остаться на
- 1Прерывание потока против вызова функции JNI
- 0редактирование CSS для позиционирования контента
- 1Как преобразовать эти 2 столбца даты / времени в 1?
- 0Невозможно переопределить заголовки PHP-типа контента
- 1обработка XML DOM в JavaScript-паре SpiderMonkey 1.8 — функция appendChild (childnode)
- 1Цикл Python для создания словаря
- 0Установите пространство имен для тега XML с помощью PHP
- 1Переместить объект-слайдер d3 в указанное место
I created a sheet with merged cells, but the value of the merged cells is only stored in the first cell. Is there anyway, to keep the same value in each of the cells, I need that for a formula I use. Thanks!
MackM
2,8665 gold badges32 silver badges45 bronze badges
asked Jun 24, 2011 at 6:34
4
In Excel 2003 this macro does the job:
Public Sub UnmergeAndFill()
With Selection
If .MergeCells Then
.MergeCells = False
Selection.Cells(1, 1).Copy
ActiveSheet.Paste 'Or PasteSpecial xlPasteFormulasAndNumberFormats
End If
End With
End Sub
Create the macro by
- pressing Alt-F11, Ctrl-R, menu
Insert/Module
, paste the code; - alternatively: Alt-F8, type a new name (
UnmergeAndFill
, e.g.), clickMake
orCreate
(? don’t know the English button text)
Invoke the Macro by pressing Alt-F8, select it, Run
. Alternatively map it to a key
answered Jun 24, 2011 at 8:11
sehesehe
368k47 gold badges449 silver badges622 bronze badges
4
You could use a custom VBA function that gives directly the value of the merged cell, no matter which one you select. In that case it is not necessary to duplicate the values.
- Switch to VBA view (Alt-F11)
- Create a new module via Insert > Module
- In your project, browse to the new module (you might want to give it a new name via the (name) property just under the explorer)
- Copy the following code in the module (pasting the code in ThisWorkbook will not work)
Code:
Option Explicit
Function GetMergedValue(location As Range)
If location.MergeCells = True Then
GetMergedValue = location.MergeArea(1, 1)
Else
GetMergedValue = location
End If
End Function
- You can now use the formula in excel
Code:
=GetMergedValue(A1)
Where A1 is a part of a merged cell.
answered May 23, 2016 at 8:41
takjetakje
2,56027 silver badges45 bronze badges
1
I know this is a rather old question, but this is the first place I landed when looking for an answer, and the accepted answer did not help at all. I DID discover an excellent answer, however, on MrExcel which I thought was worth putting on this thread for the benefit of anyone else googling for an answer:
http://www.mrexcel.com/forum/general-excel-discussion-other-questions/487941-data-multiple-cells-within-merged-cell-possible.html
To save looking up the link, the answer is remarkably simple; if you merge cells using Excel Format Painter, rather than Merge Cells, it preserves the data/formulae ‘underlying’ the merged cells. You just need to create a temporary merged block of cells in the right format somewhere else, to use as a template for the Format Painter. You can delete them afterwards. One thing to watch out for, though, is having ‘hidden’ data like this can be a trap for the unwary, since editing the visible cell does not change the invisible ones.
answered Dec 4, 2014 at 21:09
KnackiedooKnackiedoo
5023 silver badges8 bronze badges
2
you can make a new column (or row) and apply this formula in first cell and drag it down:
I suppose in column A you have merged cells (for example A1:A3 & A5:A8 are merged).
-
Insert a column before column A
-
In A1 type:
=B1
-
Copy the formula below in A2 :
=IF(B2="",A1,B2)
-
Drag down the formula u typed in A2
In your formulas use the newly created column and after use you can hide it.
Mihai Iorga
39.1k16 gold badges109 silver badges107 bronze badges
answered Aug 21, 2012 at 8:02
can you not store the actual values somewhere else? instead of the merged cell? and yes , use a formula to display the value on the merged cell.
answered Jun 24, 2011 at 6:37
DAEMYODAEMYO
9898 silver badges12 bronze badges
1
Assume column «A» has merged cells — put this in B1 and copy it to fill the rest of the column:
=IF(ISBLANK(A1);OFFSET(B1;-1;0);A1)
It checks if the cell to the left has a value if it has it returns its value, if not, it takes the value from the upper cell.
Note that it doesn’t work for the empty cells. First fill empty cells in column «A» with something unique, like «(empty)» and replace it back with emptiness both in «A» and «B» after filling column «B».
answered May 11, 2016 at 6:29
plavozontplavozont
8079 silver badges17 bronze badges
I improved on sehe’s macro to do as many merged cells as you select.
Code:
Public Sub UnmergeAndFillMultiple()
Dim w As Range, m As Range, n As Range
For Each w In Selection.Cells
If w.MergeCells Then
Set n = w.MergeArea.Cells(1, 1)
Set m = w.MergeArea
w.MergeCells = False
n.Copy
m.PasteSpecial
End If
Next
End Sub
answered Apr 4, 2018 at 18:12
Say A13 through A52 are merged.
a = Cells(13,1)
will return a value but
a = Cells(14,1)
will not «Empty»
Fix:
a = Cells(X,1).MergeArea(1, 1) 'if x=13 through 52 will return value in A13.
don’t know how i got this to work but it works.
rootShiv
1,3072 gold badges5 silver badges20 bronze badges
answered May 25, 2022 at 2:40
Dim rowcnt As Long, i As Long
rowcnt = Cells(Rows.Count, "A").End(xlUp).Row
For i = rowcnt To 3 Step -1
With Cells(i, 1)
If .Value = Cells(i - 1, 1).Value Then
.Font.ColorIndex = 9
End If
End With
Next i
ush189
1,2906 gold badges21 silver badges29 bronze badges
answered Apr 25, 2019 at 12:38
как обратиться к объединенной ячейке |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
Объединение диапазона ячеек в одну или построчно с помощью кода VBA Excel. Метод Range.Merge и свойство MergeCells. Отмена объединения ячеек. Примеры.
Метод Range.Merge
Метод Merge объекта Range объединяет ячейки заданного диапазона в одну или построчно из кода VBA Excel.
Синтаксис метода:
- Expression — выражение, возвращающее объект Range.
- Across — логическое значение, определяющее характер объединения ячеек:
- True — ячейки объединяются построчно: каждая строка заданного диапазона преобразуется в одну ячейку.
- False — весь диапазон преобразуется в одну ячейку. False является значением по умолчанию.
Преимущество метода Range.Merge перед свойством MergeCells заключается в возможности построчного объединения ячеек заданного диапазона без использования цикла.
Свойство MergeCells
Свойство MergeCells объекта Range применяется как для объединения ячеек, так и для его отмены.
Синтаксис свойства с присвоением значения:
Expression.MergeCells = Boolean |
- Expression — выражение, представляющее объект Range.
- Boolean — логическое значение, определяющее необходимость объединения ячеек или его отмены:
- True — объединение ячеек заданного диапазона.
- False — отмена объединения ячеек.
С помощью свойства MergeCells можно из кода VBA Excel проверять диапазон (отдельную ячейку), входит ли он (она) в объединенную ячейку (True) или нет (False). Если проверяемый диапазон окажется комбинированным, то есть содержащим объединенные и необъединенные ячейки, компилятор сгенерирует ошибку.
Переменная Expression для отмены объединения ячеек с помощью свойства Range.MergeCells может представлять одну любую ячейку, входящую в объединенный диапазон.
Метод Range.UnMerge
Метод UnMerge объекта Range разделяет объединенную область на отдельные ячейки из кода VBA Excel.
Синтаксис метода:
Expression — выражение, возвращающее объект Range.
Переменная Expression для отмены объединения ячеек методом UnMerge может представлять одну любую ячейку, входящую в объединенный диапазон.
Примеры объединения ячеек и его отмены
Пример 1
Наблюдаем, как происходит объединение ячеек при разных значениях параметра Across:
Sub Primer1() ‘Объединяем ячейки диапазона «A1:D4» построчно Range(«A1:D4»).Merge (True) ‘Объединяем диапазон «A5:D8» в одну ячейку ‘Across принимает значение False по умолчанию Range(«A5:D8»).Merge End Sub |
Не забываем, что логическое выражение True можно заменить единичкой, а False — нулем.
Пример 2
Отменяем объединение ячеек в диапазонах из первого примера:
Sub Primer2() Range(«A1:D8»).MergeCells = False End Sub |
Пример 3
Предполагается, что перед этим примером отменено объединение ячеек кодом из предыдущего примера.
Sub Primer3() ‘Объединяем ячейки диапазона «A1:D4» Range(«A1:D4»).MergeCells = 1 ‘Проверяем принадлежность диапазона ‘объединенной ячейке* MsgBox Range(«A1:C2»).MergeCells MsgBox Range(«A6:C7»).MergeCells ‘Ячейки диапазона «A5:D8» ‘можно объединить и так Cells(5, 1).Resize(4, 4).Merge End Sub |
*Если проверяемый диапазон окажется комбинированным, VBA Excel сгенерирует ошибку.
Пример 4
Отмена объединения ячеек с помощью метода Range.UnMerge:
Sub Primer4() ‘Объединяем ячейки диапазона «A1:C4» Range(«A1:C4»).Merge MsgBox «Ячейки диапазона ««A1:C4»» объединены» ‘Смотрим адрес диапазона, входящего в объединенную ячейку MsgBox Range(«A2»).MergeArea.Address ‘Отменяем объединение ячеек диапазона «A1:C4» Range(«B3»).UnMerge ‘или: Range(«B3»).MergeArea.UnMerge MsgBox «Объединение ячеек диапазона ««A1:C4»» отменено» End Sub |
Предупреждение перед объединением
Если объединяемые ячейки не являются пустыми, пред их объединением появится предупреждающее диалоговое окно с сообщением: «В объединенной ячейке сохраняется только значение из верхней левой ячейки диапазона. Остальные значения будут потеряны.»
Пример 5
Наблюдаем появление предупреждающего окна:
Sub Primer5() ‘Отменяем объединение ячеек в диапазоне «A1:D4» Range(«A1:D4»).MergeCells = 0 ‘Заполняем ячейки диапазона текстом Range(«A1:D4») = «Ячейка не пустая» ‘Объединяем ячейки диапазона «A1:D4» Range(«A1:D4»).MergeCells = 1 ‘Наблюдаем предупреждающее диалоговое окно End Sub |
Чтобы избежать появление предупреждающего окна, следует использовать свойство Application.DisplayAlerts, с помощью которого можно отказаться от показа диалоговых окон при работе кода VBA Excel.
Пример 6
Sub Primer6() ‘Отменяем объединение ячеек в диапазоне «A5:D8» Range(«A5:D8»).MergeCells = 0 ‘Заполняем ячейки диапазона «A5:D8» текстом Range(«A5:D8») = «Ячейка не пустая» Application.DisplayAlerts = False Range(«A5:D8»).MergeCells = 1 Application.DisplayAlerts = True End Sub |
Теперь все прошло без появления диалогового окна. Главное, не забывать после объединения ячеек возвращать свойству Application.DisplayAlerts значение True.
Кстати, если во время работы VBA Excel предупреждающее окно не показывается, это не означает, что оно игнорируется. Просто программа самостоятельно принимает к действию ответное значение диалогового окна по умолчанию.