Vba excel адрес строки

Определение адреса выделенного диапазона ячеек на листе Excel с помощью кода VBA. Определение номера первой и последней строки. Программное выделение диапазона.

Адрес выделенного диапазона

Для определения адреса выделенного диапазона ячеек в VBA Excel используется свойство Address объекта Selection.

Объект Selection — это совокупность всех выделенных ячеек на листе Excel. Это может быть одна ячейка, смежный или несмежный диапазон ячеек, представляющий коллекцию смежных диапазонов. Если выделение состоит из несмежного диапазона, адреса смежных диапазонов, из которых он состоит, будут перечислены через запятую.

Смежный диапазон — прямоугольная область смежных (прилегающих друг к другу) ячеек.

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

Стоит отметить: несмотря на то, что в выделенном диапазоне может содержаться много ячеек, активной может быть только одна. Она представлена объектом ActiveCell. Для определения ее адреса в коде VBA Excel также используется свойство Address.

Sub Primer1()

MsgBox «Адрес выделенного диапазона: « & Selection.Address & _

vbNewLine & «Адрес активной ячейки: « & ActiveCell.Address & _

vbNewLine & «Номер строки активной ячейки: « & ActiveCell.Row & _

vbNewLine & «Номер столбца активной ячейки: « & ActiveCell.Column

End Sub

Скопируйте и запустите код на выполнение. В результате получите что-то вроде этого, зависящее от того, какие диапазоны вы выберите:

Информационное окно с адресами выделенного диапазона и активной ячейки

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

Выделение ячеек и диапазонов

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

Sub Primer2()

Range(«B4:C7,E5:F7,D8»).Select

End Sub

Как видно из примера, в адресной строке объекта Range перечисляются адреса смежных диапазонов, составляющих общий несмежный диапазон, через запятую. Выделение осуществляется методом Select объекта Range.

Определение номеров первой и последней строки

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

Sub Primer3()

Dim i1 As Long, i2 As Long

i1 = Selection.Cells(1).Row

i2 = Selection.Cells(Selection.Cells.Count).Row

MsgBox «Первая строка: « & i1 & _

vbNewLine & «Последняя строка: « & i2

End Sub

Результат будет таким, зависит от выделенного диапазона:

Информационное окно с номерами первой и последней строки диапазона

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

Таким же образом можно вычислить номера первого и последнего столбцов выделенного диапазона, которые можно использовать для обработки информации по столбцам.

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

На практике я использовал определение номеров первой и последней строк по выделенному диапазону для формирования файла загрузки данных держателей дисконтных карт на сервис отправки СМС-сообщений. Оказалось, что базу данных клиентов заполнять в таблице Excel намного удобнее, чем на портале сервиса, а для загрузки в сервис достаточно сформировать несложный файл. Заполнил новые строки, выделил их по любому столбцу, нажал кнопку и файл готов.


boomrest

10 / 10 / 3

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

Сообщений: 92

1

Как из адреса ячейки получить просто номер строки?

25.04.2017, 12:25. Показов 9247. Ответов 3

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


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

Visual Basic
1
2
3
4
5
6
7
8
9
10
Sub key()
Dim rows As String
Dim arr() As String
 
rows = Range(Selection.Address).Address(0, 0)
arr = Split(rows, ",")
 
MsgBox arr(0)
 
End Sub

В результате выводит адрес ячейки, например J43, а мне нужно просто номер строки 43, чтобы потом использовать в цикле.

Спасибо!



0



132 / 108 / 22

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

Сообщений: 339

25.04.2017, 16:49

2

boomrest, нужен файл пример,что дано и что нужно получить,а не вариант кода,попробуйте протестируйте макрос test и приспособьте под Ваш вариант кода.

Код

Sub test()
   MsgBox Split(Range("B10").Address, "$")(2)
End Sub



0



pashulka

4131 / 2235 / 940

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

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

25.04.2017, 17:36

3

Для тех, кто не страдает извращениями

Visual Basic
1
MsgBox Selection.Row



0



132 / 108 / 22

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

Сообщений: 339

25.04.2017, 23:02

4

boomrest, протестируйте также макрос test1(для случая диапазона)

Код

Sub test1()
  Dim t1$: t1 = Range("B10:D2017").Address(0, 0)
 With CreateObject("VBScript.RegExp"): .Pattern = "d+": .Global = True
    MsgBox .Execute(t1)(.Execute(t1).Count - 1)
 End With
End Sub



0



Return to VBA Code Examples

This tutorial will demonstrate how to get a cell’s address.

Get Range Address

This will display the cell address using the Range object:

MsgBox Range("A1").Address

vba range cell address

Get Cells Address

This will display the cell address using the Cells object:

MsgBox Cells(1,1).Address

ActiveCell Address

To get the ActiveCell address use this code:

MsgBox ActiveCell.Address

Set Variable to Cell Address

You can also assign the cell address to a string variable for easy use within your code:

Dim strAddress As String
strAddress = Range("A1").Address

MsgBox strAddress

Get Row Number From Cell Address

This code will extract the row number from an address:

Sub GetRowNumberFromCellAddress()
Dim strAddress As String
Dim rownum As Long

strAddress = Range("A1:a10").Address

rownum = Range(strAddress).Row

MsgBox rownum

End Sub

However, usually you can use this much simpler code:

MsgBox Range("A1").Row

VBA Coding Made Easy

Stop searching for VBA code online. Learn more about AutoMacro — A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!
vba save as

Learn More!

Содержание

  1. Определение номера строки по адресу ячейки
  2. 6 ответов
  3. VBA Range / Cell Address
  4. Get Range Address
  5. Get Cells Address
  6. ActiveCell Address
  7. Set Variable to Cell Address
  8. Get Row Number From Cell Address
  9. VBA Coding Made Easy
  10. VBA Code Examples Add-in
  11. VBA Code Generator
  12. AutoMacro: VBA Add-in with Hundreds of Ready-To-Use VBA Code Examples & much more!
  13. What is AutoMacro?
  14. —>Электронный учебник по VBA MS Excel 2010 —>
  15. Номер активной строки
  16. Номер активного столбца и стороки
  17. Определяем номер последней заполненной строки и столбца
  18. Определяем активную ячейку
  19. Адрес активной ячейки
  20. Адрес выделенного диапазона ячеек
  21. Координаты выделенного диапазона
  22. Имя активной книги
  23. Имя активного листа
  24. Range.Address property (Excel)
  25. Syntax
  26. Parameters
  27. Remarks
  28. Example
  29. Support and feedback
  30. Как снять выделение с диапозоном ячеек в Excel
  31. Какие типы диапазонов имеются в Excel
  32. Адрес выделенного диапазона
  33. Копирование диапазона
  34. Обращение к конкретной ячейке
  35. Запрос значения ячейки
  36. Снять выделение со строк и столбцов
  37. Множественное выделение
  38. Чтение значения из ячейки
  39. Определение номеров первой и последней строки

