Название темы должно отражать суть задачи.
Темы типа "ПОМОГИТЕ!!!", "Срочно!" и т.п. будут удаляться без объяснения причин
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Excel.Sheet.8.Separate]
@="Microsoft Excel Worksheet (Separate Instance)"
[HKEY_CLASSES_ROOT\Excel.Sheet.8.Separate\shell]
[HKEY_CLASSES_ROOT\Excel.Sheet.8.Separate\shell\open]
[HKEY_CLASSES_ROOT\Excel.Sheet.8.Separate\shell\open\command]
@="\"C:\\Program Files (x86)\\Microsoft Office\\OFFICE11\\EXCEL.EXE\" /x \"%1\""
'dd - это даты. Значит объявлять надо тоже как даты, чтобы сравнение шло в итоге корректно
Function define_stat(ws As String, dd As Date, dta_rng As Range, pls_tank As String, pls_salt, option1 As String, def_ As String)
On Error Resume Next
Dim mass_(100) As Variant
Dim result As Double
j = -1
For Each r In dta_rng
pos = Split(r.Address, "$")
'у объекта Range есть свойства Row и Column, которые отвечают за номер строки и столбца.
' поэтому их и надо ипользовать
If r.Row >= 3 Then
If r.Value = "" Then
rng_fin = CStr(mass_(0)) & ":" & CStr(mass_(j))
'Здесь можно задать дополнительные функции для вывода данных, например Average
If def_ = "max" Then result_ = WorksheetFunction.Max(Sheets(ws).Range(rng_fin))
If def_ = "aver" Then result_ = WorksheetFunction.average(Sheets(ws).Range(rng_fin))
If def_ = "min" Then result_ = WorksheetFunction.Min(Sheets(ws).Range(rng_fin))
'Debug.Print result_
GoTo stp
End If
a = Split(r.Value, " ")
dd_now = CDate(a(0))
If dd_now = dd Then
'явно указываем поиск по значениям и по части ячейки (LookIn и lookat)
w = Sheets(ws).Range(pls_tank & CInt(pos(2))).Find(option1, LookIn:=xlValues, lookat:=xlPart) 'признак резервуаров
If w <> "" Then
j = j + 1
mass_(j) = Sheets(ws).Range(pls_salt & CInt(pos(2))).Address 'столбец, в котором находятся значения солей
'Debug.Print mass_(j)
'Debug.Print j
End If
End If
End If
Next
stp:
define_stat = result_ 'вывод результата функции
End Function