Повторный поиск и поиск всех значений
Методы FindNext и FindPrevious объекта Range реализуют повторный вызов метода Find для продолжения специфицированного поиска. Первый из методов производит поиск следующей ячейки, а второй — поиск предыдущей, удовлетворяющей объявленным критериям поиска.
FindNext(After)
FindPrevious(After)
Здесь After — необязательный параметр, указывающий на ячейку, после которой надо производить поиск.
В качестве примера приведем код (листинг 5.55), который производит поиск подстроки "bhv" без учета регистра в диапазоне А1:А10. Все найденные ячейки заливаются желтым цветом.
Листинг 5.55. Поиск всех значений с цветовой индикацией найденных ячеек
Sub DemoFind()
Dim firstAddress As String
Dim rng As Range
Set rng = Range("A1:A10").Find(What:="MS", LookIn:=xlValues, _
LookAt:=xlPart, MatchCase:=False)
If Not (rng Is Nothing) Then
firstAddress = rng.Address
Do
rng.Interior.Color = RGB(255, 255, 0)
Set rng = Range("A1:A10").FindNext(rng)
Loop While Not (rng Is Nothing) And rng.Address <> firstAddress
End If
End Sub
Поиск по формату
Метод Find позволяет искать не только ячейки со специфицированным значением, но и ячейки, отформатированные указанным образом. Информация об искомом формате инкапсулируется в объекте CellFormat, возвращаемом свойством FindFormat объекта Application. Пример из листинга 5.56 демонстрирует поиск по формату в диапазоне А1:А100, при этом ввод значений в ячейки А2, А5 и А8 и их форматирование производятся программно.
Листинг 5.56. Поиск по формату
Sub SearchCellFormat()
Range("A2").Value = 2:
Range("A2").Select
Selection.Interior.Colorlndex = 40
Selection.Interior.Pattern = xlPatternLightDown
|
|
Range("A2").Select Selection.Copy
Range("A5").Value = 5: Range("A5").Select
Selection.PasteSpecial Paste:=xlPasteFormats
Range("A8").Value = "": Range("A8").Select
Selection.PasteSpecial Paste:=xlPasteFormats
Application.CutCopyMode = False
Dim CellF As CellFormat
Set CellF = Application.FindFormat
CellF.Clear
CellF.Interior.Colorlndex =40
CellF.Interior.Pattern = xlPatternLightDown
Dim Rcell As Range, OneCell As Range
Dim firstAddress As String
Set Rcell = Range("A1:A100")
Set OneCell = Rcell.Find(What:="", SearchFormat:=CellF)
If Not OneCell Is Nothing Then
firstAddress = OneCell.Address
Do
MsgBox ("Найдена ячейка с указанным форматом - " _
& OneCell.Address)
Set OneCell = Rcell.Find(What:="", After:OneCell, _
SearchFormat:=CellF)
Loop While Not (OneCell.Address = firstAddress)
Else
MsgBox ("Ячейки с указанным форматом не найдены в диапазоне - " _
& Rcell.Address)
End If
End Sub
Замена значений
Метод Replace объекта Range производит замену в указанном диапазоне.
Replace(What, Replacement, LookAt, SearchOrder, MatchCase, MatchByte, SearchFormat, ReplaceFormat)
Здесь:
r What — обязательный параметр, задающий строку, которая будет заменяться;
r Replacement — обязательный параметр, задающий строку, которой будет производиться замещение;
r LookAt — необязательный параметр, указывающий, как надо искать. Допустимыми значениями являются следующие постоянные xlLookAt:
xlWhole и xlPart;
r SearchOrder — необязательный параметр, задающий порядок просмотра диапазона. Допустимыми значениями являются следующие постоянные XlSearchOrder:
|
|
xlByRows и xlByColumnsJ
r SearchDirection — необязательный параметр, определяющий направление просмотра. Допустимыми значениями являются следующие постоянные XlSearchDirection:
xlNext и xlPrevious;
r MatchCase — необязательный параметр, указывающий, надо ли при поиске учитывать регистр букв;
r MatchByte — необязательный параметр, применяется редко;
r SearchFormat — необязательный параметр, задающий формат поиска;
r ReplaceFormat — необязательный параметр, задающий формат замены.
Например, в следующем коде в столбце А строка MS заменяется строкой Microsoft.
Columns("A").Replace What:="MS", Replacement:="Microsoft", _
SearchOrder:=xlByColumns, MatchCase:=True
С помощью метода Replace в ячейках можно заменять не только значения, но и формат. Код листинга 5.57 демонтрирует, как такая замена реализуется на практике.
Листинг 5.57. Замена формата
Sub ReplaceCellFormat()
Range("А2").Value = 2: Range("A2").Select
Selection.Interior.Colorlndex = 40
Selection.Interior.Pattern = xlPatternLightDown
Range("A2").Select: Selection.Copy
Range("A5").Value = 5: Range("A5").Select
Selection.PasteSpecial Paste:=xlPasteFormats
Range("A8").Value = "": Range("A8").Select
Selection.PasteSpecial Paste:=xlPasteFormats
Application.CutCopyMode = False
Dim CellF As CellFormat
Set CellF = Application.FindFormat
CellF.Clear
CellF.Interior.Colorlndex = 40
CellF.Interior.Pattern = xlPatternLightDown
Dim CellR As CellFormat
Set CellR = Application.ReplaceFormat
|
|
CellR.Clear
CellR.Interior.Colorlndex = 10
CellR.Interior.Pattern = xlPatternUp
Dim Rcell As Range
Set Rcell = Range("A1:A10")
Rcell.Replace What:="", Replacements"", _
SearchFormat:=True, ReplaceFormat:=True
MsgBox ("Заменен формат в ячейках - " & Rcell.Address)
End Sub
Подбор параметра и решение
Равененя с одной неизвестной
Метод Goa lS eek объекта Range подбирает значение параметра (неизвестной величины), являющееся решением уравнения с одной переменной. Предполагается, что уравнение приведено к виду: правая часть уравнения является постоянной, не зависящей от параметра, параметр входит только в левую часть уравнения, например,
х3 - Зх - 5 = 0.
Метод GoalSeek программирует выполнение команды Сервис ►Подбор параметра. Этот метод вычисляет корень, используя метод последовательных приближений, результат выполнения которого, вообще говоря, зависит от начального приближения. Поэтому для корректности нахождения корня надо позаботиться о корректном указании этого начального приближения.
expression.GoalSeek(Goal, ChangingCell)
Здесь:
r expression — ячейка, в которую введена формула, являющаяся правой частью решаемого уравнения. В этой формуле роль параметра (неизвестной величины) играет ссылка на ячейку, указанную в аргументе ChangingCell;
r Goal — обязательный параметр, задающий значение левой части решаемого уравнения, не содержащей параметра;
|
|
r ChangingCell — обязательный параметр, указывающий ссылку на ячейку, отведенную под параметр (неизвестную величину). Значение, введенное в данную ячейку до активизации метода GoalSeek, рассматривается как начальное приближение к искомому корню. Значение, возвращаемое в эту ячейку после выполнения метода GoalSeek, является найденным приближением к корню.
Точность, с которой находится корень и предельно допустимое число итераций, используемых для нахождения корня, устанавливается свойствами MaxChange и Maxlterations объекта Application. Например, определение корня с точностью до 0,0001 максимум за 1000 итераций устанавливается инструкцией:
With Application
.Maxlterations = 1000
.MaxChange = 0.0001
End With
Метод GoalSeek возвращает значение True, если решение найдено, и значение False — в противном случае.
Например, в коде листинга 5.58 происходит поиск корня уравнения х3 - Зх — 5 = 0 при начальном приближении 1 (рис. 5.9).
Sub DemoGoalSeek()
Range("A1").Name = "x"
Range("A1").Value = 1
Range("B1").Formula = "=х^3-3*х-5"
If Range("B1").GoaiSeek(Goal:=0, ChangingCeli:=Range("x")) Then
MsgBox "Корень: " & Range("A1").Value
Else
MsgBox "Корень не найден"
End If
End Sub
Рис. 5.9. Решение уравнения
Дата добавления: 2019-02-12; просмотров: 156; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!