Vba excel значение объединенной ячейки

ViktorB3

0 / 0 / 0

Регистрация: 07.07.2017

Сообщений: 32

1

Excel

04.06.2019, 15:34. Показов 8414. Ответов 4

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Всем Доброго времени суток! Суть вопроса такова: Есть объединенная ячейка (R2C2). Нужно пройтись по всем строкам, входящие в эту ячейку, т.е. начинаем со строки 2 и до 20. При этом каждый раз необходимо проверять значение объединенной ячейки. Пробовал вот так:

Visual Basic
1
2
3
4
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Cells(Target.Row, 2).Select
    MsgBox ActiveCell
End Sub

Но т.к. таких объединенных ячеек много, экран «некрасиво моргает» при выделении каждой ячейки. Может есть какой-нибудь способ лучше для выполнения такой задачи?
Заранее Всем Спасибо за помощь

Миниатюры

Как получить значение объединенной ячейки Excel
 



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, примерно так-

Visual Basic
1
2
3
4
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Set ma = Cells(Target.Row, 2).MergeArea
    If ma.Count > 1 Then MsgBox ma.Cells(1)
End Sub



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Как подтолкнуть андроид проект на github с этой ошибкой приведен ниже?
  • 0HTML-сущность появляется как номер сущности на HTML-странице
  • 0Элемент директивы доступа из контроллера
  • 0Проблемы с GLEW и Visual Studio 2013
  • 0jQuery Mouse прокручивает все окна каждую прокрутку, как на сайте aplle iphone5
  • 1Как написать код для создания объекта, можно запустить функцию связывания для стека — пример JavaScript в книге
  • 0Программирование для UPnP на C / C ++
  • 0JQuery Mobile .html (…) теряет CSS
  • 0Получение списка видео с YouTube с помощью данных YouTube Api V3 с PHP
  • 0Первый вариант, выбранный по умолчанию в теге select при использовании templateURL с AngularJS
  • 1Определенная длина регулярного выражения с отступом
  • 0Что делает этот оператор возврата внутри службы
  • 1Android: правильный способ отладки работающего приложения (ошибки времени выполнения / журнал)
  • 1Изменение пути к SDK, расположенному в другом месте в Visual Studio
  • 0SQL вычитание столбца из 2 других столбцов?
  • 0Rails маршрутизация, как я могу ограничить мой маршрут ID?
  • 1Ошибка при автозагрузке Java
  • 0Представляем миграцию базы данных Liquibase в существующий продукт
  • 1дельта времени для строкового типа в панде
  • 1Angular: синхронизировать все FormControls с изменениями модели
  • 1Как добавить участок [дубликата]
  • 0Весеннее загрузочное приложение расширяется с помощью mysql
  • 1[Android] Как выполнить поиск только по имени и фамилии?
  • 1дефисы — проблема в получении контактных данных с частичным номером телефона
  • 0Как получить цифру из строки?
  • 0MySQL — есть ли способ отбросить записи в отсортированном списке после удовлетворения заданным критериям? [Дубликат]
  • 0Инициализировать лайтбокс для тега img
  • 0О сегментации в OPENCV
  • 1Отслеживание простоя пользователя в приложении в Android
  • 0Валидатор Jquery IE7 (: «Visible») не работает
  • 0QTimer падает при запуске в отдельном методе
  • 1Пакетное тензорное умножение с numy
  • 1Можно ли изменить матрицу пикселей внутри растрового изображения в Android NDK
  • 0ПЕРВИЧНЫЙ КЛЮЧ для таблицы с 2 столбцами, используемой для подсчета?
  • 1Рассчитать задержку сообщений между двумя компьютерами под управлением Java-программы
  • 1Как определить собственные стили списка для ckeditor?
  • 0Параметр функции «не объявлен в этой области». Параметр виден в файле h
  • 0Передать массив из PHP в JS
  • 0Почему _kbhit () работает только один раз в программе на C?
  • 0метод проверки jQuery не определен
  • 0Как я могу создать фиксированный заголовок таблицы
  • 1settext Jtextarea каждый клик
  • 1Android-галерея LinearLayouts
  • 0Как получить результаты использования MySql DB и отправить их обратно в API.ai
  • 1Как запустить транспортир свиты один за другим?
  • 0Страница продукта и категории Magento не работает
  • 0$ watchCollection выясняет, какая часть массива изменилась
  • 0JsonValueProvider не работает в ASP.NET MVC 4
  • 0Определить закрытие входа в Facebook с помощью кнопки «X»
  • 0JQuery не сработает?