Определение номера строки по адресу ячейки

6 ответов

В Excel поставленная задача может быть решена так :

Dim iCell As Range, iRow As Long
Set iCell = Worksheets(1).UsedRange.Find( _
What:=»Образец_для_поиска», LookIn:=xlValues, LookAt:=xlWhole)

If Not iCell Is Nothing Then
iRow = iCell.Row ‘Номер строки,
‘который, на самом деле, нам не нужен, ибо :
iCell.EntireRow.Delete
Else
MsgBox «Увы, ничего не найдено», , «»
End If

В 1С Вы также можете использовать свойства EntireRow и Row

Да это так, но вот в 1С отладчик не знает, что такое Selection или Row!
Если писать
ExcelЛист.Rows(ПерваяЯчейка.Selection().Row()).Delete();
то ошибка такая
Метод объекта не обнаружен (Selection)

Если писать
ExcelЛист.Rows(ПерваяЯчейка.Selection.Row()).Delete();
то ошибка такая
Поле объекта не обнаружено (Selection)

[quote=Андре]я нашел ячейку . [/quote]

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

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

«Удивительное» открытие свойства Row, о возможности использовании которого, было сказано ещё в моём первом посте, равно как и о свойстве EntireRow

Источник

VBA Range / Cell Address

In this Article

This tutorial will demonstrate how to get a cell’s address.

Get Range Address

This will display the cell address using the Range object:

Get Cells Address

This will display the cell address using the Cells object:

ActiveCell Address

To get the ActiveCell address use this code:

Set Variable to Cell Address

You can also assign the cell address to a string variable for easy use within your code:

Get Row Number From Cell Address

This code will extract the row number from an address:

However, usually you can use this much simpler code:

VBA Coding Made Easy

Stop searching for VBA code online. Learn more about AutoMacro — A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!

VBA Code Examples Add-in

Easily access all of the code examples found on our site.

Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.

(No installation required!)

VBA Code Generator

AutoMacro: VBA Add-in with Hundreds of Ready-To-Use VBA Code Examples & much more!

What is AutoMacro?

AutoMacro is an add-in for VBA that installs directly into the Visual Basic Editor. It comes loaded with code generators, an extensive code library, the ability to create your own code library, and many other time-saving tools and utilities that add much needed functionality to the outdated VBA Editor.

Источник

—>Электронный учебник по VBA MS Excel 2010 —>

Мне кажется, многие загонялись таким вопросом, как определить активную ячейку (на которой находится курсор), строку или столбец. Или же хотелось получить адрес в формате А1, В4 и т.д. Вот сегодня я и покажу, как это сделать, потому, что очень удобно, когда ты знаешь активные элементы книги.

Номер активной строки

Практически все активные элементы определяются при помощи такого слова — Active, кторое записывается перед определением активного элемента. Таким образом, номер активной строки можно вычислить следующим образом:

MsgBox «Активная строка под номером » & s, vbInformation, «Активная строка»

Номер активного столбца и стороки

Аналогично определению строки столбец определяется по такому же принципу, только в конце добавляется не строка, а столбец:

MsgBox «Активная строка под номером » & s & » » & _

vbNewLine & «Активный столбец под номером » & b, vbInformation, «адрес»

Определяем номер последней заполненной строки и столбца

‘ищем последнюю заполненную строку и столбец и выводим сообщение о номере

