Vba excel соседнюю ячейку

I have the following vba code to find occurrences of «0» in a following column:

For Each c In Range("B:B")

        If c.Value = "0" Then
            MsgBox "0 found at " & (c.Address)
        End If
    Next c

How can I modify the code so that when it finds a «0» at say, B6, it displays C7? ie. it display the cell diagonally adjacent to the one where the «0» is found.

Dick Kusleika's user avatar

asked Jan 7, 2011 at 14:59

Ayush's user avatar

You can use Offset

MsgBox "0 found at " & c.Offset(1,1).Address

The Offset property is of the form Offset(row, column). Examples:

Range("B6").Offset(0,0) //refers to cell B6
Range("B6").Offset(1,0) //move one row down (B7)
Range("B6").Offset(0,1) //move one column to the right (C6)
Range("B6").Offset(-1,0) //move one row up (B5)
Range("B6").Offset(0,-1) //move one column to the left (A6)

answered Jan 7, 2011 at 15:20

Alex P's user avatar

Alex PAlex P

12.2k5 gold badges51 silver badges69 bronze badges

How about:

        MsgBox "0 found at " & Cells(c.Row + 1, c.Column + 1)

answered Jan 7, 2011 at 15:11

Fionnuala's user avatar

FionnualaFionnuala

90.1k7 gold badges110 silver badges148 bronze badges

1

Содержание

  1. Выбор ячеек и диапазонов с помощью процедур Visual Basic в Excel
  2. Выбор ячейки на активном листе
  3. Выбор ячейки на другом листе в той же книге
  4. Выбор ячейки на листе в другой книге
  5. Выбор диапазона ячеек на активном листе
  6. Выбор диапазона ячеек на другом листе в той же книге
  7. Выбор диапазона ячеек на листе в другой книге
  8. Выбор именованного диапазона на активном листе
  9. Выбор именованного диапазона на другом листе в той же книге
  10. Выбор именованного диапазона на листе в другой книге
  11. Выбор ячейки относительно активной ячейки
  12. Выбор ячейки относительно другой (не активной) ячейки
  13. Выбор смещения диапазона ячеек из указанного диапазона
  14. Выбор указанного диапазона и изменение его размера
  15. Выбор указанного диапазона, его смещение и изменение размера
  16. Выбор объединения двух или более указанных диапазонов
  17. Выбор пересечения двух или более указанных диапазонов
  18. Выбор последней ячейки столбца непрерывных данных
  19. Выбор пустой ячейки в нижней части столбца непрерывных данных
  20. Выбор целого диапазона смежных ячеек в столбце
  21. Как выбрать весь диапазон несмежных ячеек в столбце
  22. Выбор прямоугольного диапазона ячеек
  23. Выбор нескольких несмежных столбцов разной длины
  24. Примечания к примерам
  25. Vba excel соседнюю ячейку

Выбор ячеек и диапазонов с помощью процедур Visual Basic в Excel

Корпорация Майкрософт предоставляет примеры программирования только в целях демонстрации без явной или подразумеваемой гарантии. Данное положение включает, но не ограничивается этим, подразумеваемые гарантии товарной пригодности или соответствия отдельной задаче. Эта статья предполагает, что пользователь знаком с представленным языком программирования и средствами, используемыми для создания и отладки процедур. Специалисты технической поддержки Майкрософт могут пояснить работу той или иной процедуры, но модификация примеров и их адаптация к задачам разработчика не предусмотрена. В примерах в этой статье используются методы Visual Basic, перечисленные в следующей таблице.

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

Выбор ячейки на активном листе

Чтобы выбрать ячейку D5 на активном листе, можно использовать один из следующих примеров:

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

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

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

Выбор ячейки на листе в другой книге

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

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

Выбор диапазона ячеек на активном листе

Чтобы выбрать диапазон C2:D10 на активном листе, можно использовать любой из следующих примеров:

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

Чтобы выбрать диапазон D3:E11 на другом листе в той же книге, можно использовать один из следующих примеров:

Кроме того, можно активировать лист, а затем выбрать диапазон с помощью метода 4, приведенного выше:

Выбор диапазона ячеек на листе в другой книге

Чтобы выбрать диапазон E4:F12 на листе в другой книге, можно использовать один из следующих примеров:

Кроме того, можно активировать лист, а затем выбрать диапазон с помощью метода 4, приведенного выше:

Выбор именованного диапазона на активном листе

Чтобы выбрать именованный диапазон «Тест» на активном листе, можно использовать один из следующих примеров:

Выбор именованного диапазона на другом листе в той же книге

Чтобы выбрать именованный диапазон «Тест» на другом листе в той же книге, можно использовать следующий пример:

Или можно активировать лист, а затем использовать метод 7 выше, чтобы выбрать именованный диапазон:

Выбор именованного диапазона на листе в другой книге

Чтобы выбрать именованный диапазон «Тест» на листе в другой книге, можно использовать следующий пример:

Или можно активировать лист, а затем использовать метод 7 выше, чтобы выбрать именованный диапазон:

Выбор ячейки относительно активной ячейки

Чтобы выбрать ячейку с пятью строками ниже и четырьмя столбцами слева от активной ячейки, можно использовать следующий пример:

Чтобы выбрать ячейку с двумя строками выше и тремя столбцами справа от активной ячейки, можно использовать следующий пример:

При попытке выбрать ячейку, которая находится вне листа, произойдет ошибка. Первый пример, показанный выше, вернет ошибку, если активная ячейка находится в столбцах A–D, так как перемещение четырех столбцов влево приведет к переходу активной ячейки на недопустимый адрес ячейки.

Выбор ячейки относительно другой (не активной) ячейки

Чтобы выбрать ячейку с пятью строками ниже и четырьмя столбцами справа от ячейки C7, можно использовать один из следующих примеров:

Выбор смещения диапазона ячеек из указанного диапазона

Чтобы выбрать диапазон ячеек того же размера, что и именованный диапазон «Тест», но сдвинув четыре строки вниз и три столбца вправо, можно использовать следующий пример:

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

Выбор указанного диапазона и изменение его размера

Чтобы выбрать именованный диапазон «База данных», а затем расширить выделение на пять строк, можно использовать следующий пример:

Выбор указанного диапазона, его смещение и изменение размера

Чтобы выбрать диапазон из четырех строк ниже и трех столбцов справа от именованного диапазона «База данных» и включить две строки и один столбец больше именованного диапазона, можно использовать следующий пример:

Выбор объединения двух или более указанных диапазонов

Чтобы выбрать объединение (то есть объединенную область) двух именованных диапазонов «Тест» и «Образец», можно использовать следующий пример:

Значение , чтобы оба диапазона были на одном листе для работы в этом примере. Обратите внимание, что метод Union не работает на разных листах. Например, эта строка работает нормально.

возвращает сообщение об ошибке:

Сбой метода Union класса приложения

Выбор пересечения двух или более указанных диапазонов

Чтобы выбрать пересечение двух именованных диапазонов «Тест» и «Образец», можно использовать следующий пример:

Обратите внимание, что для работы в этом примере оба диапазона должны находиться на одном листе.

Примеры 17–21 в этой статье относятся к следующему примеру набора данных. В каждом примере указывается диапазон ячеек в выборке данных, которые будут выбраны.

Выбор последней ячейки столбца непрерывных данных

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

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

Выбор пустой ячейки в нижней части столбца непрерывных данных

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

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

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

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

При использовании этого кода с образцом таблицы будут выделены ячейки A1–A4.

Как выбрать весь диапазон несмежных ячеек в столбце

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

При использовании этого кода с образцом таблицы будут выделены ячейки A1–A6.

