VBA для Excel
1) как найти последнюю левую ячейку на листе
2) можно ли выделить строку, зная адрес ячейки, если помогите:)
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&
Выделяем всю строку, зная адрес ячейки
А для активной ячейки так
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
ActiveCell.SpecialCells(xlLastCell).Select
Работает только если данные на лист вносились без удалений (вернее очистки крайних строк и столбцов).
Эксель запоминает такие ячейки (самые крайние, в которых данные "чистились").
Извините что влез в данную дискуцию, но уменя то же вопрос по Exele.
'Указывает, что переменная 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?
Подскажите умные гуру :)
Вы хотите в столбце H найти значения, которые стоят в A1:H30? Могу поспорить, что значение из ячейки H1, будет найдено в столбце H.
несколько вопросов
1. вданном случаи диапазон задается физический. как сделать определеный диапозон A1:H30?
Set rngRange = Range("A1:H30")
2. принаждение ячейки с искомой величины (фильм, книга, журнал), ячейка окрашиваеться в определенный заданный цвет. как сделать поиск искомой велечены в определенном столбце(Columns H:H)?
Нахождение ячейки и окраска в заданный цвет:
Set rngRange = Range("H:H")
rngRange.Find("Книга", SearchOrder:=xlByColumns, _
LookIn:=xlValues).Interior.ColorIndex = 3
3.как сделать, чтобы не ячейка окрашивалась в определенный цвет, а изменялся цвет строки при найденой искомой величине в столбце H?
Подскажите умные гуру :)
То же, только окраска строки:
Set rngRange = Range("H:H")
Rows(rngRange.Find("Книга", SearchOrder:=xlByColumns, _
LookIn:=xlValues).Row).Interior.ColorIndex = 3
То же, только окраска строки:
Set rngRange = Range("H:H")
Rows(rngRange.Find("Книга", SearchOrder:=xlByColumns, _
LookIn:=xlValues).Row).Interior.ColorIndex = 3
Спасибо огромное. Теперь через цикл можно сделать поиск и окрас строки в определенном столбце, но вопрос:(
Set rngRange = Range("A1:H30")
если задан диапазон А1:Н30 то почему не красится строка именно в этом диапазоне?
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). Как бы все условие заданы наверно.....
Вы хотите в столбце H найти значения, которые стоят в A1:H30? Могу поспорить, что значение из ячейки H1, будет найдено в столбце H.
Из выше изложенного в посте №5 для поиска заначения *Книга*, надо выделять диапазон A1:Н30 и тогда ячейка будет выделяться там где будет найденно данное значение.
Если по изложенному:
Set rngRange = Range("H:H")
rngRange.Find("Книга", SearchOrder:=xlByColumns, _
LookIn:=xlValues).Interior.ColorIndex = 3
то должно именно в столбце Н искать значение и изменять цвет в яцейки, посколько значение *Книга* может встречать в любой ячейки заданного диапазона А1:Н30
Мда только из всего что было не получается или я не так использую циклы или где синтаксическая ошибка :(
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
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
Потому что у диапазона в поле Row записано только начало диапазона.
Если надо закрасить весь диапазон, необходимо определить его окончание:
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
For Each rngRange In Selection
Как эту строку прочитает интерпретатор VBA:
"Для каждого столбца "H" в текущем выделении"
А теперь посмотри, где ты делаеш выделение? и сколько столбцев в этом выделении?
"Если значение столбца "H" похоже на строку "*Книг*", тогда делать что-то..."
Какое значение у тебя в столбце "H"?
Теперь понятнее. Тебе надо что-то на подобие этого:
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
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 и тд) так и с другими значениями Фильм Журнал и тд.
Если надо закрасить весь диапазон, необходимо определить его окончание:
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
Но ведь можно и прописать определенный диапазон к примеру:
А в этом - число типа Long
Снова Range:
А теперь сам скажи, есть ли у типа данных Long свойство Interior и в каком случае ты сможеш изменить цвет?;)
Ну насколько я помню из школьной программы :) Long - это численный тип данных.
Следовательно
Практически использовать Long без значения в числе не возможно, но если задать значение в число то.....:confused:
Host спасибо тебе за наставления, но VBA я не силен и поэтому обратился за советом.
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
Народ подскажите как тут или по другому сделать, что бы изменялся цвет не ячейки, а строки в определеном диапазоне (А:Н)??
Например так:
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
Опс а чето его не видно в запусках макрасов :(
Опс а чето его не видно в запусках макрасов :(
Помести в макрос в глобальный модуль, а не в модуль листа
Ну это все на этом мои познания исякли. Что означает глобальный модуль?:mad:
Код чуть позже выложу и расскажу, что и почем. Спасибо Hostу:)