Stroka = ActiveSheet.Cells.Find(What:=»*», SearchDirection:=xlPrevious, _

Stolbec = ActiveSheet.Cells.Find(What:=»*», SearchDirection:=xlPrevious, _SearchOrder:=xlByRows).Column

MsgBox «Последняя строка под номером » & Stroka & » » & _

vbNewLine & «Последний столбец под номером » _

& Stolbec, vbInformation, «Адрес»

Определяем активную ячейку

Исходя из выше записанных выражений теперь можно смело определить координаты активной ячейки. То-есть определяем активную строку, активный столбец и получаем координаты активной ячейки. Выглядеть это будет так:

MsgBox «Активная ячейка имеет координаты Cells(» & sk & «,» & st & «)», _

vbInformation, «Активная ячейка»

Адрес активной ячейки

Многие думали, а как получить адрес активной ячейки? Очень просто, делается это так:

MsgBox «Абсолютный адрес активной ячейки — » & A, vbInformation, «Адрес»

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

A = ActiveCell.Address(0, 0)

MsgBox «Относительный адрес активной ячейки — » & A, vbInformation, «Адрес»

В скобках оператора Address указано какое именно значение должно быть относительным, а какое абсолютным. Если Address(0,0), то и строка и столбец записаны относительными (первый ноль отвечает за строку, второй ноль — это столбец). Если в строке поставить вместо ноля еденицу, то строка будет абсолютным значением, а столбец относительным. Причём значения следующих записей равнозначны:

Address(1, 0) = Address(True, False)

Адрес выделенного диапазона ячеек

Адрес выделенного диапазона можно получить следующим образом

‘используйте любую переменную для определения адреса

A = Selection.Rows.Address(0, 0) ‘Через строку

b = Selection.Columns.Address(0, 0) ‘Через столбец

c = Selection.Address(0, 0)

MsgBox «Выделенный диапазон — » & A, vbInformation, «Адрес»

Координаты выделенного диапазона

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

K1 = Cells(a, b).Address(0, 0)

aa = a + Selection.Rows.Count — 1

bb = b + Selection.Columns.Count — 1

K2 = Cells(aa, bb).Address(0, 0)

MsgBox «Первая координата выделенного диапазона — » & K1 & vbNewLine & _

«Вторая координата выделенного диапазона — » & K2, vbInformation, «Координаты»

a — Определяет номер первой строки выделенного диапазона;
b — Определяет номер первого столбца выделенного диапазона;
K1 — Определяем первую координату выделенного диапазона;
aa — Определяем номер последней строки выделенного диапазона;
bb — Определяем номер пследнего столбца выделенного диапазона;
K2 — Определяем вторую координату выделенного диапазона;

Selection.Rows.Count — определяет количество строк в выделенном диапазоне;
Selection.Columns.Count — определяет количество столбцов в выделенном диапазоне;

У многих возник вопрос: А почему вычитаем единицу? Всё потому, что первая координата входит в выделенный диапазон и нам её надо не потерять.

Имя активной книги

Имя активной книги возможно вычислить такой записью:

MsgBox «Имя активной книги — » & Name, vbInformation, «Имя активной книги»

Имя активного листа

Имя активного листа можно определить так:

MsgBox «Имя активного листа — » & Name, vbInformation, «Имя активного листа»

Источник

Range.Address property (Excel)

Returns a String value that represents the range reference in the language of the macro.

Syntax

expression.Address (RowAbsolute, ColumnAbsolute, ReferenceStyle, External, RelativeTo)

expression A variable that represents a Range object.

Parameters

Name Required/Optional Data type Description
RowAbsolute Optional Variant True to return the row part of the reference as an absolute reference. The default value is True.
ColumnAbsolute Optional Variant True to return the column part of the reference as an absolute reference. The default value is True.
ReferenceStyle Optional XlReferenceStyle The reference style. The default value is xlA1.
External Optional Variant True to return an external reference. False to return a local reference. The default value is False.
RelativeTo Optional Variant If RowAbsolute and ColumnAbsolute are False, and ReferenceStyle is xlR1C1, you must include a starting point for the relative reference. This argument is a Range object that defines the starting point.

NOTE: Testing with Excel VBA 7.1 shows that an explicit starting point is not mandatory. There appears to be a default reference of $A$1.

If the reference contains more than one cell, RowAbsolute and ColumnAbsolute apply to all rows and columns.

Example

The following example displays four different representations of the same cell address on Sheet1. The comments in the example are the addresses that will be displayed in the message boxes.

Support and feedback

Have questions or feedback about Office VBA or this documentation? Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.

Источник

Как снять выделение с диапозоном ячеек в Excel

Какие типы диапазонов имеются в Excel

Вы можете выделить диапазоны следующих типов:

  • одна отдельная ячейка;
  • несколько смежных между собой ячеек;
  • один или несколько столбцов;
  • одну или несколько строк;
  • рабочий лист целиком;
  • также можете выделить комбинацию типов (множественное выделение).

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

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

Адрес выделенного диапазона

Для определения адреса выделенного диапазона ячеек в VBA Excel используется свойство Address объекта Selection.

Объект Selection – это совокупность всех выделенных ячеек на листе Excel. Это может быть одна ячейка, смежный или несмежный диапазон ячеек, представляющий совокупность смежных диапазонов. Если выделение состоит из несмежного диапазона, адреса смежных диапазонов, из которых он состоит, будут перечислены через запятую.

Стоит отметить: несмотря на то, что в выделенном диапазоне может содержаться много ячеек, активной может быть только одна. Она представлена объектом ActiveCell. Для определения ее адреса в коде VBA Excel также используется свойство Address.

Скопируйте и запустите код на выполнение. В результате получите что-то вроде этого, зависящее от того, какие диапазоны вы выберите:

Копирование диапазона

Функция записи макросов Excel используется не столько для создания хорошего кода, сколько для поиска названий необходимых объектов, методов и свойств. Например, при записи операции копирования и вставки можно получить код:

Sub Макрос()
Range( » A1 » ).Select
Selection.Copy
Range( » B1 » ).Select
ActiveSheet.Paste
End Sub

Обратите внимание, что данная программа выделяет ячейки. Однако в VBA для работы с объектом не обязательно его выделять. Данную процедуру можно заменить значительно более простой — применить метод Сору, который использует аргумент, представляющий адрес места вставки копируемого диапазона.

Sub CopyRange()
Range( » А1 » ).Copy Range( » В1 » )
End Sub

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

Sub CopyRange2()
Workbooks( » File1.xlsx » ).Sheets( » Лист1 » ).Range( » A1 » ).Copy _
Workbooks( » File2.xlsx » ).Sheets( » Лист2 » ).Range( » A1 » )
End Sub

Еще одним подходом к решению этой задачи является использование для представления диапазонов объектных переменных:

Sub CopyRange3()
Dim Rngl As Range, Rng2 As Range
Set Rngl = Workbooks( » File1.xlsx » ).Sheets( » Лист1 » ).Range( » A1 » )
Set Rng2 = Workbooks( » File2.xlsx » ).Sheets( » Лист2 » ).Range( » A1 » )
Rngl.Copy Rng2 End Sub

Можно копировать большой диапазон. Адрес места вставки определяется единственной ячейкой (представляющей верхний левый угол вставляемого диапазона):

Sub CopyRange4 ()
Range( » А1:С800 » ).Copy Range( » D1 » )
End Sub

Для перемещения диапазона ячеек вместо метода Сору используется метод Cut.

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

Sub CopyCurrentRegion2()
Range( » A1 » ).CurrentRegion.Copy Sheets( » Лист2 » ).Range( » A1 » )
End Sub

Метод End имеет один аргумент, определяющий направление, в котором увеличивается выделение ячеек. Следующий оператор выделяет диапазон от активной ячейки до последней непустой ячейки внизу:

Range (ActiveCell, ActiveCell.End(xlDown)).Select

Три остальные константы имитируют комбинации клавиш при выделении в других направлениях: xlUp (вверх), xlToLeft (влево) и xlToRight (вправо).

В прилагаемом Excel-файле определено несколько распространенных типов выделения ячеек (см. рис. 1). Код любопытен тем, что является также примером создания контекстного меню.

Обращение к конкретной ячейке

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

Полный путь к ячейке A1 в Книге1 на Листе1 можно записать двумя вариантами:

  • С помощью Range
  • С помощью Cells

Пример 1: Обратиться к ячейке A3 находящейся в Книге1 на Листе1

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

Пример 2: Обратиться к ячейке A1 в текущей книге на активном листе

Если всё же путь к книге или листу необходим, но не хочется его писать при каждом обращении к ячейкам, можно использовать конструкцию With End With. При этом, обращаясь к ячейкам, необходимо использовать в начале “.” (точку).

Пример 3: Обратиться к ячейке A1 и B1 в Книге1 на Листе2.

Так же, можно обратиться и к активной (выбранной в данный момент времени) ячейке.

Пример 4: Обратиться к активной ячейке на Листе3 текущей книги.

Запрос значения ячейки

Следующая процедура запрашивает значение у пользователя и вставляет его в ячейку А1:

Sub GetValuel()
Range( » A1 » ).Value = InputBox( » Введите значение » )
End Sub

Однако при выполнении этой процедуры возникает проблема. Если пользователь щелкнет на кнопке Отмена в окне ввода данных, то процедура удалит данные, которые находились в текущей ячейке. Модифицированная версия процедуры адекватно реагирует на щелчок на кнопке Отмена и не выполняет при этом никаких действий:

Sub GetValue2()
Dim UserEntry As Variant
UserEntry = InputBox( » Введите значение » )
If UserEntry <> » » Then Range( » A1 » ).Value = UserEntry
End Sub

Во многих случаях следует проверить правильность данных, введенных пользователем. Например, необходимо обеспечить введение только чисел в диапазоне от 1 до 12 (рис. 2). Это можно сделать при помощи процедуры GetValue3(), код которой приведен в Модуле1 приложенного Excel-файла. Некорректные данные игнорируются, и окно запроса значения отображается снова. Этот цикл будет повторяться, пока пользователь не введет правильное значение или не щелкнет на кнопке Отмена.

Снять выделение со строк и столбцов

Аналогичным образом работает снятие выделения со строк и столбцов.

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

  1. Выделите весь лист, нажав на треугольник в верхней левой части листа (или используйте сочетание клавиш Ctrl+A)
  2. Удерживая клавишу Ctrl, выберите нужные столбцы, нажимая на соответствую букву столбца.

Множественное выделение

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

Сначала определим, на самом ли деле у нас несколько областей. Для этого посчитаем их с помощью следующего кода:

Ну а теперь организуем цикл, который будет проходить по всем областям. Заодно посчитаем количество ячеек, столбцов, строк. Определим является ли выделение смешанным (например выделен столбец и еще ограниченная область ячеек).

Как вы видите организовать перебрать все выделенные области можно циклом For Each и для каждого диапазона вызывать функцию RangeType.

Ввод значения в следующую пустую ячейку

Если требуется ввести значение в следующую пустую ячейку столбца или строки, используйте код (рис. 3):

Sub GetData()
Dim NextRow As Long
Dim Entry1 As String, Entry2 As String
Do
‘ Определение следующей пустой строки
NextRow = Cells(Rows.Count, 1).End(xlUp).Row + 1
‘ Запрос данных
Entry1 = InputBox( » Введите имя » )
If Entry1 = » » Then Exit Sub
Entry2 = InputBox( » Введите сумму » )
If Entry2 = » » Then Exit Sub
‘ Запись данных
Cells(NextRow, 1) = Entry1
Cells(NextRow, 2) = Entry2
Loop
End Sub

Это бесконечный цикл. Для выхода из него (щелкните на кнопке Cancel) использовались операторы Exit Sub. Обратите внимание строку, в который определяется значение переменной NextRow. Если вам трудно ее понять, проанализируйте содержимое ячейки: перейдите в последнюю ячейку столбца А и нажмите и . После этого будет выделена последняя непустая ячейка в столбце А. Свойство Row возвращает номер этой строки; чтобы получить расположенную под ней строку (следующую пустую строку), к этому номеру прибавляется 1.

Чтение значения из ячейки

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

  • Value2 – базовое значение ячейки, т.е. как оно хранится в самом Excel-е. В связи с чем, например, дата будет прочтена как число от 1 до 2958466, а время будет прочитано как дробное число. Value2 – самый быстрый способ чтения значения, т.к. не происходит никаких преобразований.
  • Value – значение ячейки, приведенное к типу ячейки. Если ячейка хранит дату, будет приведено к типу Date. Если ячейка отформатирована как валюта, будет преобразована к типу Currency (в связи с чем, знаки с 5-го и далее будут усечены).
  • Text – визуальное отображение значения ячейки. Например, если ячейка, содержит дату в виде “число месяц прописью год”, то Text (в отличие от Value и Value2) именно в таком виде и вернет значение. Использовать Text нужно осторожно, т.к., если, например, значение не входит в ячейку и отображается в виде “#####” то Text вернет вам не само значение, а эти самые “решетки”.

По-умолчанию, если при обращении к ячейке не указывать способ чтения значения, то используется способ Value.

Пример 5: В ячейке A1 активного листа находится дата 01.03.2018. Для ячейки выбран формат “14 марта 2001 г.”. Необходимо прочитать значение ячейки всеми перечисленными выше способами и отобразить в диалоговом окне.

Пример 6: В ячейке С1 активного листа находится значение 123,456789. Для ячейки выбран формат “Денежный” с 3 десятичными знаками. Необходимо прочитать значение ячейки всеми перечисленными выше способами и отобразить в диалоговом окне.

При присвоении значения переменной или элементу массива, необходимо учитывать тип переменной. Например, если оператором Dim задан тип Integer, а в ячейке находится текст, при выполнении произойдет ошибка “Type mismatch”. Как определить тип значения в ячейке, рассказано в следующей статье .

Пример 7: В ячейке B1 активного листа находится текст. Прочитать значение ячейки в переменную.

Таким образом, разница между Text, Value и Value2 в способе получения значения. Очевидно, что Value2 наиболее предпочтителен, но при преобразовании даты в текст (например, чтобы показать значение пользователю), нужно использовать функцию Format.

Определение номеров первой и последней строки

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

Источник

The Excel ADDRESS function returns a cell reference as a string, based on a row and column number

Example: Excel ADDRESS Function

Excel ADDRESS Function

METHOD 1. Excel ADDRESS function using hardcoded values

EXCEL

Result in cell G5 ($D$3) — returns the assigned cell reference that comprises only the required ADDRESS arguments (row number and column number)) as a string.

