Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

VBA для Excel

24K
23 июля 2007 года
Андре
9 / / 23.07.2007
Помогите неученому человеку
1) как найти последнюю левую ячейку на листе
2) можно ли выделить строку, зная адрес ячейки, если помогите:)
18K
23 июля 2007 года
pavel55
79 / / 14.05.2007
хм, может вам последную строку надо найти? Вот примеры, как можно найти последнюю строку в столбце А

 
Код:
'для определения последней строки в столбце
iLastRow& = Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row
iLastRow& = Range("A65536").End(xlUp).Row
iLastRow& = Cells(65536, 1).End(xlUp).Row
iLastRow& = Cells(65536, ActiveCell.Column).End(xlUp).Row
iLastRow& = Cells(65536, "A").End(xlUp).Row
MsgBox iLastRow&



Выделяем всю строку, зная адрес ячейки

 
Код:
Range("A5").EntireRow.Select


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

 
Код:
ActiveCell.EntireRow.Select
6.4K
24 июля 2007 года
Host
122 / / 22.09.2005
Цитата: Андре
Помогите неученому человеку
1) как найти последнюю левую ячейку на листе
2) можно ли выделить строку, зная адрес ячейки, если помогите:)



Можно так же использовать свойство UsedRange листа.
Например Application.ActiveSheet.UsedRange.Address - будет содержать строку вида "$С$1:$E$30" где "$С$1" - левая верхняя ячейка, а "$E$30" - правая нижняя. разобрать эти строки не составит большего труда:

 
Код:
'Номер последней используемой строки
Function LastUsedRow() As Long
   Dim strAddress As String
   strAddress = Application.ActiveSheet.UsedRange.Address
   LastUsedRow = Int(Right(strAddress, Len(strAddress) - _
       InStrRev(strAddress, "$")))
End Function


 
Код:
'Адрес левой нижней используемой ячейки
Function LastLowLeftCell() As String
   Dim strAddress As String, strColumn As String, strRow As String
   Dim nStart As Long
   nStart = 2
   strAddress = Application.ActiveSheet.UsedRange.Address
   LastLowLeftCell = Mid(strAddress, nStart, InStr(nStart, strAddress, _
      "$") - nStart) & Trim(Str(LastUsedRow))
End Function
31K
26 июля 2007 года
vladvs
1 / / 26.07.2007
Можно использовать следующую строку:
ActiveCell.SpecialCells(xlLastCell).Select
Работает только если данные на лист вносились без удалений (вернее очистки крайних строк и столбцов).
Эксель запоминает такие ячейки (самые крайние, в которых данные "чистились").
30K
31 июля 2007 года
Etalon
10 / / 30.07.2007
Добрый день!
Извините что влез в данную дискуцию, но уменя то же вопрос по Exele.

Цитата:
Sub LoopRange2()

'Указывает, что переменная MyCell является диапазоном
Dim MyCell As Range
'Цикл типа For Each…Next для выделенной области
For Each MyCell In Selection
If MyCell.Value Like "*Книг*" Then
'Устанавливает красный цвет фона ячейки
MyCell.Interior.ColorIndex = 3
ElseIf MyCell.Value Like "*Фильм*" Then
'Устанавливает зеленый цвет фона ячейки
MyCell.Interior.ColorIndex = 4
ElseIf MyCell.Value = "" Then
'Устанавливает стандартный цвет фона ячейки
MyCell.Interior.ColorIndex = xlNone
Else
'Устанавливает голубой цвет фона ячейки
MyCell.Interior.ColorIndex = 5
End If
Next

End Sub


несколько вопросов
1. вданном случаи диапазон задается физический. как сделать определеный диапозон A1:H30?
2. принаждение ячейки с искомой величины (фильм, книга, журнал), ячейка окрашиваеться в определенный заданный цвет. как сделать поиск искомой велечены в определенном столбце(Columns H:H)?
3.как сделать, чтобы не ячейка окрашивалась в определенный цвет, а изменялся цвет строки при найденой искомой величине в столбце H?
Подскажите умные гуру :)

18K
31 июля 2007 года
pavel55
79 / / 14.05.2007
Не очень понял про A1:H30, а потом про столбец H:H, у вас уже столбец H захватывается в диапазоне A1:H30

