Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.05.2010, 08:20   #1
savraska
Пользователь
 
Регистрация: 18.04.2010
Сообщений: 37
По умолчанию Функция с параметром диапазоном

Вычислить общий делитель значений диапазона(общего делителя может и не быть)
Option Base 1
Function rabb(diap)
n = diap.Rows.Count
m = diap.Columns.Count

s = 0
For t = 1 To 10
For i = 1 To n
For j = 1 To m
If diap(i, j) Mod t = 0 Then s = t
Next j
Next i
Next t
rabb = s
End Function
savraska вне форума Ответить с цитированием
Старый 26.05.2010, 08:58   #2
Skif-F
Форумчанин
 
Регистрация: 24.03.2010
Сообщений: 349
По умолчанию

Код:
Option Base 1
Function rabb(diap)
  n = diap.Rows.Count
  m = diap.Columns.Count

  s = 0
  For t = 1 To 10  'Перебор возможных общих делителей'
    For i = 1 To n  'Перебор диапазона'
      For j = 1 To m
         If diap(i, j) Mod t = 0 Then s = s+1 'Надо, чтобы все числа делились на ОД'
      Next j
    Next i
    if s = n*m then exit for 'Нашли искомое'
    s = 0  'Подготовка к следующему проходу'
  Next t
  rabb = s  'Если ОД не найден, то на выходе s=0'
End Function
Нет нерешаемых задач - есть недостаток времени и данных!
Skif-F вне форума Ответить с цитированием
Старый 26.05.2010, 09:43   #3
savraska
Пользователь
 
Регистрация: 18.04.2010
Сообщений: 37
По умолчанию

Похоже что то не так...у меня программа выдает сколько чисел задано, но не делитель...
savraska вне форума Ответить с цитированием
Старый 26.05.2010, 09:51   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию



Код:
Function nod(a As Long, b As Long) As Long
    While a <> 0 And b <> 0
        If a >= b Then a = a Mod b Else b = b Mod a
    Wend
    nod = a + b
End Function

Function ОбщийДелитель(diap As Range) As Long
    Dim res As Long
    ОбщийДелитель = 1000000000#
    For Each n In diap.Value
        For Each m In diap.Value
            If Val(n) > 0 And Val(m) > 0 Then
                res = nod(Val(n), Val(m))
                If res < ОбщийДелитель Then ОбщийДелитель = res
            End If
        Next m
    Next n
    If ОбщийДелитель = 1000000000# Then ОбщийДелитель = 1
End Function

Sub test()
    MsgBox "Общий делитель диапазона A1:E5 равен " & _
           ОбщийДелитель([A1:E5]), vbInformation
End Sub
EducatedFool вне форума Ответить с цитированием
Старый 26.05.2010, 11:14   #5
Skif-F
Форумчанин
 
Регистрация: 24.03.2010
Сообщений: 349
По умолчанию

Прошу прощения, вот так:
Код:
Option Base 1
Function rabb(diap As Range) As Integer
  Dim n As Integer, m As Integer, t As Integer, i As Integer, j As Integer, s As Integer
  n = diap.Rows.Count
  m = diap.Columns.Count

  For t = 1 To 10  'Перебор возможных общих делителей'
    s = 0  'Подготовка к следующему проходу'
    For i = 1 To n  'Перебор диапазона'
      For j = 1 To m
         If diap(i, j) Mod t = 0 Then s = s+1 'Надо, чтобы все числа делились на ОД'
      Next j
    Next i
    if s = n*m then exit for 'Нашли искомое'
  Next t
  if s = n*m then
    rabb = t
  else
    rabb = 1  
  end if
End Function
Рекомендую обратить внимание на вариант EducatedFool'а. Я же просто откорректировал Ваше решение
Нет нерешаемых задач - есть недостаток времени и данных!
Skif-F вне форума Ответить с цитированием
Старый 26.05.2010, 13:35   #6
savraska
Пользователь
 
Регистрация: 18.04.2010
Сообщений: 37
По умолчанию

спасибо большое,мне нужно было именно мое откорректированное решение....
savraska вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа с диапазоном ячеек? panzergto Microsoft Office Excel 4 01.04.2010 21:25
Проблема с диапазоном дат Yur@ БД в Delphi 7 16.12.2009 20:15
Работа с именным диапазоном tae1980 Microsoft Office Excel 32 21.08.2009 11:10
Пользовательская функция с диапазоном в качестве параметра SanSanblch Microsoft Office Excel 2 29.05.2009 17:37
работа с выделенным диапазоном nastya007 Microsoft Office Excel 5 13.03.2009 08:33