Формулировка задачи:

Всем Доброго времени суток! Суть вопроса такова: Есть объединенная ячейка (R2C2). Нужно пройтись по всем строкам, входящие в эту ячейку, т.е. начинаем со строки 2 и до 20. При этом каждый раз необходимо проверять значение объединенной ячейки. Пробовал вот так:

Но т.к. таких объединенных ячеек много, экран «некрасиво моргает» при выделении каждой ячейки. Может есть какой-нибудь способ лучше для выполнения такой задачи? Заранее Всем Спасибо за помощь

Код к задаче: «Как получить значение объединенной ячейки Excel»

textual

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Set ma = Cells(Target.Row, 2).MergeArea
    If ma.Count > 1 Then MsgBox ma.Cells(1)
End Sub

Полезно ли:

9   голосов , оценка 4.000 из 5

I need to find out the first cell and the last cell of a vertically merged cell..

Let’s say I merge Cells B2 down to B50.
How can I get in VBA the start cell(=B2) and the end cell(=B50)?

Community's user avatar

asked Jun 1, 2010 at 15:32

vbauser's user avatar

1

Sub MergedAreaStartAndEnd()

    Dim rng As Range
    Dim rngStart As Range
    Dim rngEnd As Range

    Set rng = Range("B2")

    If rng.MergeCells Then

        Set rng = rng.MergeArea
        Set rngStart = rng.Cells(1, 1)
        Set rngEnd = rng.Cells(rng.Rows.Count, rng.Columns.Count)

        MsgBox "First Cell " & rngStart.Address & vbNewLine & "Last Cell " & rngEnd.Address

    Else

        MsgBox "Not merged area"

    End If

End Sub

answered Jun 2, 2010 at 8:19

dendarii's user avatar

dendariidendarii

2,92820 silver badges15 bronze badges

1

Below macro goes through all sheets in a workbook and finds merged cells, unmerge them and put original value to all merged cells.

This is frequently needed for DB applications, so I wanted to share with you.

Sub BirlesenHucreleriAyirDegerleriGeriYaz()
    Dim Hucre As Range
    Dim Aralik
    Dim icerik
    Dim mySheet As Worksheet

    For Each mySheet In Worksheets

    mySheet.Activate
    MsgBox mySheet.Name & “ yapılacak…”

    For Each Hucre In mySheet.UsedRange
        If Hucre.MergeCells Then
           Hucre.Orientation = xlHorizontal
           Aralik = Hucre.MergeArea.Address
           icerik = Hucre
           Hucre.MergeCells = False
           Range(Aralik) = icerik
        End If
    Next

 MsgBox mySheet.Name & " Bitti!!"

 Next mySheet
End Sub

Toon Krijthe's user avatar

Toon Krijthe

52.7k38 gold badges146 silver badges202 bronze badges

answered Dec 1, 2012 at 12:59

Mustafa Aksit's user avatar

Suppose you merged B2 down to B50.

Then, start cell address will be:

MsgBox Range("B2").MergeArea.Cells(1, 1).Address

End cell address will be:

With Range("B2").MergeArea
    MsgBox .Cells(.Rows.Count, .Columns.Count).Address
End With

You can put address of any cell of merged area in place of B2 in above code.

answered Apr 5, 2018 at 13:45

ePandit's user avatar

ePanditePandit

2,7772 gold badges23 silver badges15 bronze badges

Well, assuming you know the address of one of the cells in the merged range, you could just select the offset from that range and get the row/column:

Sub GetMergedRows()
    Range("A7").Select 'this assumes you know at least one cell in a merged range.
    ActiveCell.Offset(-1, 0).Select
    iStartRow = ActiveCell.Row + 1
    Range("A7").Select
    ActiveCell.Offset(1, 0).Select
    iEndRow = ActiveCell.Row - 1
    MsgBox iStartRow & ":" & iEndRow
End Sub

The code above will throw errors if the offset row cannot be selected (i.e. if the merged rows are A1 through whatever) so you will want to add error handling that tells the code if it can’t offset up, the top rows must be 1 and if it can’t go down, the bottom row must be 65,536. This code is also just one dimensional so you might want to add the x-axis as well.

answered Jun 1, 2010 at 16:00

Bradley Mountford's user avatar

If you want the cell references as strings, you can use something like this, where Location, StartCell, and EndCell are string variables.

Location = Selection.Address(False, False)
Colon = InStr(Location, ":")
If Colon <> 0 Then
    StartCell = Left(Location, Colon - 1)
    EndCell = Mid(Location, Colon + 1)
End If

If you want to set them as ranges, you could add this, where StartRange and EndRange are Range objects.

set StartRange = Range(StartCell)
set EndRange = Range (EndCell)

answered Jun 1, 2010 at 16:30

KevenDenen's user avatar

KevenDenenKevenDenen

1,70813 silver badges25 bronze badges

If you intend to loop through the merged cells, try this.

Sub LoopThroughMergedArea()
    Dim rng As Range, c As Range

    Set rng = [F5]

    For Each c In rng.MergeArea
        'Your code goes here
        Debug.Print c.Address'<-Sample code
    Next c
End Sub

answered Aug 4, 2019 at 22:51

AsUsual's user avatar

AsUsualAsUsual

5242 silver badges8 bronze badges

как обратиться к объединенной ячейке

olgao

Дата: Четверг, 18.04.2013, 15:08 |
Сообщение № 1

Группа: Пользователи

Ранг: Новичок

Сообщений: 11

Подскажите пожалуйста, у меня есть столбец А и в нем несколько объединенных ячеек, например, А3:А7, А8:А15 и т.д. (они разного размера), как обращаться к ячейке А4, А5 и т.д., чтобы в переменную записывалось содержание этой объединенной ячейки; у меня в цикле из ячейки А3 все нормально присваивается, а при следующих значениях выдает ошибку.

 

Ответить

Serge_007

Дата: Четверг, 18.04.2013, 15:10 |
Сообщение № 2

Группа: Админы

Ранг: Местный житель

Сообщений: 15894


Репутация:

2623

±

Замечаний:
±


Excel 2016

Цитата (olgao)

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

В объединённых ячейках нет содержимого, кроме как в левой верхней ячейке диапазона объединения


ЮMoney:41001419691823 | WMR:126292472390

 

Ответить

olgao

Дата: Четверг, 18.04.2013, 15:14 |
Сообщение № 3

Группа: Пользователи

Ранг: Новичок

Сообщений: 11

Цитата (Serge_007)

В объединённых ячейках нет содержимого, кроме как в левой верхней ячейке диапазона объединения

ну что мне теперь отменять объединение и в каждой ячейке подряд одно и тоже писать, чтобы программа считать нормально могла? как-то же это можно обойти

Сообщение отредактировал olgaoЧетверг, 18.04.2013, 15:14

 

Ответить

M73568

Дата: Четверг, 18.04.2013, 15:18 |
Сообщение № 4

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 197


Репутация:

46

±

Замечаний:
0% ±


2007-2013

Цитата (olgao)

ну что мне теперь отменять объединение и в каждой ячейке подряд одно и тоже писать, чтобы программа считать нормально могла? как-то же это можно обойти

Без примера как-то сложно сказать

 

Ответить

Serge_007

Дата: Четверг, 18.04.2013, 15:21 |
Сообщение № 5

Группа: Админы

Ранг: Местный житель

Сообщений: 15894


Репутация:

2623

±

Замечаний:
±


Excel 2016

Цитата (olgao)

как-то же это можно обойти

Нет

Цитата (olgao)

мне теперь отменять объединение?

Естественно. И зачем было его вообще использовать?!

Цитата (olgao)

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

А вот это зависит от того что там у Вас за данные на листе, как именно они расположены, что делает Ваш код и от кучи других факторов


ЮMoney:41001419691823 | WMR:126292472390

 

Ответить

olgao

Дата: Четверг, 18.04.2013, 15:26 |
Сообщение № 6

Группа: Пользователи

Ранг: Новичок

Сообщений: 11

Цитата (M73568)

Без примера как-то сложно сказать

While Worksheets(«Íàãðóçêà»).Cells(N + 3, 6).Value <> «»
Prepod = Worksheets(«Íàãðóçêà»).Cells(N + 3, 1).Value ‘Здесь как раз исследуется этот столбец с объединенными ячейками, в них фамилии
Workbooks.Open («C:Documents and SettingsÀëåêñåéÐàáî÷èé ñòîëVBAäèïëîìÂûïèñêè» & Prepod & «.xls»)
Wend
N = N + 1
[admin]
Оформляйте коды тегами![/admin]

 

Ответить

olgao

Дата: Четверг, 18.04.2013, 15:29 |
Сообщение № 7

Группа: Пользователи

Ранг: Новичок

Сообщений: 11

Цитата (olgao)

Serge_007: Оформляйте коды тегами!

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

 

Ответить

Матраскин

Дата: Четверг, 18.04.2013, 15:30 |
Сообщение № 8

Группа: Друзья

Ранг: Обитатель

Сообщений: 375


Репутация:

81

±

Замечаний:
0% ±


20xx

Цитата (Serge_007)

В объединённых ячейках нет содержимого, кроме как в левой верхней ячейке диапазона объединения

т.е. если А1 объединить с B1, то чтобы обратиться в дальнейшем к этой объединенной ячейке надо писать А1. ОК?
p.s. B1 утеряна для этого мира


в интернете опять кто-то не прав

Сообщение отредактировал МатраскинЧетверг, 18.04.2013, 15:32

 

Ответить

Serge_007

Дата: Четверг, 18.04.2013, 15:33 |
Сообщение № 9

Группа: Админы

Ранг: Местный житель

Сообщений: 15894


Репутация:

2623

±

Замечаний:
±


Excel 2016

Цитата (olgao)

я не знаю как это делается

Знать и не требуется. Достаточно уметь читать. В правилах всё есть, подробно и с картинками

Цитата (Матраскин)

чтобы обратиться в дальнейшем к этой объединенной ячейке надо писать А1

Скорее не к самой объединенной ячейке, а к данным в ней)

Цитата (Матраскин)

B1 утеряна для этого мира

Верно smile


ЮMoney:41001419691823 | WMR:126292472390

 

Ответить

olgao

Дата: Четверг, 18.04.2013, 15:37 |
Сообщение № 10

Группа: Пользователи

Ранг: Новичок

Сообщений: 11

Цитата (Serge_007)

Знать и не требуется. Достаточно уметь читать. В правилах всё есть, подробно и с картинками

Значит я слепая, потому что я не вижу где это написано в правилах; лучше б помогли с проблемой, чем на ерунду какую-то внимание обращать….

 

Ответить

Serge_007

Дата: Четверг, 18.04.2013, 15:38 |
Сообщение № 11

Группа: Админы

Ранг: Местный житель

Сообщений: 15894


Репутация:

2623

±

Замечаний:
±


Excel 2016

Если для Вас правила — это ерунда, то Вам здесь не место
Всего хорошего!
Тема закрыта


ЮMoney:41001419691823 | WMR:126292472390

 

Ответить

Like this post? Please share to your friends:
  • Vba excel значение в ячейке или текст
  • Vba excel значение в объединенных ячейках
  • Vba excel значение активной ячейки
  • Vba excel знаки вопроса
  • Vba excel знак числа