Result in cell G6 ($D$3) — returns the assigned cell reference that comprises the required ADDRESS arguments (row number and column number) and an abs number (Absolute row and column) as a string.

Result in cell G7 (D$3) — returns the assigned cell reference that comprises the required ADDRESS arguments (row number and column number) and an abs number (Absolute row and Relative column) as a string.

Result in cell G8 ($D3) — returns the assigned cell reference that comprises the required ADDRESS arguments (row number and column number) and an abs number (Relative row and Absolute column) as a string.

Result in cell G9 (D3) — returns the assigned cell reference that comprises the required ADDRESS arguments (row number and column number) and an abs number (Relative row and column) as a string.

Result in cell G10 ($D$3) — returns the assigned cell reference that comprises the required ADDRESS arguments (row number and column number), abs number (Absolute row and column) and A1 reference style as a string.

Result in cell G11 ($D$3) — returns the assigned cell reference that comprises the required ADDRESS arguments (row number and column number) and A1 reference style as a string.

Result in cell G12 (R3C3) — returns the assigned cell reference that comprises the required ADDRESS arguments (row number and column number), abs number (Absolute row and column) and R1C1 reference style as a string.

=ADDRESS(3,4,1,TRUE,»Sheet1″)

Result in cell G13 (Sheet1!$D$3) — returns the assigned cell reference that comprises the required ADDRESS arguments (row number and column number), abs number (Absolute row and column), A1 reference style and reference a sheet name as a string.

METHOD 2. Excel ADDRESS function using links

EXCEL

Result in cell G5 ($D$3) — returns the assigned cell reference that comprises only the required ADDRESS arguments (row number and column number)) as a string.

Result in cell G6 ($D$3) — returns the assigned cell reference that comprises the required ADDRESS arguments (row number and column number) and an abs number (Absolute row and column) as a string.

Result in cell G7 (D$3) — returns the assigned cell reference that comprises the required ADDRESS arguments (row number and column number) and an abs number (Absolute row and Relative column) as a string.

