Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: PRODUCT в VBA Добавлено: 31.03.07 02:02  

Автор вопроса:  Павел
проблема такая: необходимо осуществть в vba экселевскую формулу PRODUCT (произведение), пытаюсь это реализовать так:

Sub two()

Dim x, e As Integer
Dim i, j As Variant
Dim p As Variant
e = 1
For j = 1 To 10
p = Cells(e, j)
For i = 1 To 10
p(i) = p(i) * Cells(e, j).Value
Next i
Next j

MsgBox "" & p

End Sub

к сожалению не работает, видимо проблема в параметре p(i)
может быть это лучше сделать через ARRAY ? но вот как засовывать каждый раз новое значение в ARRAY при последующим i я не знаю. подскажите, пожалуйста, что-нибудь.

Ответить

  Ответы Всего ответов: 5  

Номер ответа: 1
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #1
Добавлено: 31.03.07 02:38
видимо проблема в параметре p(i) [/QUOTEтак и есть

это не массив, а используется как массив

For j = 1 To 10
p = Cells(e, j)
For i = 1 To 10
p(i) = p(i) * Cells(e, j).Value
Next i

абра кадабра???

For j = 1 To 10
p = Cells(e, j)
здесь мы как бы проходим по 10ти столбцам в первой строчке...

полагаю - затем надо пройтись также и по строкам

dim n as single

n = 1

For j = 1 To 10
For i = 1 To 10

p = Cells(i, j).Value
n = p*n

Next i
Next j

MsgBox n

Ответить

Номер ответа: 2
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #2
Добавлено: 31.03.07 02:42
если конечно их все (10*10) 100 значений перемножить нужно было , то так:

dim n as single

n = 1

For j = 1 To 10
For i = 1 To 10

p = Cells(i, j).Value
n = p*n

Next i
Next j

MsgBox n


А красивый у меня первый пост получился,)), гы-гы, цветной

Ответить

Номер ответа: 3
Автор ответа:
 Павел



Вопросов: 2
Ответов: 1
 Профиль | | #3 Добавлено: 31.03.07 12:10
большое спасибо! мне и в правду надо перемножать очень большие числа.

а что вы можете сказать об ARRAY, я ходил к своему преподу, он сказал, что тут лучше делать через него, нежели через циклы, но он не утверждает, а так думает.

Ответить

Номер ответа: 4
Автор ответа:
 ADSemenov.ru



Вопросов: 5
Ответов: 276
 Web-сайт: www.adsemenov.ru
 Профиль | | #4
Добавлено: 31.03.07 14:42
____ Что-то захотелось поучаствовать.
____ Я так понял, что надо сделать копию стандартной функции листа Excell. У неё есть возможности, которые здесь не рассматриваются. —
____ 1. Количество параметров не определено.
____ 2. В качестве любого параметра может быть не число, а ссылка на ячейку.
____ 3. В качестве любого параметра может быть и не число и не ссылка на ячейку, а ссылка на диапазон ячеек.

____ Предлагаю следующий вариант функции, которую следует поместить в отдельный модуль (чтобы она появилась в выборе функций листа) и которая полностью идентична стандартной:
Public Function mult(ParamArray p()) As Double
  Dim i As Long, j As Long, e

  If IsMissing(p) Then                            ' Параметры есть? — Нет.
    mult = Null                                   ' Результат не определён.
  Else                                            ' Параметры есть? — Да.
    mult = 1                                      ' Начальное значение произведения.
    For Each e In p                               ' Цикл перебора параметров.
      If IsObject(e) Then                         ' Параметр — ссылка на объект? — Да.
      
        For i = 1 To e.Columns.Count              ' Цикл перебора диапазона ячеек.
        For j = 1 To e.Rows.Count
          If IsNumeric(e.Cells(i, j).Value) Then  ' В ячейке число? — Да.
            mult = mult * e.Cells(i, j).Value
          Else                                    ' В ячейке число? — Нет.
            mult = Null                           ' Результат не определён.
            Exit Function                         ' Завершение функции.
          End If
        Next: Next
        
      ElseIf IsNumeric(e) Then                    ' Параметр — число? — Да.
        mult = mult * e
      Else                                        ' Параметр не число и не объект? — Да.
        mult = Null                               ' Результат не определён.
      End If
    Next                                          ' Конец цикла перебора параметров.
  End If
End Function

Ответить

Номер ответа: 5
Автор ответа:
 ADSemenov.ru



Вопросов: 5
Ответов: 276
 Web-сайт: www.adsemenov.ru
 Профиль | | #5
Добавлено: 31.03.07 14:45
____ Исправляю ошибку:
Public Function mult(ParamArray p()) As Double
  Dim i As Long, j As Long, e

  If IsMissing(p) Then                            ' Параметры есть? — Нет.
    mult = Null                                   ' Результат не определён.
  Else                                            ' Параметры есть? — Да.
    mult = 1                                      ' Начальное значение произведения.
    For Each e In p                               ' Цикл перебора параметров.
      If IsObject(e) Then                         ' Параметр — ссылка на объект? — Да.
      
        For i = 1 To e.Columns.Count              ' Цикл перебора диапазона ячеек.
        For j = 1 To e.Rows.Count
          If IsNumeric(e.Cells(i, j).Value) Then  ' В ячейке число? — Да.
            mult = mult * e.Cells(i, j).Value
          Else                                    ' В ячейке число? — Нет.
            mult = Null                           ' Результат не определён.
            Exit Function                         ' Завершение функции.
          End If
        Next: Next
        
      ElseIf IsNumeric(e) Then                    ' Параметр — число? — Да.
        mult = mult * e
      Else                                        ' Параметр не число и не объект? — Да.
        mult = Null                               ' Результат не определён.
        Exit Function                             ' Завершение функции.
      End If
    Next                                          ' Конец цикла перебора параметров.
  End If
End Function

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам