Повторный поиск и поиск всех значений



Методы 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; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!