Выбор прямоугольного диапазона ячеек

Чтобы выбрать прямоугольный диапазон ячеек вокруг ячейки, используйте метод CurrentRegion. Диапазон, выбранный методом CurrentRegion, — это область, ограниченная любым сочетанием пустых строк и пустых столбцов. Ниже приведен пример использования метода CurrentRegion.

Этот код будет выбирать ячейки A1–C4. Ниже перечислены другие примеры выбора того же диапазона ячеек.

В некоторых случаях может потребоваться выбрать ячейки A1–C6. В этом примере метод CurrentRegion не будет работать из-за пустой строки в строке 5. В следующих примерах будут выделены все ячейки:

Выбор нескольких несмежных столбцов разной длины

Чтобы выбрать несколько несмежных столбцов разной длины, используйте следующий пример таблицы и макроса:

При использовании этого кода с образцом таблицы будут выбраны ячейки A1:A3 и C1:C6.

Примечания к примерам

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

вы можете использовать:

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

При использовании метода Application.Goto, если вы хотите использовать два метода Cells в методе Range, если указанный диапазон находится на другом (не активном) листе, необходимо каждый раз включать объект Sheets. Например:

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

Источник

Vba excel соседнюю ячейку

Здравствуйте!
Нужен макрос, который:
найдет все строки содержащие в столбце D определенную цифру (в примере это цифра 1 и 2),
проверит, что у найденных строк столбцы имеют дату в определенной строке (в примере это строка 1)
и в каждой ячейке, которая соответствует описанным выше условиям вывести значение (не формулу, а именно значение), соответствующее ячейке на одну ниже и правее (т.е. в ячейке F4 должно отобразиться значение G5)
если значение отобразилось, т.е. в ячейку что-то добавилось, красить ее определенным цветом. Если не добавилось, оставлять не закрашенной.

Сейчас работает через формулу =ЕСЛИ(И((ЕПУСТО(G5)=ЛОЖЬ);ЕЧИСЛО(F1);$D$4=2);G5;»») и цвет устанавливается вручную (или через условное форматирование).
Проблема в том, что формулы нужно руками копировать в нужные строки (т.е. сам определяю, в какой строке 1 или 2 и копирую туда)
Файл прикрепил с примером прикрепил.

Перевел формулу в код и сделал вывод только значениями. Но, все равно приходится указывать нужные строки руками и ячейки не перекрашиваются.
Немного скорректировал формулу, что бы в в первой проверяемой ячейке искало не «число», а просто проверяло, что она не пустая.
[vba]

Sub Макрос1()
Range(«F4:U4»).Select
Range(«F4:U4»).FormulaR1C1 = «=IF(AND((ISBLANK(R[1]C[1])=FALSE),ISNUMBER(R[-3]C),R4C4=2),R[1]C[1],»»»»)»
Range(«F4:U4»).Value = Range(«F4:U4»).Value
Range(«F3:U3»).Select
Range(«F3:U3»).FormulaR1C1 = «=IF(AND((ISBLANK(R[1]C[1])=FALSE),ISNUMBER(R[-2]C),R3C4=1),R[1]C[1],»»»»)»
Range(«F3:U3»).Value = Range(«F3:U3»).Value

Здравствуйте!
Нужен макрос, который:
найдет все строки содержащие в столбце D определенную цифру (в примере это цифра 1 и 2),
проверит, что у найденных строк столбцы имеют дату в определенной строке (в примере это строка 1)
и в каждой ячейке, которая соответствует описанным выше условиям вывести значение (не формулу, а именно значение), соответствующее ячейке на одну ниже и правее (т.е. в ячейке F4 должно отобразиться значение G5)
если значение отобразилось, т.е. в ячейку что-то добавилось, красить ее определенным цветом. Если не добавилось, оставлять не закрашенной.

Сейчас работает через формулу =ЕСЛИ(И((ЕПУСТО(G5)=ЛОЖЬ);ЕЧИСЛО(F1);$D$4=2);G5;»») и цвет устанавливается вручную (или через условное форматирование).
Проблема в том, что формулы нужно руками копировать в нужные строки (т.е. сам определяю, в какой строке 1 или 2 и копирую туда)
Файл прикрепил с примером прикрепил.

Перевел формулу в код и сделал вывод только значениями. Но, все равно приходится указывать нужные строки руками и ячейки не перекрашиваются.
Немного скорректировал формулу, что бы в в первой проверяемой ячейке искало не «число», а просто проверяло, что она не пустая.
[vba]

Sub Макрос1()
Range(«F4:U4»).Select
Range(«F4:U4»).FormulaR1C1 = «=IF(AND((ISBLANK(R[1]C[1])=FALSE),ISNUMBER(R[-3]C),R4C4=2),R[1]C[1],»»»»)»
Range(«F4:U4»).Value = Range(«F4:U4»).Value
Range(«F3:U3»).Select
Range(«F3:U3»).FormulaR1C1 = «=IF(AND((ISBLANK(R[1]C[1])=FALSE),ISNUMBER(R[-2]C),R3C4=1),R[1]C[1],»»»»)»
Range(«F3:U3»).Value = Range(«F3:U3»).Value

Сообщение Здравствуйте!
Нужен макрос, который:
найдет все строки содержащие в столбце D определенную цифру (в примере это цифра 1 и 2),
проверит, что у найденных строк столбцы имеют дату в определенной строке (в примере это строка 1)
и в каждой ячейке, которая соответствует описанным выше условиям вывести значение (не формулу, а именно значение), соответствующее ячейке на одну ниже и правее (т.е. в ячейке F4 должно отобразиться значение G5)
если значение отобразилось, т.е. в ячейку что-то добавилось, красить ее определенным цветом. Если не добавилось, оставлять не закрашенной.

Сейчас работает через формулу =ЕСЛИ(И((ЕПУСТО(G5)=ЛОЖЬ);ЕЧИСЛО(F1);$D$4=2);G5;»») и цвет устанавливается вручную (или через условное форматирование).
Проблема в том, что формулы нужно руками копировать в нужные строки (т.е. сам определяю, в какой строке 1 или 2 и копирую туда)
Файл прикрепил с примером прикрепил.

Перевел формулу в код и сделал вывод только значениями. Но, все равно приходится указывать нужные строки руками и ячейки не перекрашиваются.
Немного скорректировал формулу, что бы в в первой проверяемой ячейке искало не «число», а просто проверяло, что она не пустая.
[vba]

Sub Макрос1()
Range(«F4:U4»).Select
Range(«F4:U4»).FormulaR1C1 = «=IF(AND((ISBLANK(R[1]C[1])=FALSE),ISNUMBER(R[-3]C),R4C4=2),R[1]C[1],»»»»)»
Range(«F4:U4»).Value = Range(«F4:U4»).Value
Range(«F3:U3»).Select
Range(«F3:U3»).FormulaR1C1 = «=IF(AND((ISBLANK(R[1]C[1])=FALSE),ISNUMBER(R[-2]C),R3C4=1),R[1]C[1],»»»»)»
Range(«F3:U3»).Value = Range(«F3:U3»).Value

Источник

Васик

1

Как выделить соседние ячейки

19.02.2011, 22:32. Показов 12785. Ответов 14


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

Как выделить соседние ячейки без адреса, например 5 вправо от текущей.
Поискал по форуму, есть похожие вещи но ума не хватает догнать.

3944 / 2858 / 665

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

Сообщений: 9,666

Записей в блоге: 4

19.02.2011, 23:44

2

Например:
ActiveCell.Offset(2, -1).Activate



0



4131 / 2235 / 940

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

Сообщений: 4,624

20.02.2011, 03:04

3

To Palva

