www.ПЕРВЫЕ ШАГИ.ru :: Шаг 71 - Нефть, таблицы и как делать не надо, продолжение

VBA

Шаг 71 - Нефть, таблицы и как делать не надо, продолжение

Итак, теперь нам нужно в соответствии с номером скважины делать выборку. Заведен еще один массив.

Dim allbore As Range 		' здесь будет храниться диапазон скважин
Dim alldata As Collection 	' это набор элементов
Dim borename As New Collection 	' это набор скважи

Напишем функцию которая будет заполнять коллекцию по именам скважины:

Sub SelectBore(s As String)
	Set alldata = New Collection
	For Each bore In allbore ' бежим по диапазону скважин
		bore.Select  ' выделяем ячейку
		If bore.Value = s Then  ' если это та скважина
			ActiveCell.Offset(0, 1).Select ' вправо
			alldata.Add (ActiveCell.Value) ' поместить в коллекцию
		End If
	Next bore
End Sub

Пробежим по всем скважинам и возмем значение из правой колонки поместив его а массив.

Sub FindOil()
	Set allbore = Range("A:A") ' выбрать колонку
	' только с данными
	Set allbore = Range(allbore.Columns.End(xlUp).Address, allbore.Columns.End(xlDown).Address)
	allbore.Select ' выделить
	For Each bore In allbore ' бежим по диапазону скважин
		bore.Select  ' выделяем ячейку
		If FindElement(bore.Value) = True Then ' если кважины нет в коллекции
			borename.Add (bore.Value)   ' добавить к коллекцию
		End If
	Next bore
	For Each elem In borename
		SelectBore (elem)
		Debug.Print (elem)
		For Each data In alldata	' пробежим по результату для того что бы
					' показать что массив заполнен
			Debug.Print (data)
		Next data
	Next elem
End Sub

В окне отладки можно увидеть, что массив заполнен значениями соответствующими скважинам на данный момент.

71_1.gif (2303 b)

Ну, а теперь можно исследовать этот массив на пример решения какая скважина. Вообщем то на самом деле я просто повторил работу БД. Сделал выборку. Давайте попробуем сделать простой выводы. Например если упоминается нефть но она нефтенасышенная иначе пусто.

Sub FindOil()

.....................

	For Each elem In borename
		SelectBore (elem)
		Debug.Print (elem)
		For Each data In alldata	' пробежим по результату для того что бы
					' показать что массив заполнен
			'Debug.Print (data)
  			If data = "Нефть" Then
				MsgBox "Oil !!!!!! " + elem
				Exit For
			End If
		Next data
	Next elem
End Sub

При работе этой функции будет два окна для скважины с нефтью.

71_2.gif (5184 b)


Загрузить проект | Предыдущий Шаг | Следующий Шаг
Автор Каев Артем.