Модераторы: mihanik
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> вычислить последний заполненный столбец, в Excel средствами VBA 
V
    Опции темы
Тиль
Дата 21.5.2008, 06:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 27.2.2006

Репутация: нет
Всего: нет



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

colum = mbook.Sheets(Itog_Report_1).Columns("A").Find(What:="*", LookIn:=xlValues, SearchDirection:=xlPrevious, SearchOrder:=xlByRows).Row

Таким образом я выхожу на номер строки, которая была заполнена последней в результате работы скрипта(количество строк динамически изменяется).
А как мне найти последний заполненный столбец, если количество столбцов тоже динамически изменяется?
--------------------
Казалось нам пипец, оказалось что не казалось
PM MAIL   Вверх
Akina
Дата 21.5.2008, 08:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20570
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 25
Всего: 453



Почитать встроенную справку по термину SpecialCells


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
LOPUH
Дата 21.5.2008, 09:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Растение
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 15.2.2008
Где: Красноярск

Репутация: 3
Всего: 4



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

Worksheets("Sheet1").Activate
Set myRange = ActiveCell.CurrentRegion
lastRow = myRange.Rows.Count
lastCol = myRange.Columns.Count

PM MAIL   Вверх
Тиль
Дата 21.5.2008, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 27.2.2006

Репутация: нет
Всего: нет



myRange и lastCol как объявлять? lastCol выдаст значение скажем "АВ"?
*-это не по этому символу это значит что ищу все по этому столбцу, любое значение
--------------------
Казалось нам пипец, оказалось что не казалось
PM MAIL   Вверх
LOPUH
Дата 21.5.2008, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Растение
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 15.2.2008
Где: Красноярск

Репутация: 3
Всего: 4



lastCol  можно объявить как int.    В этой переменной  будет количество столбцов в  CurrentRegion.  Зная его, легко получить адрес  последнего столбца..  myRange ,соответвенно ,объявлять  как  Range. Но повторюсь ,это частный случай, подходящий  для  варианта, когда  все строки  одинаковой длины.
PM MAIL   Вверх
Тиль
Дата 21.5.2008, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 27.2.2006

Репутация: нет
Всего: нет



да, сроки одинаковой длинны, но цифровое значение толбца не подходит как я скажем из числа узнаю что это к примеру столбец "АА"?
--------------------
Казалось нам пипец, оказалось что не казалось
PM MAIL   Вверх
LOPUH
Дата 22.5.2008, 05:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Растение
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 15.2.2008
Где: Красноярск

Репутация: 3
Всего: 4



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

Option Explicit

Sub Example()
Dim myRange As Range
Dim col As Range
Dim colCount As Integer
Dim lastColName As String

Worksheets("Лист1").Activate
Set myRange = ActiveCell.CurrentRegion
colCount = myRange.Columns.Count
Set col = myRange.Columns(colCount)
lastColName = col.Address() 
MsgBox lastColName


'
End Sub


З.Ы  А почему вы  не можете пользоваться своей процедурой? Вот  немножко переработал ее для поиска последнего столбца..
Код

Dim x As Integer

x = Worksheets("Лист1").Rows(1).Find(What:="*", LookIn:=xlValues, SearchDirection:=xlPrevious, SearchOrder:=xlByColumns).Column
MsgBox Worksheets("Лист1").Columns(x).Address()
End Sub


Это сообщение отредактировал(а) LOPUH - 22.5.2008, 06:59
PM MAIL   Вверх
Тиль
Дата 22.5.2008, 09:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 27.2.2006

Репутация: нет
Всего: нет



Пасибки, он выводит адресс из которого мне надо только столбец а он выводит "$AA:$AA". Ну ненужноя я обрезал функциями. Все нормально спасибо
--------------------
Казалось нам пипец, оказалось что не казалось
PM MAIL   Вверх
ProgramerForever
Дата 12.3.2017, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 554
Регистрация: 15.11.2006
Где: Новосибирск

Репутация: нет
Всего: 5



Тема старая, но может кому и пригодится. Есть другой простой вариант - использовать свойство листа UsedRange.
Код

Dim lCountRows as Long
Dim lCountCols as Long
 
lCountRows=ActiveWorkbook.Sheets(1).UsedRange.Rows.Count'Кол-во строк
lCountCols =ActiveWorkbook.Sheets(1).UsedRange.Columns.Count'Кол-во столбцов

https://msdn.microsoft.com/en-us/library/mi...xcel.range.aspx
Только A1 должна быть заполнена
PM MAIL WWW ICQ   Вверх
Akina
Дата 12.3.2017, 20:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20570
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 25
Всего: 453



Цитата(ProgramerForever @  12.3.2017,  21:23 Найти цитируемый пост)
Есть другой простой вариант - использовать свойство листа UsedRange.

Ты правда думаешь, что ТС все 9 лет ждал этого совета? 

Цитата(ProgramerForever @  12.3.2017,  21:23 Найти цитируемый пост)
https://msdn.microsoft.com/en-us/library/mi...xcel.range.aspx

И к какой из версий Офиса, существовавших по состоянию на 21.5.2008, 07:57, применима эта ссылка?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование, связанное с MS Office"
mihanik staruha

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами



  • Несанкционированная реклама на форуме запрещена
  • Пожалуйста, давайте своим темам осмысленный, информативный заголовок. Вопль "Помогите!" таковым не является.
  • Чем полнее и яснее Вы изложите проблему, тем быстрее мы её решим.
  • Оставляйте свои записи в "Книге отзывов о работе администрации"
  • А вот тут лежит FAQ нашего подраздела


Если Вам понравилась атмосфера форума, заходите к нам чаще!
С уважением mihanik и staruha.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование, связанное с MS Office | Следующая тема »


 




[ Время генерации скрипта: 0.1722 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.