Когда я привёл в пример полный синтаксис, Вы его сократили, а теперь сами пишите полный вариант. Где же Ваша гражданская совесть ?
А ещё уважаемый лично мною человек … Как не стыдно … далее следует стариковское ворчанье …



0



4131 / 2235 / 940

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

Сообщений: 4,624

20.02.2011, 03:04

4

To Palva

Когда я привёл в пример полный синтаксис, Вы его сократили, а теперь сами пишите полный вариант. Где же Ваша гражданская совесть ?
А ещё уважаемый лично мною человек … Как не стыдно … далее следует стариковское ворчанье …



0



3944 / 2858 / 665

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

Сообщений: 9,666

Записей в блоге: 4

20.02.2011, 09:27

5

Гражданская совесть требует от меня признаться, что я просто не знаю, как будет короче.



0



4131 / 2235 / 940

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

Сообщений: 4,624

20.02.2011, 11:40

6

Предполагается , что:

ActiveCell — в данном случае это тоже Range(‘C3’), тогда мы можем использовать любой из двух нижеприведённых кодов, так как при данном предположении, это одно и тоже.

ActiveCell.Offset(0, 3).Select

В некоторых случаях, можно обойтись без явного использования Offset :

ActiveCell(1, 4).Select

P.S. Прошлое сообщение повторилось совершенно случайно, злового умысла не было. Кстати я заметил странную закономерность, при плохой связи такое бывает частенько, а при хорошей ещё ни разу.

To Palva
Выражаю своё почтение и наилучшие пожелания



0



Васик

20.02.2011, 19:43

7

Может я неправильно выразился прошу прощения. Но мне нужно выделить НЕСКОЛЬКО ячеек, для изменения шрифтов и т.д.
Есть активная ячейка, макрос должен выделить соседние вместе с ней и поменять в них шрифт. Пока я добился перемещения по таблице, а вот выделения нескольких ячеек независимо от адреса ни в хелпе ни в книгах не найду.

3944 / 2858 / 665

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

Сообщений: 9,666

Записей в блоге: 4

20.02.2011, 21:02

8

А что значит соседние ячейки? Можно так:
Range(ActiveCell, ActiveCell.Offset(1, 1)).Select
А можно так:
Union(ActiveCell, ActiveCell.Offset(1, 1)).Select



0



3944 / 2858 / 665

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

Сообщений: 9,666

Записей в блоге: 4

20.02.2011, 21:04

9

Можно даже так:
Range(ActiveCell.Offset(-1, -1), ActiveCell.Offset(1, 1)).Select



0



Васик

20.02.2011, 21:25

10

Большое спасибо, заработало!

4131 / 2235 / 940

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

Сообщений: 4,624

21.02.2011, 05:13

11

И всё таки, в этих случаях также можно обойтись без Offset

Range(ActiveCell, ActiveCell.Offset(3)).Select
Range(ActiveCell, ActiveCell(4)).Select

А как Вам такое извращение ???

Range(ActiveCell, ActiveCell.Item(4)).Select
Range(ActiveCell, ActiveCell.Item(4, 4)).Select



0



3944 / 2858 / 665

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

Сообщений: 9,666

Записей в блоге: 4

21.02.2011, 10:15

12

Итак, для Range свойство Item является свойством по умолчанию. Усвоил.

Извращенец противный…



0



4131 / 2235 / 940

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

Сообщений: 4,624

21.02.2011, 10:49

13

Дык, это основы, поэтому я и назвал это извращением, типа

Worksheets(1).Activate
Worksheets.Item(1).Activate

Хотя с точки зрения классического преподавания информатики, извращенцы это мы с Вами, ибо используем неполный синтаксис

На самом деле важно другое, это то что подобный синтаксис более ‘приятен’ взору, чем з……. Offset



0



4131 / 2235 / 940

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

Сообщений: 4,624

21.02.2011, 10:50

14

