tod2020 Пользователь Сообщений: 261 |
#1 17.07.2017 13:03:28 Как правильно выглядит код для такой конструкции?
то есть Row определяется не для Worksheets(1) а для Range(«Table1») Прикрепленные файлы
Изменено: tod2020 — 17.07.2017 13:14:02 |
||
Garni Пользователь Сообщений: 333 |
#2 17.07.2017 13:14:13
|
||
tod2020 Пользователь Сообщений: 261 |
Garni, Не то. Нужно по имени диапазона |
Garni Пользователь Сообщений: 333 |
#4 17.07.2017 13:46:03 Тогда попробуйте так
Если надо найти порядковый номер строки таблицы из Столбца3, тогда
Изменено: Garni — 17.07.2017 13:57:50 |
||||
Илья Демид Пользователь Сообщений: 320 |
#5 17.07.2017 13:46:16 У меня работает, если вы имеете ввиду чтобы указывалась строка из таблицы то отнимите количество строк с шапкой (в примере это 4)
Будет код
|
||||
ZVI Пользователь Сообщений: 4328 |
#6 17.07.2017 13:52:40 Вариант:
Изменено: ZVI — 17.07.2017 13:55:33 |
||
tod2020 Пользователь Сообщений: 261 |
Всё что выше это всё многострочное сложное. Изменено: tod2020 — 17.07.2017 13:57:45 |
tod2020 Пользователь Сообщений: 261 |
#8 17.07.2017 14:01:28
это тоже не пойдет поскольку собьется нумерация со временем, только Row нужно заполучить |
||
Garni Пользователь Сообщений: 333 |
У Вас таблица из 4 строчек и вопрос о номере строки, в которой находится свекла. Вам предложили как минимум 4 варианта. Какую еще классификацию нам надо понять? Куда пойти записаться чтоб изучить структуру объекта из 4 строчек? |
tod2020 Пользователь Сообщений: 261 |
#10 17.07.2017 14:03:58
это не рабочий файл. в рабочих файлах десятки-сотни таблиц с сотнями-тысячами строк Изменено: tod2020 — 17.07.2017 14:04:35 |
||
Вы просто объяснить можете что Вы хотите на выходе получить? или результат сказать какой должен получится |
|
Garni Пользователь Сообщений: 333 |
Если у вас столько строчек, и не одна свекла обыкновенная там храниться, а еще свекла сахарная, свекла пареная, свекла испорченная и т.д. Тогда Find завершит поиск на первой найденной. Так какую строчку найти надо? |
tod2020 Пользователь Сообщений: 261 |
Как правильно выглядит код для такой конструкции? Worksheets(1).Range(«Table1»).[ХХХХХХХХХХХХ].Find(«свекла»).Row то есть Row определяется не для Worksheets(1) а для Range(«Table1») PS Был бы listObject вместо XXX стояло бы DataBodyRange Изменено: tod2020 — 17.07.2017 14:15:36 |
ZVI Пользователь Сообщений: 4328 |
#14 17.07.2017 14:18:38
С точки зрения правил программирования Ваше «нужно» некорректное.
Изменено: ZVI — 17.07.2017 14:43:32 |
||||
Garni Пользователь Сообщений: 333 |
Вам ответ дал Илья Демид, в сообщении #6. Значение Row будет для являться для листа, если Вы хотите вычислить номер строки для таблицы по средствам VBA, то в лаконичную одну строку это не уберется |
tod2020 Пользователь Сообщений: 261 |
#16 17.07.2017 14:22:13 Есть и такой вариант
Но по задаче поставленной в теме говориться о такой конструкции: Как правильно выглядит код для такой конструкции? Подмена Range на ListObject не нужна Изменено: tod2020 — 17.07.2017 14:29:59 |
||
Слово задача убило наповал… Уважаемый tod2020 для задач есть платный раздел |
|
tod2020 Пользователь Сообщений: 261 |
#18 17.07.2017 14:33:49
Я не требую. У Вас такая реакция(набор мыслеформ и картинка и интонация) на слово «задача» наверно с работы, но не всё так однобоко Каждый кто отвечает на этих формах в этих темах решает задачи поставленные в теме. Я не требую большего чем тут принято. Как вещи называются так и называю И наверно потому заставляю себя говорить спасибо потому что человек отвечающий решает свои задачи для себя, он уже получает себе чтото там Как детскому саду всё разжевываю Изменено: tod2020 — 17.07.2017 14:44:29 |
||
ZVI Пользователь Сообщений: 4328 |
В примере была таблица, поэтому в ответе и ListObject. Изменено: ZVI — 17.07.2017 14:41:46 |
Илья Демид Пользователь Сообщений: 320 |
#20 17.07.2017 14:40:39 Вы ошибаетесь, но да ладно. Если я правильно понял то необходим вариант который бы сам вычислял в какой строке находится шапка и отнимал ее сам, Как насчет такого, но не 1 строкой:
Изменено: Илья Демид — 17.07.2017 14:41:38 |
||
AndreTM Пользователь Сообщений: 454 |
тод2020, я уже упоминал вроде, что вы — не читатель? В том сообщении вам был дан тот ответ, что вы требуете здесь (в одну строчку тот код переписывается просто на раз-два). |
tod2020 Пользователь Сообщений: 261 |
#22 17.07.2017 14:45:54
Что это значит? |
||
tod2020 Пользователь Сообщений: 261 |
Чтож за такое то происходит? дают груши лишь потомуто не знают что существует красное яблоко или потомучто просто напросто нету его в наличии Изменено: tod2020 — 17.07.2017 14:53:08 |
tod2020 Пользователь Сообщений: 261 |
#25 17.07.2017 14:54:55
Что Вы хотели этим сказать? Изменено: tod2020 — 17.07.2017 14:55:47 |
||
vikttur Пользователь Сообщений: 47199 |
Пусть определят участники тем — дубль или нет. Я вижу, что разница в названии — «диапазон» и «умная таблица». Вы считаете, что диапазон умной таблицы — не диапазон? |
tod2020 Пользователь Сообщений: 261 |
#27 17.07.2017 14:56:53
Меня ваще не слышат — не понимают что я уже 3 раза продублировал самого начала запроса темы Изменено: tod2020 — 17.07.2017 15:00:24 |
||
AndreTM Пользователь Сообщений: 454 |
Короче, народ — нас явно троллят Предлагаю закончить все разборы и уточнения, ибо то, что ТС — китаец из индии, было понятно ещё в старой теме примерно с третьего его поста |
vikttur Пользователь Сообщений: 47199 |
#29 17.07.2017 15:02:46
В VBA здесь разбираются многие. А вот Вас не понимают.
Не стоит ли задуматься? Если Вас не слышат многие — проблема в Вас, В том, как Вы доносите информацию. Или неправы все, кроме одного? |
||||
tod2020 Пользователь Сообщений: 261 |
#30 17.07.2017 15:06:39
Я думаю очень разный уровень понимания. Например это может проявляться в контактах с регионами. Ваще тяжко бывает. В москве легко улавливают меня с полу слова Изменено: tod2020 — 17.07.2017 15:07:06 |
||
How do I find the row number in a table (Excel 2010) from the selected cell.
I can find the sheet row number from ActiveRow.Row
or Selection.Row
. But I want to know what row number in the table this is.
ivan_pozdeev
33.3k16 gold badges105 silver badges150 bronze badges
asked Oct 7, 2014 at 8:57
Selection.Row - Selection.ListObject.Range.Row
answered Oct 29, 2017 at 11:56
JalalJalal
5466 silver badges12 bronze badges
1
Here’s an idea, try getting (active row — first row of table). That will give you the row number from the table.
Peter O.
31.8k14 gold badges81 silver badges95 bronze badges
answered Oct 7, 2014 at 9:03
i am not a vba / excel expert but this might do the job:
the answer is a bit late — but i ran into the same problem.
my function returns a listRow object, that is more powerful:
Sub testit()
Dim myList As ListObject
Dim myRow As ListRow
'some reference to a listObject
Set myList = ActiveWorkbook.Sheets(1).ListObjects("TableX")
'
'test the function
Set myRow = FirstSelectedListRow(myList)
'
'select the row
myRow.Select
'get index within sheet
MsgBox ("sheet row num " & myRow.Range.Row)
' get index within list
MsgBox ("List row index " & myRow.Index)
End Sub
'return ListRow if at least one cell of one row is acitve
'return Nothing otherwise
Function FirstSelectedListRow(list As ListObject) As ListRow
'default return
Set FirstSelectedListRow = Nothing
'declarations
Dim activeRange As Range
Dim activeListCells As Range
Dim indexSelectedRow_Sheet As Long
Dim indexFirstRowList_Sheet As Long
Dim indexSelectedRow_List As Long
'get current selection
Set activeRange = Selection
Set activeListCells = Intersect(list.Range, activeRange)
'no intersection - test
If activeListCells Is Nothing Then
Exit Function
End If
indexSelectedRow_Sheet = activeRange.Row
indexFirstRowList_Sheet = list.Range.Row
indexSelectedRow_List = indexSelectedRow_Sheet - indexFirstRowList_Sheet
Set FirstSelectedListRow = list.ListRows(indexSelectedRow_List)
End Function
answered Jan 20, 2015 at 17:12
This might help, assuming that there is only one table in sheet. Otherwise You need to specify the table range.
Sub FindRowNoInTable()
Dim ObjSheet As Worksheet
Dim startRow, ActiveRow, ActiveCol
Dim ObjList As ListObject
Set ObjSheet = ActiveSheet
ActiveRow = ActiveCell.Row
ActiveCol = ActiveCell.Column
For Each ObjList In ObjSheet.ListObjects
Application.Goto ObjList.Range
startRow = ObjList.Range.Row
Next
MsgBox (ActiveRow - startRow)
Cells(ActiveRow, ActiveCol).Select
End Sub
answered Oct 8, 2014 at 15:26
AnandAnand
153 bronze badges
YourRange.row minus YourListObject.HeaderRowRange.row
answered Feb 25, 2021 at 1:53
A little late, but I landed here whilst searching for this, so …
Simplest way I know:
dim MyTable as listobject
dim MyRow as integer
' Here your code or a manual action makes you end up on a random row
... Dostuffdostuffbleepbloop ...
' Find the row number you landed on within the table (the record number if you will)
MyRow = MyTable.DataBodyRange().Row
That’s it.
Pease note:
- This is done with Office 2019
- The brackets after DataBodyRange are EMPTY.
- The row counter is from DataBodyRange thus does NOT include the headers
Hope it helps someone.
answered Jan 2 at 18:54
Определение адреса выделенного диапазона ячеек на листе 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 намного удобнее, чем на портале сервиса, а для загрузки в сервис достаточно сформировать несложный файл. Заполнил новые строки, выделил их по любому столбцу, нажал кнопку и файл готов.
275
14 июля 2008 года
pashulka
985 / / 19.09.2004
[quote=Андре]я нашел ячейку …[/quote]
Если исходить из Ваших слов, то поиск ячейки уже реализован, однако, второй пост содержит лишь набор ключевых слов, использование которых, в представленном виде, не имеет особого смысла … при этом сам поиск и находка изволят отсутствовать.
Что касается об’екта Selection, то если предположить, что в момент выполнения инструкций выделен действительно диапазон (хотя это может быть и не так), то удаление всех строк этого диапазона, по идее, должно выглядить следующим образом (определение необходимости наличия или отсутствия скобок ложится на Вас) :
Excel.Selection.EntireRow.Delete;
Определение активных составляющих книги
Мне кажется, многие загонялись таким вопросом, как определить активную ячейку (на которой находится курсор), строку или столбец. Или же хотелось получить адрес в формате А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
So I need this code for modifying some info of a client. I found useful to add an example of my formulary, so this is how the info appears when I try to modify
I want to take the information of the new text insered and put it on the cells of this client who has an ID, that’s why I need the number of Row where this exact ID is, to modify those Cells.
Ok guys, so pardon me if I am commiting several and/or huge ones… but I don’t know how to use VBA and my teacher thinks we should (I don’t agree because I’m studying mechanics but OK). Anyway, I’ve tried all the things you have said to me and still have the ’91 error1’… Anyway, thank you very much for your support.
Private Sub Modify_Click()
Dim FILA As Range
Dim codigo As Integer
Dim Linea As Long
codigo = Codigo_txt.Value
valor_buscado = Me.Codigo_txt
Set FILA = Sheets("Clientes").Range("A:A").Find(valor_buscado, lookat:=xlWhole)
Linea = FILA.Row
Range("B" & Linea).Value = Me.txt_name.Value
Range("C" & Linea).Value = Me.txt_surname.Value
Range("D" & Linea).Value = Me.txt_ID.Value
Range("E" & line).Value = Me.txt_telf.Value
Range("F" & Linea).Value = Me.txt_adress.Value
Range("G" & Linea).Value = Me.txt_CP.Value
Range("H" & Linea).Value = Me.txt_town.Value
Range("I" & Linea).Value = Me.txt_email.Value
End Sub
Thank you guys
As I said, i wanted to get the number of the row with .Row but it doesn’t work