 |
on-line-teaching.com Онлайн курсы MS Office: Word, Excell. Как сделать сайт: HTML, JS, PHP
|
Предыдущая тема :: Следующая тема
|
Автор |
Сообщение |
velas Prizivnik - draftee

Зарегистрирован: 07.04.2009 Сообщения: 5
|
Добавлено: Вт Апр 07, 2009 2:34 pm Заголовок сообщения: VBA и Exel |
|
|
Подскажите пожалуйста. Есть пользовательская функция
MainFunction(A1:A10 as ???) as variant
dim Col() as variant
dim result as double
.
.
.
MainFunction = result
end function
Как из заданного диапазона (не выделенного) передать значения в массив Col
Зараннее благодарен |
|
Вернуться к началу |
|
 |
Евгений Prizivnik - draftee

Зарегистрирован: 18.03.2009 Сообщения: 6 Откуда: Москва
|
Добавлено: Ср Апр 29, 2009 8:57 am Заголовок сообщения: |
|
|
не совсем ясен вопрос. Исходя из приведенного кода, у вас используется динамический массив, а диапазон значений - столбец. Так? Тогда для случая А1:А10 получим
Код: |
Dim Col(), i%
For i = 1 To 10
ReDim Preserve Col(i)
Col(i) = Range("A" & i).Value
Next i |
|
|
Вернуться к началу |
|
 |
velas Prizivnik - draftee

Зарегистрирован: 07.04.2009 Сообщения: 5
|
Добавлено: Пн Май 04, 2009 8:28 am Заголовок сообщения: |
|
|
Спасибо за ответ, задачку решил вот так, но чтобы совсем стала универсальной (региональные стандарты и т.д.) необходимо вскрыть родную библиотеку макросов EXEl или писать собственные DLL
Attribute VB_Name = "Geo"
Option Explicit
Option Base 1
'Поиск максимального по модулю значения в массиве
Function FindAbsMax(Rng As Range) As Variant
Const Zerro As Integer = 0
Const One As Integer = 1
Const NillStr As String = ""
Dim iCol As Long
Dim iRow As Long
Dim CountRowData As Long
Dim CountColData As Long
Dim Data() As Variant
Dim Result As Double
Dim iRowResult As Long
Dim iColResult As Long
'RangeTxt = Rng.Address(rowAbsolute:=False, ColumnAbsolute:=False)
CountRowData = Rng.Rows.Count
CountColData = Rng.Columns.Count
If (CountColData = 1) And (CountRowData = 1) Then
FindAbsMax = "Err Is not Array"
Exit Function
End If
ReDim Data(CountRowData, CountColData)
Data = Rng.Value
iColResult = One
iRowResult = One
Result = Zerro
For iRow = One To CountRowData
For iCol = One To CountColData
If IsNumeric(Data(iRow, iCol)) And (Data(iRow, One) <> NillStr) Then
If Abs(Data(iRow, iCol)) >= Result Then
Result = Abs(Data(iRow, iCol))
iRowResult = iRow
iColResult = iCol
End If
End If
Next iCol
Next iRow
FindAbsMax = Data(iRowResult, iColResult)
End Function
'Поиск минимального по модулю значения в массиве
Function FindAbsMin(Rng As Range) As Variant
Const Zerro As Integer = 0
Const One As Integer = 1
Const NillStr As String = ""
Dim iCol As Long
Dim iRow As Long
Dim CountRowData As Long
Dim CountColData As Long
Dim Data() As Variant
Dim Result As Double
Dim iRowResult As Long
Dim iColResult As Long
'RangeTxt = Rng.Address(rowAbsolute:=False, ColumnAbsolute:=False)
CountRowData = Rng.Rows.Count
CountColData = Rng.Columns.Count
If (CountColData = 1) And (CountRowData = 1) Then
FindAbsMin = "Err Is not Array"
Exit Function
End If
ReDim Data(CountRowData, CountColData)
Data = Rng.Value
iColResult = One
iRowResult = One
Result = Zerro
For iRow = One To CountRowData
For iCol = One To CountColData
If IsNumeric(Data(iRow, iCol)) And (Data(iRow, One) <> NillStr) Then
If Abs(Data(iRow, iCol)) <= Result Then
Result = Abs(Data(iRow, iCol))
iRowResult = iRow
iColResult = iCol
End If
End If
Next iCol
Next iRow
FindAbsMin = Data(iRowResult, iColResult)
End Function |
|
Вернуться к началу |
|
 |
Женя Львов Prizivnik - draftee

Зарегистрирован: 20.08.2009 Сообщения: 2 Откуда: Украина
|
Добавлено: Чт Авг 20, 2009 10:38 am Заголовок сообщения: |
|
|
ПОМОГИТЕ ПОЖАЛУЙСТА ПО VBA.
В ЯЧЕЙКУ ЕКСЕЛЬ НУЖНО ВНЕСТИ ТАКУЮ ФУНКЦИЮ через макрос:
=СМЕТА("701 [,1112]";A;B)
Когда я ее вношу, то она записивается как строка и необходимо щелкать по ячейке. как сделать, чтоб ячейка воспринимала её как формулу???????? спасибо! |
|
Вернуться к началу |
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|