Вы хотите в столбце H найти значения, которые стоят в A1:H30? Могу поспорить, что значение из ячейки H1, будет найдено в столбце H.
6.4K
31 июля 2007 года
Host
122 / / 22.09.2005
Цитата: Etalon
Добрый день!
несколько вопросов
1. вданном случаи диапазон задается физический. как сделать определеный диапозон A1:H30?


 
Код:
Dim rngRange As Range
Set rngRange = Range("A1:H30")

Цитата: Etalon

2. принаждение ячейки с искомой величины (фильм, книга, журнал), ячейка окрашиваеться в определенный заданный цвет. как сделать поиск искомой велечены в определенном столбце(Columns H:H)?


Нахождение ячейки и окраска в заданный цвет:

 
Код:
Dim rngRange As Range
Set rngRange = Range("H:H")
rngRange.Find("Книга", SearchOrder:=xlByColumns, _
LookIn:=xlValues).Interior.ColorIndex = 3

Цитата: Etalon

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


То же, только окраска строки:

 
Код:
Dim rngRange As Range
Set rngRange = Range("H:H")
Rows(rngRange.Find("Книга", SearchOrder:=xlByColumns, _
LookIn:=xlValues).Row).Interior.ColorIndex = 3
30K
31 июля 2007 года
Etalon
10 / / 30.07.2007
Цитата: Host

То же, только окраска строки:
 
Код:
Dim rngRange As Range
Set rngRange = Range("H:H")
Rows(rngRange.Find("Книга", SearchOrder:=xlByColumns, _
LookIn:=xlValues).Row).Interior.ColorIndex = 3



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

 
Код:
Dim rngRange As Range
Set rngRange = Range("A1:H30")

если задан диапазон А1:Н30 то почему не красится строка именно в этом диапазоне?

 
Код:
Sub Row()
Dim rngRange As Range
Set rngRange = Range("H:H")
For Each rngRange In Selection
If rngRange.Value Like "*Книг*" Then
Rows.Interior.ColorIndex = 3
End If
Next
End Sub

Цикл For Each...Next вроде правильно написан, нопочемуто не пашет или ошибка в операторе условии (If)? Старнно, ведь в операторе условия заданные все условия. Условия-ДА заданно поиск слова КНИГ (If rngRange.Value Like "*Книг*"). ТО окрашиваеться строка в заданный цвет-красный(Rows.Interior.ColorIndex = 3), если нет то стоп(End If). Как бы все условие заданы наверно.....
30K
01 августа 2007 года
Etalon
10 / / 30.07.2007
Цитата: pavel55
Не очень понял про A1:H30, а потом про столбец H:H, у вас уже столбец H захватывается в диапазоне A1:H30

Вы хотите в столбце H найти значения, которые стоят в A1:H30? Могу поспорить, что значение из ячейки H1, будет найдено в столбце H.



Из выше изложенного в посте №5 для поиска заначения *Книга*, надо выделять диапазон A1:Н30 и тогда ячейка будет выделяться там где будет найденно данное значение.
Если по изложенному:

 
Код:
Dim rngRange As Range
Set rngRange = Range("H:H")
rngRange.Find("Книга", SearchOrder:=xlByColumns, _
LookIn:=xlValues).Interior.ColorIndex = 3

то должно именно в столбце Н искать значение и изменять цвет в яцейки, посколько значение *Книга* может встречать в любой ячейки заданного диапазона А1:Н30