Result in cell G8 ($D3) — returns the assigned cell reference that comprises the required ADDRESS arguments (row number and column number) and an abs number (Relative row and Absolute column) as a string.

Result in cell G9 (D3) — returns the assigned cell reference that comprises the required ADDRESS arguments (row number and column number) and an abs number (Relative row and column) as a string.

Result in cell G10 ($D$3) — returns the assigned cell reference that comprises the required ADDRESS arguments (row number and column number), abs number (Absolute row and column) and A1 reference style as a string.

Result in cell G11 ($D$3) — returns the assigned cell reference that comprises the required ADDRESS arguments (row number and column number) and A1 reference style as a string.

Result in cell G12 (R3C3) — returns the assigned cell reference that comprises the required ADDRESS arguments (row number and column number), abs number (Absolute row and column) and R1C1 reference style as a string.

=ADDRESS(B13,C13,D13,E13,F13)

Result in cell G13 (Sheet1!$D$3) — returns the assigned cell reference that comprises the required ADDRESS arguments (row number and column number), abs number (Absolute row and column), A1 reference style and reference a sheet name as a string.

METHOD 3. Excel ADDRESS function using the Excel built-in function library with hardcoded value

EXCEL

Formulas tab > Function Library group > Lookup & Reference > ADDRESS > populate the input boxes

= ADDRESS(3,4,1,TRUE,»Sheet1″)
Note: in this example we are populating all of the input boxes associated with the ADDRESS function arguments, however, you are only required to populate the required arguments (Row_num and Column_num). You can omit the optional arguments and Excel will apply its default value against each of them.
Built-in Excel ADDRESS Function using hardcoded values - assign values to all ADDRESS function arguments

METHOD 4. Excel ADDRESS function using the Excel built-in function library with links

EXCEL

Formulas tab > Function Library group > Lookup & Reference > ADDRESS > populate the input boxes

= ADDRESS(B13,C13,D13,E13,F13)
Note: in this example we are populating all of the input boxes associated with the ADDRESS Function arguments with links, however, you are only required to populate the required arguments (Row_num and Column_num). You can omit the optional arguments and Excel will apply the default value against each of them.
Built-in Excel ADDRESS Function using link - assign values to all ADDRESS function arguments

METHOD 1. Excel ADDRESS function using VBA with hardcoded values

VBA

Sub Excel_ADDRESS_Function_Using_Hardcoded_Values()

‘declare a variable
Dim ws As Worksheet

Set ws = Worksheets(«ADDRESS»)

‘apply the Excel ADDRESS function
ws.Range(«G5») = ws.Cells(3, 4).Address()
ws.Range(«G6») = ws.Cells(3, 4).Address(RowAbsolute:=True)
ws.Range(«G7») = ws.Cells(3, 4).Address(ColumnAbsolute:=False)
ws.Range(«G8») = ws.Cells(3, 4).Address(RowAbsolute:=False)
ws.Range(«G9») = ws.Cells(3, 4).Address(RowAbsolute:=False, ColumnAbsolute:=False)
ws.Range(«G10») = ws.Cells(3, 4).Address(RowAbsolute:=True, ReferenceStyle:=xlA1)
ws.Range(«G11») = ws.Cells(3, 4).Address(ReferenceStyle:=xlA1)
ws.Range(«G12») = ws.Cells(3, 4).Address(RowAbsolute:=True, ReferenceStyle:=xlR1C1)
ws.Range(«G13») = «‘» & ThisWorkbook.Worksheets(«Sheet1»).Cells(1, 1).Parent.Name & «‘!» & ws.Cells(3, 4).Address(RowAbsolute:=True)

End Sub

OBJECTS
Range: The Range object is a representation of a single cell or a range of cells in a worksheet.
Worksheets: The Worksheets object represents all of the worksheets in a workbook, excluding chart sheets.

PREREQUISITES
Worksheet Name: Have a worksheet named ADDRESS.

ADJUSTABLE PARAMETERS
Output Range: Select the output range by changing the cell references («G5»), («G6»), («G7»), («G8»), («G9»), («G10»), («G11»), («G12») and («G13») in the VBA code to any cell in the worksheet, that doesn’t conflict with the formula.

METHOD 2. Excel ADDRESS function using VBA with links

VBA

Sub Excel_ADDRESS_Function_Using_Links()

‘declare a variable
Dim ws As Worksheet

Set ws = Worksheets(«ADDRESS»)

‘apply the Excel ADDRESS function
ws.Range(«G5») = ws.Cells(Range(«B5»), Range(«C5»)).Address()
ws.Range(«G6») = ws.Cells(Range(«B6»), Range(«C6»)).Address(RowAbsolute:=True)
ws.Range(«G7») = ws.Cells(Range(«B7»), Range(«C7»)).Address(ColumnAbsolute:=False)
ws.Range(«G8») = ws.Cells(Range(«B8»), Range(«C8»)).Address(RowAbsolute:=False)
ws.Range(«G9») = ws.Cells(Range(«B9»), Range(«C9»)).Address(RowAbsolute:=False, ColumnAbsolute:=False)
ws.Range(«G10») = ws.Cells(Range(«B10»), Range(«C10»)).Address(RowAbsolute:=True, ReferenceStyle:=xlA1)
ws.Range(«G11») = ws.Cells(Range(«B11»), Range(«C11»)).Address(ReferenceStyle:=xlA1)
ws.Range(«G12») = ws.Cells(Range(«B12»), Range(«C12»)).Address(RowAbsolute:=True, ReferenceStyle:=xlR1C1)
ws.Range(«G13») = «‘» & ThisWorkbook.Worksheets(«Sheet1»).Cells(1, 1).Parent.Name & «‘!» & ws.Cells(Range(«B13»), Range(«C13»)).Address(RowAbsolute:=True)

End Sub

OBJECTS
Range: The Range object is a representation of a single cell or a range of cells in a worksheet.
Worksheets: The Worksheets object represents all of the worksheets in a workbook, excluding chart sheets.

PREREQUISITES
Worksheet Name: Have a worksheet named ADDRESS.

ADJUSTABLE PARAMETERS
Output Range: Select the output range by changing the cell references («G5»), («G6»), («G7»), («G8»), («G9»), («G10»), («G11»), («G12») and («G13») in the VBA code to any cell in the worksheet, that doesn’t conflict with the formula.

METHOD 3. Excel ADDRESS function using VBA with ranges

VBA

Sub Excel_ADDRESS_Function_Using_Ranges()

‘declare a variable
Dim ws As Worksheet

Set ws = Worksheets(«ADDRESS»)

‘apply the Excel ADDRESS function
ws.Range(«G5») = ws.Range(«D3»).Address()
ws.Range(«G6») = ws.Range(«D3»).Address(RowAbsolute:=True)
ws.Range(«G7») = ws.Range(«D3»).Address(ColumnAbsolute:=False)
ws.Range(«G8») = ws.Range(«D3»).Address(RowAbsolute:=False)
ws.Range(«G9») = ws.Range(«D3»).Address(RowAbsolute:=False, ColumnAbsolute:=False)
ws.Range(«G10») = ws.Range(«D3»).Address(RowAbsolute:=True, ReferenceStyle:=xlA1)
ws.Range(«G11») = ws.Range(«D3»).Address(ReferenceStyle:=xlA1)
ws.Range(«G12») = ws.Range(«D3»).Address(RowAbsolute:=True, ReferenceStyle:=xlR1C1)
ws.Range(«G13») = «‘» & ThisWorkbook.Worksheets(«Sheet1»).Cells(1, 1).Parent.Name & «‘!» & ws.Range(«D3»).Address(RowAbsolute:=True)

End Sub

OBJECTS
Range: The Range object is a representation of a single cell or a range of cells in a worksheet.
Worksheets: The Worksheets object represents all of the worksheets in a workbook, excluding chart sheets.

PREREQUISITES
Worksheet Name: Have a worksheet named ADDRESS.

ADJUSTABLE PARAMETERS
Output Range: Select the output range by changing the cell references («G5»), («G6»), («G7»), («G8»), («G9»), («G10»), («G11»), («G12») and («G13») in the VBA code to any cell in the worksheet, that doesn’t conflict with the formula.

Usage of the Excel ADDRESS function and formula syntax

EXPLANATION

DESCRIPTION
The Excel ADDRESS function returns a cell reference as a string, based on a row and column number.

SYNTAX
=ADDRESS(row_num, column_num, [abs_num],[a1],[sheet_text])

ARGUMENT(S)
row_num: (Required) Row number to use in the reference.
column_num: (Required) Column number to use in the reference.
abs_num: (Optional) Type of address reference to use. This can be any of the following values:

Value Explanation Example
1 Absolute row and column $A$1
2 Absolute row and Relative column A$1
3 Relative row and Absolute column $A1
4 Relative row and column A1

Note: If the abs_num argument is omitted, the default value is 1 (Absolute row and column).

a1: (Optional) Specifies what type of reference style to use. This can be any of the following:

Value Explanation Example
TRUE A1 reference style A1, A2, B2
FALSE R1C1 reference style R1C1, R2C1, R2C2

Note: If the a1 argument is omitted, the default value is TRUE (A1 reference style).
sheet_text: (Optional) Specifies the name of the worksheet to be used. You will need to insert the name between the quotation marks («Name»).
Note: If the sheet_text argument is omitted, no sheet name will appear.

title keywords f1_keywords ms.prod api_name ms.assetid ms.date ms.localizationpriority

Range.Address property (Excel)

vbaxl10.chm144076

vbaxl10.chm144076

excel

Excel.Range.Address

aaa2432e-9bb1-4a48-3868-86455bc53938

05/10/2019

high

Range.Address property (Excel)

Returns a String value that represents the range reference in the language of the macro.

Syntax

expression.Address (RowAbsolute, ColumnAbsolute, ReferenceStyle, External, RelativeTo)

expression A variable that represents a Range object.

Parameters

Name Required/Optional Data type Description
RowAbsolute Optional Variant True to return the row part of the reference as an absolute reference. The default value is True.
ColumnAbsolute Optional Variant True to return the column part of the reference as an absolute reference. The default value is True.
ReferenceStyle Optional XlReferenceStyle The reference style. The default value is xlA1.
External Optional Variant True to return an external reference. False to return a local reference. The default value is False.
RelativeTo Optional Variant If RowAbsolute and ColumnAbsolute are False, and ReferenceStyle is xlR1C1, you must include a starting point for the relative reference. This argument is a Range object that defines the starting point.

NOTE: Testing with Excel VBA 7.1 shows that an explicit starting point is not mandatory. There appears to be a default reference of $A$1.

Remarks

If the reference contains more than one cell, RowAbsolute and ColumnAbsolute apply to all rows and columns.

Example

The following example displays four different representations of the same cell address on Sheet1. The comments in the example are the addresses that will be displayed in the message boxes.

Set mc = Worksheets("Sheet1").Cells(1, 1) 
MsgBox mc.Address() ' $A$1 
MsgBox mc.Address(RowAbsolute:=False) ' $A1 
MsgBox mc.Address(ReferenceStyle:=xlR1C1) ' R1C1 
MsgBox mc.Address(ReferenceStyle:=xlR1C1, _ 
 RowAbsolute:=False, _ 
 ColumnAbsolute:=False, _ 
 RelativeTo:=Worksheets(1).Cells(3, 3)) ' R[-2]C[-2]

[!includeSupport and feedback]

Определение активных составляющих книги

Мне кажется, многие загонялись таким вопросом, как определить активную ячейку (на которой находится курсор), строку или столбец. Или же хотелось получить адрес в формате А1, В4 и т.д. Вот сегодня я и покажу, как это сделать, потому, что очень удобно, когда ты знаешь активные элементы книги.

Номер активной строки

Практически все активные элементы определяются при помощи такого слова — Active, кторое записывается перед определением активного элемента. Таким образом, номер активной строки можно вычислить следующим образом:

       Sub Stroka()

           s = ActiveCell.Row

           MsgBox «Активная строка под номером » & s, vbInformation, «Активная строка»

       End Sub

Номер активного столбца и стороки

Аналогично определению строки столбец определяется по такому же принципу, только в конце добавляется не строка, а столбец:

       Sub Stroka()

           s = ActiveCell.Row

           b = ActiveCell.Column

           MsgBox «Активная строка под номером » & s & » » & _

vbNewLine & «Активный столбец под номером » & b, vbInformation, «адрес»

       End Sub

Определяем номер последней заполненной строки и столбца

Sub Last_Stroka_and_Stolbec()

‘ищем последнюю заполненную строку и столбец и выводим сообщение о номере

    Stroka = ActiveSheet.Cells.Find(What:=»*», SearchDirection:=xlPrevious, _

          SearchOrder:=xlByRows).Row

    Stolbec = ActiveSheet.Cells.Find(What:=»*», SearchDirection:=xlPrevious,         _SearchOrder:=xlByRows).Column

MsgBox «Последняя строка под номером » & Stroka & » » & _

           vbNewLine & «Последний столбец под номером » _

           & Stolbec, vbInformation, «Адрес»

End Sub

Определяем активную ячейку

Исходя из выше записанных выражений теперь можно смело определить координаты активной ячейки. То-есть определяем активную строку, активный столбец и получаем координаты активной ячейки. Выглядеть это будет так:

      Sub yacheika()

          sk = ActiveCell.Row

          st = ActiveCell.Column

          MsgBox «Активная ячейка имеет координаты Cells(» & sk & «,» & st & «)», _

                  vbInformation, «Активная ячейка»

      End Sub

Адрес активной ячейки

Многие думали, а как получить адрес активной ячейки? Очень просто, делается это так:

      Sub adres()

          A = ActiveCell.Address

          MsgBox «Абсолютный адрес активной ячейки — » & A, vbInformation, «Адрес»

      End Sub

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

      Sub adress()

          A = ActiveCell.Address(0, 0)

          MsgBox «Относительный адрес активной ячейки — » & A, vbInformation, «Адрес»

      End Sub

В скобках оператора Address указано какое именно значение должно быть относительным, а какое абсолютным. Если Address(0,0), то и строка и столбец записаны относительными (первый ноль отвечает за строку, второй ноль — это столбец). Если в строке поставить вместо ноля еденицу, то строка будет абсолютным значением, а столбец относительным. Причём значения следующих записей равнозначны:

Address(1, 0) = Address(True, False)

Адрес выделенного диапазона ячеек

Адрес выделенного диапазона можно получить следующим образом

      Sub diapazon()

‘используйте любую переменную для определения адреса

          A = Selection.Rows.Address(0, 0)    ‘Через строку

          b = Selection.Columns.Address(0, 0) ‘Через столбец

          c = Selection.Address(0, 0)

          MsgBox «Выделенный диапазон — » & A, vbInformation, «Адрес»

      End Sub

Координаты выделенного диапазона

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

      Sub Kdiapazon()

          a = Selection.Row

          b = Selection.Column

          K1 = Cells(a, b).Address(0, 0)

          aa = a + Selection.Rows.Count — 1

          bb = b + Selection.Columns.Count — 1

          K2 = Cells(aa, bb).Address(0, 0)

          MsgBox «Первая координата выделенного диапазона — » & K1 & vbNewLine & _

          «Вторая координата выделенного диапазона — » & K2, vbInformation, «Координаты»

      End Sub

a — Определяет номер первой строки выделенного диапазона;
b — Определяет номер первого столбца выделенного диапазона;
K1 — Определяем первую координату выделенного диапазона;
aa — Определяем номер последней строки выделенного диапазона;
bb — Определяем номер пследнего столбца выделенного диапазона;
K2 — Определяем вторую координату выделенного диапазона;

Selection.Rows.Count — определяет количество строк в выделенном диапазоне;
Selection.Columns.Count — определяет количество столбцов в выделенном диапазоне;

У многих возник вопрос: А почему вычитаем единицу? Всё потому, что первая координата входит в выделенный диапазон и нам её надо не потерять.

Имя активной книги

Имя активной книги возможно вычислить такой записью:

      Sub WorkbookName()

          Name = ActiveWorkbook.Name

          MsgBox «Имя активной книги — » & Name, vbInformation, «Имя активной книги»

      End Sub

Имя активного листа

Имя активного листа можно определить так:

      Sub SheetsName()

          Name = ActiveSheet.Name

          MsgBox «Имя активного листа — » & Name, vbInformation, «Имя активного листа»

      End Sub

 

tod2020

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

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

#1

17.07.2017 13:03:28

Как правильно выглядит код для такой конструкции?

Код
Worksheets(1).Range("Table1").[ХХХ].Find("свекла").Row

то есть Row определяется не для Worksheets(1) а для Range(«Table1»)

Прикрепленные файлы

  • 2017.07.17-Получение Row из Range через FIND.xlsm (20.48 КБ)

Изменено: tod202017.07.2017 13:14:02

 

Garni

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

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

#2

17.07.2017 13:14:13

Код
MsgBox Worksheets(1).Range("D5:G9").Find("свекла").Row
 

tod2020

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

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

Garni, Не то. Нужно по имени диапазона

 

Garni

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

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

#4

17.07.2017 13:46:03

Тогда попробуйте так

Код
MsgBox Range("table1").Find(What:="свекла").Row

Если надо найти порядковый номер строки таблицы из Столбца3, тогда

Код
MsgBox Range("table1").Find(What:="свекла").Offset(, -1)

Изменено: Garni17.07.2017 13:57:50

 

Илья Демид

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

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

#5

17.07.2017 13:46:16

У меня работает, если вы имеете ввиду чтобы указывалась строка из таблицы то отнимите количество строк с шапкой (в примере это 4)
т.е. вместо кода

Код
MsgBox (Worksheets(1).Range("table1").Find("Свекла").Row) 

Будет код

Код
MsgBox (Worksheets(1).Range("table1").Find("Свекла").Row-4)
 

ZVI

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

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

#6

17.07.2017 13:52:40

Вариант:

Код
Sub Test()
  
  Const FieldName = "Имя"   ' Имя поля таблицы для поиска
  Const What = "свекла"     ' Что искать
  
  Dim x As Range
  
  With Лист1.ListObjects(1).ListColumns(FieldName).DataBodyRange
    Set x = .Find(What, LookIn:=xlValues, LookAt:=xlWhole)
    If Not x Is Nothing Then MsgBox x.Row - .Row + 1
  End With
 
End Sub

Изменено: ZVI17.07.2017 13:55:33

 

tod2020

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

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

Всё что выше это всё многострочное сложное.
Нужно чтобы было просто в одну лакончиную строчку, без вычетаний лишних
Для этого нужно понимать классификацию, структуру объектов в строчке-конструкцию которую я изначально предложил

Изменено: tod202017.07.2017 13:57:45

 

tod2020

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

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

#8

17.07.2017 14:01:28

Цитата
Garni написал:
MsgBox Range(«table1″).Find(What:=»свекла»).Offset(, -1)

это тоже не пойдет поскольку собьется нумерация со временем, только Row нужно заполучить

 

Garni

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

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

У Вас таблица из 4 строчек и вопрос о номере строки, в которой находится свекла. Вам предложили как минимум 4 варианта. Какую еще классификацию нам надо понять? Куда пойти записаться чтоб изучить структуру объекта из 4 строчек?

 

tod2020

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

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

#10

17.07.2017 14:03:58

Цитата
Garni написал:
У Вас таблица из 4 строчек

это не рабочий файл. в рабочих файлах десятки-сотни таблиц с сотнями-тысячами строк

Изменено: tod202017.07.2017 14:04:35

 

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

 

Garni

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

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

Если у вас столько строчек, и не одна свекла обыкновенная там храниться, а еще свекла сахарная, свекла пареная, свекла испорченная и т.д. Тогда Find завершит поиск на первой найденной. Так какую строчку найти надо?

 

tod2020

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

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

Как правильно выглядит код для такой конструкции?

Worksheets(1).Range(«Table1»).[ХХХХХХХХХХХХ].Find(«свекла»).Row