И не только для об’екта Range



0



4131 / 2235 / 940

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

Сообщений: 4,624

21.02.2011, 10:50

15

И не только для об’екта Range



0



IT_Exp

Эксперт

87844 / 49110 / 22898

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

Сообщений: 92,604

21.02.2011, 10:50

15

Пока не закончен ввод значения, нельзя определить, когда переходить на другую ячейку.

Ввели значение, нажали Enter, стрелку вверх, вправо, Tab… Вот оно, событие. И это событие можно отследить.

Код вставить в модуль листа (войти в редактор VBAAlt+F11)

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Cells.Count > 1 Then Exit Sub ' выход, если выделено более одной ячейки
    ' выход, если изменяемая ячейка не принадлежит заданному диапазону
    If Not Application.Intersect(Range("B3:F10"), Target) Is Nothing Then
        ' между  With/End With все, что с точкой слева
        ' (продолжение ссылки), относится к Target
        With Target
            If .Column = 6 Then ' если последний столбец с баллами
                .Offset(1, -4).Select ' сместить выделение на нижнюю строку
            Else ' если не последний столбец
                .Offset(, 1).Select ' выделить ячейку правее
            End If

            ' сумма по строке
            Cells(.Row, 7).Value = Val(Cells(.Row, 2).Value) + _
                    Val(Cells(.Row, 3).Value) + Val(Cells(.Row, 4).Value) + _
                    Val(Cells(.Row, 5).Value) + Val(Cells(.Row, 6).Value)
'            Cells(.Row, 7).Value = Application.Sum(Range(Cells(.Row, 2), Cells(.Row, 6)))
        End With
    End If
End Sub

Проверяется изменение в диапазоне B3:F10.

При изменении значения ячейки последнего столбца диапазона (в данном случае — F) в заданном диапазоне выделяется первая ячейка следующей строки, при изменении в любой другой выделяется ячейка правее.

Суммировать можно и по отдельности, и функцией листа СУММ(строка закомментирована)


Второй вариант — заполнение диапазона после введения данных.

Диапазон для заполнения B3:F10. Перед заполнением ввести значения в диапазон H3:H10 (например: «01101» в одну ячейку).

Код разместить в общем модуле (в редакторе VBA), для вызова макроса можно нарисовать кнопку на листе.

Sub SetAboutValues()
' определение переменных
Dim ArrValue ' массив
Dim i As Long, j As Long ' счетчики
    ' заносим в массив введенные данные
    ArrValue = Worksheets("Лист1").Range("H3:H10").Value
    ' расширяем массив на количество баллов плюс столбец для суммы
    ' с сохранением данных (Preserve)
    ReDim Preserve ArrValue(1 To UBound(ArrValue), 1 To 6)

    ' в цикле перебираем введенные данные ("строки")
    For i = 1 To UBound(ArrValue)
        ' в цикле разносим значения по ячейкам массива
        For j = 5 To 1 Step -1
            ArrValue(i, j) = Mid$(ArrValue(i, 1), j, 1)
            ArrValue(i, 6) = ArrValue(i, 6) + Val(ArrValue(i, j)) ' сумма
        Next j
    Next i

    ' выгружаем записанный массив на лист, задав размер диапазона на листе
    Worksheets("Лист1").Range("B3").Resize(UBound(ArrValue), 6).Value = ArrValue
End Sub

 

Fankis

Пользователь

Сообщений: 3
Регистрация: 08.08.2016

Здравствуйте! Помогите разобраться.
Пишу функцию в VBA. Как сослаться на ячейку, в которой сама эта функция и будет размещена? ActiveCell дает не тот результат.
Допустим я хочу в столбец B вставить функцию, которая бы заглядывала в соседнюю ячейку столбца A, и если там выполняется определенное условие, то выдавала бы ответ. Т.е. мне надо определить номер строки, в которой стоит формула.

 

Вынести координаты в аргументы.
И на рабочем листе =ПОЛЬЗОВАТЕЛЬСКАЯ(СТРОКА(),СТОЛБЕЦ())

 

JayBhagavan

Пользователь

Сообщений: 11833
Регистрация: 17.01.2014

ПОЛ: МУЖСКОЙ | Win10x64, MSO2019x64

#3

08.08.2016 16:08:04

Цитата
2.1. Название темы должно отражать смысл проблемы. Темы с названиями «Помогите», «Help», «Срочно», «Нужен макрос» — плохая идея. Модераторы имеют право переименовать, удалить или закрыть такие темы без предупреждения.

<#0>
Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori

 

Игорь Гончаренко

Пользователь

Сообщений: 13746
Регистрация: 01.01.1970

#4

08.08.2016 16:28:42

Код
If TypeName(Application.Caller) = "Range" Then MsgBox "called from = " & Application.Caller.Address

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

МатросНаЗебре

Пользователь

Сообщений: 5516
Регистрация: 05.02.2014

#5

08.08.2016 16:29:43

Цитата
Fankis написал:
функцию, которая бы заглядывала в соседнюю ячейку столбца

Ещё проще. Соседнюю ячейку в аргументы.

Код
Function myFunc(СоседняяЯчейка As Range)
    myFunc = СоседняяЯчейка.Row
End Function
 

The_Prist

Пользователь

Сообщений: 14182
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

#6

08.08.2016 16:36:04

Цитата
МатросНаЗебре написал:
Ещё проще

это не проще в ряде случаев. Особенно, когда есть специальный объект Caller.

Ну а вообще, господа, JayBhagavan вполне резонное замечание сделал. Зачем делать медвежью услугу форуму? Тема создана с нарушением правил. Помогли, отлично, всем конфетка :) Но чтобы помочь не надо особо утруждаться — вопрос-то простой. Но ведь автор и в следующий раз нарушит правила и назовет тему абы как. И так далее. И будет у нас на форуме помойка из серии тем «как», «формула», «VBA» и т.п. Ну сами же здесь обитаем — давайте правила уважать и не добавлять модераторам работы. Несложно же направить новичка в правила, чтобы он понял, что название должно отражать суть. Не захочет другое название придумать — значит не особо-то и нужно было решение. Но как правило же у нас участники все разумные и понимают зачем это надо. А так он может и не задуматься — решение-то и без того дали, зачем лишний раз напрягаться?
Fankis, предложите прямо в теме название, отражающее суть. Модераторы придут — изменят сами название темы(у Вас прав на это нет, Вы можете только предложить вменяемое название). Спасибо.

Изменено: The_Prist08.08.2016 16:38:06

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 
 

Fankis

Пользователь

Сообщений: 3
Регистрация: 08.08.2016

Всем спасибо за помощь и критику. Вопрос решился так: Application.ThisCell.Address. Выручило элементарное знание английского, чутье и хелп =)
Собственно теперь, когда нашел ответ в справке, понял как четко звучал вопрос: «Как получить ссылку на ячейку, из которой вызывается пользовательская функция?»
В целом все элементарно)

 

The_Prist

Пользователь

Сообщений: 14182
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

#9

08.08.2016 18:19:03

Цитата
Fankis написал: Выручило элементарное знание английского, чутье и хелп

Вдруг пригодится для общего образования:

Кто вызвал функцию или процедуру?

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

Fankis

Пользователь

Сообщений: 3
Регистрация: 08.08.2016

#10

08.08.2016 18:28:49

The_Prist, спасибо, доходчиво изложено. Application.Caller.Address как я понял тоже должен подойти.

Понравилась статья? Поделить с друзьями:
  • Vba excel сортировка ячейки
  • Vba excel сортировка строки
  • Vba excel сортировка столбца по возрастанию
  • Vba excel сортировка примеры
  • Vba excel сортировка по убыванию