Мда только из всего что было не получается или я не так использую циклы или где синтаксическая ошибка :(
18K
01 августа 2007 года
pavel55
79 / / 14.05.2007
ой, не знаю... посмотрите что-нибудь из этого

Код:
Sub Макрос1()
    Dim rngRange As Range
    Dim Found As Range
    Set rngRange = Range("A1:H30")
    Set Found = rngRange.Find("*Книга*", LookIn:=xlValues)
    If Found Is Nothing Then
        MsgBox "Ничего не найдено!"
        Exit Sub
    Else
        Found.EntireRow.Font.ColorIndex = 3
    End If
End Sub


Код:
Sub Макрос2()
    Dim rngRange As Range
    Dim MyCell As Range
    Set rngRange = Range("A1:H30")
    For Each MyCell In rngRange
        If MyCell.Value Like "*Книг*" Then 'важен регист букв
            MyCell.EntireRow.Font.ColorIndex = 3
        ElseIf MyCell.Value Like "*Фильм*" Then 'важен регист букв
            MyCell.EntireRow.Font.ColorIndex = 4
        ElseIf MyCell.Value = "" Then
            MyCell.Interior.ColorIndex = xlNone
        Else
            MyCell.EntireRow.Font.ColorIndex = 5
        End If
    Next
End Sub
6.4K
01 августа 2007 года
Host
122 / / 22.09.2005
Цитата: Etalon
если задан диапазон А1:Н30 то почему не красится строка именно в этом диапазоне?


Потому что у диапазона в поле Row записано только начало диапазона.
Если надо закрасить весь диапазон, необходимо определить его окончание:

Код:
Sub ColorRangeRows(rng As Range, color As Integer)
   Dim rStart As Long, rFinish As Long
   Dim i As Long
 
   rStart = rng.row
   rFinish = rStart
   If rStart > 0 Then
      Do While Not Intersect(rng, Range("A" & Trim(Str(rFinish + 1)))) _
Is Nothing
         rFinish = rFinish + 1
      Loop
      Rows(Trim(Str(rStart)) & ":" & Trim(Str(rFinish))).Interior.ColorIndex _
= color
   End If
End Sub

Цитата: Etalon

 
Код:
Set rngRange = Range("H:H")
For Each rngRange In Selection


Как эту строку прочитает интерпретатор VBA:
"Для каждого столбца "H" в текущем выделении"
А теперь посмотри, где ты делаеш выделение? и сколько столбцев в этом выделении?

Цитата: Etalon

 
Код:
If rngRange.Value Like "*Книг*" Then


"Если значение столбца "H" похоже на строку "*Книг*", тогда делать что-то..."
Какое значение у тебя в столбце "H"?

6.4K
01 августа 2007 года
Host
122 / / 22.09.2005
Цитата: Etalon
... и изменять цвет в яцейки, посколько значение *Книга* может встречать в любой ячейки заданного диапазона А1:Н30...



Теперь понятнее. Тебе надо что-то на подобие этого:

Код:
Sub ColorRangeRows(rng As Range, color As Integer, strFindWhat As String)
   Dim rStart As Long, rFinish As Long
   Dim i As Long
   Dim rngRange As Range, rngFind As Range
 
   rStart = rng.row
   rFinish = rStart
   If rStart > 0 Then
      Do While Not Intersect(rng, Range("A" & Trim(Str(rFinish)))) Is Nothing
         'Устанавливаем диапазон поиска
         Set rngRange = Range("A" & Trim(Str(rFinish)) & ":" & "H" & _
 Trim(Str(rFinish)))
         'Если значение найдено - нам вернется диапазон
         Set rngFind = rngRange.Find(strFindWhat, SearchOrder:=xlByRows, _
         LookIn:=xlValues)
         'Проверяем что нам вернулось
         If Not rngFind Is Nothing Then
            'Если поиск успешный - красим строку
            Rows(rngFind.row).Interior.ColorIndex = color
         End If
         rFinish = rFinish + 1
      Loop
   End If
End Sub
30K
01 августа 2007 года
Etalon
10 / / 30.07.2007
Цитата: pavel55
ой, не знаю... посмотрите что-нибудь из этого
Код:
Sub Макрос2()
    Dim rngRange As Range
    Dim MyCell As Range
    Set rngRange = Range("A1:H30")
    For Each MyCell In rngRange
        If MyCell.Value Like "*Книг*" Then 'важен регист букв
            MyCell.EntireRow.Font.ColorIndex = 3
        ElseIf MyCell.Value Like "*Фильм*" Then 'важен регист букв
            MyCell.EntireRow.Font.ColorIndex = 4
        ElseIf MyCell.Value = "" Then
            MyCell.Interior.ColorIndex = xlNone
        Else
            MyCell.EntireRow.Font.ColorIndex = 5
        End If
    Next
End Sub



В данном случаи изменяется фонт условия (Книг, Фильм) и все изменяет в один цвет. Задача окрасить строку в найденном условие и в заданном диапазоне А1:Н30 по столбцу Н с несколькоми условиями (Книг, Фильм, Журнал и т.д.). Следовательно в столбце Н может быть несколько значений и Книг и Фильм и Журналов и тд. Значит тут должен быть цикл For Each....Next который ищет значение при положительном изменяет цвет строки от Н до А. К примеру в столбце было найденно несколько значений Книг (Н2, Н10, Н20 и тд) значит изменяется цвет (Н2:А2, Н10:А10, Н20:А20 и тд) так и с другими значениями Фильм Журнал и тд.

30K
01 августа 2007 года
Etalon
10 / / 30.07.2007
Цитата: Host
Потому что у диапазона в поле Row записано только начало диапазона.
Если надо закрасить весь диапазон, необходимо определить его окончание:
Код:
Sub ColorRangeRows(rng As Range, color As Integer)
   Dim rStart As Long, rFinish As Long
   Dim i As Long
 
   rStart = rng.row
   rFinish = rStart
   If rStart > 0 Then
      Do While Not Intersect(rng, Range("A" & Trim(Str(rFinish + 1)))) _
Is Nothing
         rFinish = rFinish + 1
      Loop
      Rows(Trim(Str(rStart)) & ":" & Trim(Str(rFinish))).Interior.ColorIndex _
= color
   End If
End Sub



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

 
Код:
With ThisWorkbook.Worksheets(1).[A5:H300]
6.4K
01 августа 2007 года
Host
122 / / 22.09.2005
В этом случае - возвращается объект Range:
 
Код:
ThisWorkbook.Worksheets(1).[A5:H300]

А в этом - число типа Long
 
Код:
ThisWorkbook.Worksheets(1).[A5:H300].Row

Снова Range:
 
Код:
Rows("5:15")


А теперь сам скажи, есть ли у типа данных Long свойство Interior и в каком случае ты сможеш изменить цвет?;)
30K
01 августа 2007 года
Etalon
10 / / 30.07.2007
Цитата: Host
А теперь сам скажи, есть ли у типа данных Long свойство Interior