то есть Row определяется не для Worksheets(1) а для Range(«Table1»)

PS Был бы listObject вместо XXX стояло бы DataBodyRange

Изменено: tod202017.07.2017 14:15:36

 

ZVI

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

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

#14

17.07.2017 14:18:38

Цитата
tod2020 написал: Нужно чтобы было просто в одну лакончиную строчку, без вычетаний лишних

С точки зрения правил программирования Ваше «нужно» некорректное.
Код пишется один раз так, чтобы он был понятен, работал в штатных и аварийных ситуациях.
И совершено не важно сколько в нем строчек. Это же не формула ячеек.
Хотя рекомендуется не более одной экранной странички для функции и процедуры для удобства визуального охвата и неперегрузки интеллекта и памяти программиста.
Если очень уж хочется в одну строчку, но с вычитанием, то можно, например. так:

Код
MsgBox Лист1.ListObjects("table1").ListColumns("Имя").DataBodyRange.Find("свекла").Row - Лист1.[table1].Row + 1

Изменено: ZVI17.07.2017 14:43:32

 

Garni

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

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

Вам ответ дал Илья Демид, в сообщении #6. Значение Row будет для являться для листа, если Вы хотите вычислить номер строки для таблицы по средствам VBA, то в лаконичную одну строку это не уберется

 

tod2020

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

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

#16

17.07.2017 14:22:13

Есть и такой вариант

Код
Range("Table1").Find("свекла").Row - Range("Table1").Row – 1

Но по задаче поставленной в теме говориться о такой конструкции:
Worksheets(1).Range(«Table1»).[ХХХХХХХХХХХХ].Find(«свекла»).Row

Как правильно выглядит код для такой конструкции?
то есть Row определяется не для Worksheets(1) а для Range(«Table1»)
PS Был бы listObject вместо XXX стояло бы DataBodyRange

Подмена Range на ListObject не нужна

Изменено: tod202017.07.2017 14:29:59

 

Слово задача убило наповал… Уважаемый tod2020 для задач есть платный раздел

 

tod2020

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

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

#18

17.07.2017 14:33:49

Цитата
Илья Демид написал:
Слово задача убило наповал

Я не требую. У Вас такая реакция(набор мыслеформ и картинка и интонация) на слово «задача» наверно с работы, но не всё так однобоко

Каждый кто отвечает на этих формах в этих темах решает задачи поставленные в теме. Я не требую большего чем тут принято. Как вещи называются так и называю
И каждый кто отвечает для когото другого  — какуюто свою задачу выполняет для себя таким образом. и я не спрашиваю зачем ктото мне отвечает.

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

Как детскому саду всё разжевываю

Изменено: tod202017.07.2017 14:44:29

 

ZVI

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

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

В примере была таблица, поэтому в ответе и ListObject.
А что у Вас подразумевается под [XXX] ? Так как пояснений никаких не было, я посчитал, что Вы хотели указать конкретное поле в таблице для поиска, значение же может оказаться и в других полях. Уточните про XXX.

Изменено: ZVI17.07.2017 14:41:46

 

Илья Демид

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

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

#20

17.07.2017 14:40:39

Вы ошибаетесь, но да ладно. Если я правильно понял то необходим вариант который бы сам вычислял в какой строке находится шапка и отнимал ее сам, Как насчет такого, но не 1 строкой:

Код
Dim a As Integer
a = Worksheets(1).Range("table1").Find("свекла").End(xlUp).Row
b = Worksheets(1).Range("table1").Find("свекла").Row
MsgBox b - a

Изменено: Илья Демид17.07.2017 14:41:38

 

AndreTM

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

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

тод2020, я уже упоминал вроде, что вы — не читатель?

В

том сообщении

вам был дан тот ответ, что вы требуете здесь (в одну строчку тот код переписывается просто на раз-два).
Неспособность заменить имя переменной её значением — на вашей совести…

 

tod2020

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

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

#22

17.07.2017 14:45:54

Цитата
AndreTM написал:
тод2020 , я уже упоминал вроде, что вы — не читатель?

Что это значит?

 

tod2020

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

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

Чтож за такое то происходит?
перевожу что твориться
-мне надо красное яблоко
-ну на целый ящик груш зеленых! тоже круглые же
-да не надо мне!, мне надо и ОДНО и КРАСНОЕ и ЯБЛОКО!
-ну на возьми ну хочешь три желтых груши?
-да не надо мне ни желтую ни зеленую грушу ни целы ящик их, мне надо одно красное яблоко
-да не бывает красных яблок я не видел и вот двое тоже не видели никогда в жизни твое красное яблоко

дают груши лишь потомуто не знают что существует красное яблоко или потомучто просто напросто нету его в наличии

Изменено: tod202017.07.2017 14:53:08

 

tod2020

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

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

#25

17.07.2017 14:54:55

Цитата
vikttur написал:
Дубль темы:

Что Вы хотели этим сказать?
Я же написал последней фразой что лучше создать новую тему
Зачем лишние движения происходят то?

Изменено: tod202017.07.2017 14:55:47

 

vikttur

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

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

Пусть определят участники тем — дубль или нет. Я вижу, что разница в названии — «диапазон» и «умная таблица». Вы считаете, что диапазон умной таблицы — не диапазон?

 

tod2020

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

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

#27

17.07.2017 14:56:53

Цитата
AndreTM написал:
В  том сообщении  вам был дан тот ответ, что вы требуете здесь

Меня ваще не слышат — не понимают что я уже 3 раза продублировал самого начала запроса темы
Я понял люди знают как мне лучше. точно
Надоело объясняться. Буду ждать когда появится человек который понимает и меня и VBA

Изменено: tod202017.07.2017 15:00:24

 

AndreTM

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

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

Короче, народ — нас явно троллят  :)

Предлагаю закончить все разборы и уточнения, ибо то, что ТС — китаец из индии, было понятно ещё в старой теме примерно с третьего его поста  :D  :D

 

vikttur

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

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

#29

17.07.2017 15:02:46

Цитата
Буду ждать когда появится человек который понимает и меня и VBA

В VBA здесь разбираются многие. А вот Вас не понимают.

Цитата
tod2020 написал: Меня ваще не слышат

Не стоит ли задуматься? Если Вас не слышат многие — проблема в Вас, В том, как Вы доносите информацию. Или неправы все, кроме одного?

 

tod2020

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

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

#30

17.07.2017 15:06:39

Цитата
vikttur написал:
Если Вас не слышат многие — проблема в Вас

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

Изменено: tod202017.07.2017 15:07:06

Like this post? Please share to your friends:
  • Vba excel userform activate
  • Vba excel адрес столбца
  • Vba excel winhttp winhttprequest
  • Vba excel user defined type not defined что это
  • Vba excel адрес в строку