Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/определение адреса ячеек - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » определение адреса ячеек (Макросы/Sub)
определение адреса ячеек
123mark123 Дата: Среда, 14.12.2016, 22:01 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

Уважаемые знатоки
Помогите автоматизировать процесс. Есть 2 файла: файл реестр и файл ошибок. В файле ошибок поля N_ZA и IDCASE соответствуют значениям полей N_ZA и IDCASE в файле реестр. Нужно найти строки по значениям полей N_ZA и IDCASE в файле "реестр" и залить их желтым цветом. Выгрузил значения поля IDCASE из книги "ошибки" в массив, сделал поиск в книге "реестр" - ячейки залил желтым.
А как определить адрес найденой ячейки, что б потом от нее плясать вниз и определить диапазон?
И как вообще залить цветом строки?
К сообщению приложен файл: __.rar (71.1 Kb)


Сообщение отредактировал 123mark123 - Среда, 14.12.2016, 22:03
 
Ответить
СообщениеУважаемые знатоки
Помогите автоматизировать процесс. Есть 2 файла: файл реестр и файл ошибок. В файле ошибок поля N_ZA и IDCASE соответствуют значениям полей N_ZA и IDCASE в файле реестр. Нужно найти строки по значениям полей N_ZA и IDCASE в файле "реестр" и залить их желтым цветом. Выгрузил значения поля IDCASE из книги "ошибки" в массив, сделал поиск в книге "реестр" - ячейки залил желтым.
А как определить адрес найденой ячейки, что б потом от нее плясать вниз и определить диапазон?
И как вообще залить цветом строки?

Автор - 123mark123
Дата добавления - 14.12.2016 в 22:01
Karataev Дата: Среда, 14.12.2016, 22:23 | Сообщение № 2
Группа: Проверенные
Ранг: Старожил
Сообщений: 1334
Репутация: 533 ±
Замечаний: 0% ±

Excel
Нумерация строк в массиве "a" начинается с 1, а не с нуля. В VBA в некоторых случаях нумерация массивов может быть с нуля, может быть с 1. В данном случае с 1. Поэтому цикл надо делать так:
[vba]
Код
For i = 1 To s
[/vba]
Строки залить цветом можно так:
[vba]
Код
cell.EntireRow.Interior.Color = 65535
[/vba]
Адрес найденной ячейки можно записать в переменную. Если просто вызывать свойство Address, то будет ошибка.
 
Ответить
СообщениеНумерация строк в массиве "a" начинается с 1, а не с нуля. В VBA в некоторых случаях нумерация массивов может быть с нуля, может быть с 1. В данном случае с 1. Поэтому цикл надо делать так:
[vba]
Код
For i = 1 To s
[/vba]
Строки залить цветом можно так:
[vba]
Код
cell.EntireRow.Interior.Color = 65535
[/vba]
Адрес найденной ячейки можно записать в переменную. Если просто вызывать свойство Address, то будет ошибка.

Автор - Karataev
Дата добавления - 14.12.2016 в 22:23
123mark123 Дата: Среда, 14.12.2016, 22:35 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

Karataev,
Спасибо за оперативный ответ. То что нумерация с нуля - мне известно, цикл с 1 сделан с умыслом, для выполнения дальнейших задач
Но я так и не понял, как определить адрес найденой ячейки , потом выделить диапазон


александр
 
Ответить
СообщениеKarataev,
Спасибо за оперативный ответ. То что нумерация с нуля - мне известно, цикл с 1 сделан с умыслом, для выполнения дальнейших задач
Но я так и не понял, как определить адрес найденой ячейки , потом выделить диапазон

Автор - 123mark123
Дата добавления - 14.12.2016 в 22:35
Karataev Дата: Среда, 14.12.2016, 22:39 | Сообщение № 4
Группа: Проверенные
Ранг: Старожил
Сообщений: 1334
Репутация: 533 ±
Замечаний: 0% ±

Excel
То что нумерация с нуля - мне известно,

В Вашем случае нумерация с 1.

как определить адрес найденой ячейки

В посте 2 есть макрос (в спойлере), там написано, как определить адрес:
[vba]
Код
If Not cell Is Nothing Then strAddress = cell.Address
[/vba]


Сообщение отредактировал Karataev - Среда, 14.12.2016, 22:43
 
Ответить
Сообщение
То что нумерация с нуля - мне известно,

В Вашем случае нумерация с 1.

как определить адрес найденой ячейки

В посте 2 есть макрос (в спойлере), там написано, как определить адрес:
[vba]
Код
If Not cell Is Nothing Then strAddress = cell.Address
[/vba]

Автор - Karataev
Дата добавления - 14.12.2016 в 22:39
123mark123 Дата: Среда, 14.12.2016, 22:50 | Сообщение № 5
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

Karataev,
Спасибо, уже кое - что проясняется


александр
 
Ответить
СообщениеKarataev,
Спасибо, уже кое - что проясняется

Автор - 123mark123
Дата добавления - 14.12.2016 в 22:50
Karataev Дата: Среда, 14.12.2016, 23:07 | Сообщение № 6
Группа: Проверенные
Ранг: Старожил
Сообщений: 1334
Репутация: 533 ±
Замечаний: 0% ±

Excel
Цикл у Вас правильный был, это я запутался. Правильно так, как было:
[vba]
Код
For i = 1 To s-1
[/vba]


Сообщение отредактировал Karataev - Среда, 14.12.2016, 23:22
 
Ответить
СообщениеЦикл у Вас правильный был, это я запутался. Правильно так, как было:
[vba]
Код
For i = 1 To s-1
[/vba]

Автор - Karataev
Дата добавления - 14.12.2016 в 23:07
123mark123 Дата: Четверг, 15.12.2016, 23:28 | Сообщение № 7
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

В итоге

[vba]
Код
Sub отработка_файла_3()

Dim strAddress As String
' активируем файл ошибок
Windows("ошибки.xlsx").Activate

s = Cells(1048576, "A").End(xlUp).Row

'создание массива и занесение в него данных из таблицы
Dim a()
a = Range("G" & 2 & ":" & "G" & s).Value

Windows("реестр.xlsm").Activate

For i = 1 To s - 1

Dim cell As Range: Set cell = Range("C2:C20000").Find(a(i, 1), , xlValues)
If Not cell Is Nothing Then strAddress = cell.Address

Range(strAddress).Select

x = ActiveCell.Row
Selection.End(xlDown).Select
y = ActiveCell.Row - 1
ActiveSheet.Range("A" & x & ":" & "G" & y).Interior.Color = 65535

Next i

End Sub
[/vba]

Все работает


александр

Сообщение отредактировал 123mark123 - Четверг, 15.12.2016, 23:29
 
Ответить
СообщениеВ итоге

[vba]
Код
Sub отработка_файла_3()

Dim strAddress As String
' активируем файл ошибок
Windows("ошибки.xlsx").Activate

s = Cells(1048576, "A").End(xlUp).Row

'создание массива и занесение в него данных из таблицы
Dim a()
a = Range("G" & 2 & ":" & "G" & s).Value

Windows("реестр.xlsm").Activate

For i = 1 To s - 1

Dim cell As Range: Set cell = Range("C2:C20000").Find(a(i, 1), , xlValues)
If Not cell Is Nothing Then strAddress = cell.Address

Range(strAddress).Select

x = ActiveCell.Row
Selection.End(xlDown).Select
y = ActiveCell.Row - 1
ActiveSheet.Range("A" & x & ":" & "G" & y).Interior.Color = 65535

Next i

End Sub
[/vba]

Все работает

Автор - 123mark123
Дата добавления - 15.12.2016 в 23:28
Karataev Дата: Четверг, 15.12.2016, 23:40 | Сообщение № 8
Группа: Проверенные
Ранг: Старожил
Сообщений: 1334
Репутация: 533 ±
Замечаний: 0% ±

Excel
Для данной задачи не нужно использовать свойство "Address", достаточно использовать переменную cell, которая представляет собой ячейку, в которой найден искомый текст.

P.S. Оформляйте код специальными тегами (об этом сказано в правилах форума).


Сообщение отредактировал Karataev - Четверг, 15.12.2016, 23:41
 
Ответить
СообщениеДля данной задачи не нужно использовать свойство "Address", достаточно использовать переменную cell, которая представляет собой ячейку, в которой найден искомый текст.

P.S. Оформляйте код специальными тегами (об этом сказано в правилах форума).

Автор - Karataev
Дата добавления - 15.12.2016 в 23:40
Мир MS Excel » Вопросы и решения » Вопросы по VBA » определение адреса ячеек (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!