Ну насколько я помню из школьной программы :) Long - это численный тип данных.
Следовательно

Цитата: Host
и в каком случае ты сможеш изменить цвет?;)

Практически использовать Long без значения в числе не возможно, но если задать значение в число то.....:confused:
Host спасибо тебе за наставления, но VBA я не силен и поэтому обратился за советом.

30K
02 августа 2007 года
Etalon
10 / / 30.07.2007
Код:
Sub LoopRange2()
    Dim MyCell As Range
    For Each MyCell In [H1:H20]
        If MyCell.Value Like "*Книга*" Then
            MyCell.Interior.ColorIndex = 3
        ElseIf MyCell.Value Like "*Фильм*" Then
            MyCell.Interior.ColorIndex = 4
        ElseIf MyCell.Value = "" Then
            MyCell.Interior.ColorIndex = xlNone
        Else
            MyCell.Interior.ColorIndex = 5
        End If
    Next
End Sub

Народ подскажите как тут или по другому сделать, что бы изменялся цвет не ячейки, а строки в определеном диапазоне (А:Н)??
6.4K
02 августа 2007 года
Host
122 / / 22.09.2005
[quote=Etalon;204805Народ подскажите как тут или по другому сделать, что бы изменялся цвет не ячейки, а строки в определеном диапазоне (А:Н)??[/quote]

Например так:
Код:
Sub LoopRange2(strRange As String) '"A#:H#"
    Dim MyCell As Range
    For Each MyCell In [H1:H20]
        If MyCell.Value Like "*Книга*" Then
            Range(Replace(strRange, "#", Trim(Str(MyCell.Row)))).Interior.ColorIndex = 3
        ElseIf MyCell.Value Like "*Фильм*" Then
            Range(Replace(strRange, "#", Trim(Str(MyCell.Row)))).Interior.ColorIndex = 4
        ElseIf MyCell.Value = "" Then
            Range(Replace(strRange, "#", Trim(Str(MyCell.Row)))).Interior.ColorIndex = xlNone
        Else
            Range(Replace(strRange, "#", Trim(Str(MyCell.Row)))).Interior.ColorIndex = 5
        End If
    Next
End Sub
30K
02 августа 2007 года
Etalon
10 / / 30.07.2007
Спасибо, Host.
Опс а чето его не видно в запусках макрасов :(
6.4K
02 августа 2007 года
Host
122 / / 22.09.2005
Цитата: Etalon
Спасибо, Host.
Опс а чето его не видно в запусках макрасов :(


Помести в макрос в глобальный модуль, а не в модуль листа

30K
02 августа 2007 года
Etalon
10 / / 30.07.2007
Цитата: Host
Помести в макрос в глобальный модуль, а не в модуль листа



Ну это все на этом мои познания исякли. Что означает глобальный модуль?:mad:

30K
03 августа 2007 года
Etalon
10 / / 30.07.2007
Огромное спасибо Host получилась искомая задача.
Код чуть позже выложу и расскажу, что и почем. Спасибо Hostу:)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог