2 / 2 / 0
Регистрация: 01.05.2017
Сообщений: 12
1

Функция в VBA

28.05.2017, 13:45. Показов 547. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
помогите найти ошибку

z1.txt
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.05.2017, 13:45
Ответы с готовыми решениями:

функция в VBA
Помогите,пожалуйста, разобраться с заданием=) f(x)=0 на интервале -10 до 10(разделить на 30...

Функция Vba
Имеется пользовательская функция, которая по выбранному диапазону ячеек считает среднее значение...

VBA. Функция. If
Как мне сделать на VBA такую функцию, чтобы если она получила в качестве параметра три цифры (...

Функция S в VBA
Прикрепил архив, в котором есть почти решенная задача. Нужно еще с помощью функции суммы, сложить...

14
414 / 262 / 82
Регистрация: 27.10.2012
Сообщений: 860
28.05.2017, 19:40 2
Может надо было написать текст задания. И код выложить в сообщение и оформить его соответствующими тегами.
1
2 / 2 / 0
Регистрация: 01.05.2017
Сообщений: 12
28.05.2017, 19:44  [ТС] 3
Даны массивы А1, … , А20
В1, … , В20
Поменять местами Аmin и В max .



Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
Public Sub Laba_SH()
 
Dim a(20) As Integer
Dim b(20) As Integer
 
 
For i = 1 To 20
    a(i) = Worksheets("Sheet1").Cells(i, 2).Value
    b(i) = Worksheets("Sheet1").Cells(i, 5).Value
Next i
 
a_min = a(1)
b_max = b(1)
n_min = 1
n_max = 1
 
For i = 1 To 20
    If a(i) < a_min Then
        a_min = a(i)
        n_min = i
    
    End If
    
    If b(i) > b_max Then
        b_max = b(i)
        n_max = i
    End If
        
Next i
 
 
Cells(8, 7) = z1
Cells(9, 7) = z2
 
Cells(2, 7) = "Минимальное значение а = " & a_min
Cells(3, 7) = "Порядковый номер  а_min = " & n_min
Cells(5, 7) = "Максимальное значение b = " & b_max
Cells(6, 7) = "Порядковый номер b_max = " & n_max
 
 
 
End Sub
 
 
Function Zamena(a As Integer, b As Integer) As Integer
 
n = a_min: a(n_min) = b(n_max): b(n_max) = n
 
Cells(n_min, 2) = b_max: Cells(n_max, 5) = a_min
 
z1 = a_min
z2 = b_max
 
Cells(9, 7) = z1
Cells(10, 7) = z2
 
End Function
0
5561 / 1367 / 150
Регистрация: 08.02.2009
Сообщений: 4,107
Записей в блоге: 30
28.05.2017, 20:02 4
Для начала так:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
Option Base 1
 
Public Sub Laba_SH()
 
Dim a(20) As Integer
Dim b(20) As Integer
    
    
    For i = 1 To 20
        a(i) = Worksheets("Sheet 1").Cells(i, 2).Value '1 вместо "Sheet 1"
        b(i) = Worksheets("Sheet 1").Cells(i, 5).Value '1 вместо "Sheet 1"
    Next i
    
    a_min = a(1)
    b_max = b(1)
    n_min = 1
    n_max = 1
    
    For i = 1 To 20
        If a(i) < a_min Then
            a_min = a(i)
            n_min = i
        End If
        
        If b(i) > b_max Then
        b_max = b(i)
        n_max = i
        End If
    Next i
    
    
    Cells(8, 7) = z1
    Cells(9, 7) = z2
    
    Cells(2, 7) = "Минимальное значение а = " & a_min
    Cells(3, 7) = "Порядковый номер а_min = " & n_min
    Cells(5, 7) = "Максимальное значение b = " & b_max
    Cells(6, 7) = "Порядковый номер b_max = " & n_max
End Function
 
 
Function Zamena(a As Integer, b As Integer) As Integer
    n = a_min: a(n_min) = b(n_max): b(n_max) = n
    
    Cells(n_min, 2) = b_max: Cells(n_max, 5) = a_min
    
    z1 = a_min
    z2 = b_max
    
    Cells(9, 7) = z1
    Cells(10, 7) = z2
End Function
Добавлено через 1 минуту
Теперь уже можно смотреть, почему не работает…
0
2 / 2 / 0
Регистрация: 01.05.2017
Сообщений: 12
28.05.2017, 20:12  [ТС] 5
Где же ошибка? Я, думаю что с функцией не могу разобраться.
0
5561 / 1367 / 150
Регистрация: 08.02.2009
Сообщений: 4,107
Записей в блоге: 30
28.05.2017, 20:13 6
У меня так почти всё работает — не прошло и получаса

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
Option Base 1
 
Public Sub Laba_SH()
 
Dim a(20) ' As Integer
Dim b(20) ' As Integer
    
    
    For i = 1 To 20
        a(i) = Worksheets(1).Cells(i, 2).Value '1 вместо "Sheet 1"
        b(i) = Worksheets(1).Cells(i, 5).Value '1 вместо "Sheet 1"
    Next i
    
    MsgBox "Массив a: " & Join(a) & vbCr & _
            "Массив b: " & Join(b)
    
    a_min = a(1)
    b_max = b(1)
    n_min = 1
    n_max = 1
    
    For i = 1 To 20
        If a(i) < a_min Then
            a_min = a(i)
            n_min = i
        End If
        
        If b(i) > b_max Then
            b_max = b(i)
            n_max = i
        End If
    Next i
    
    
    Cells(8, 7) = z1
    Cells(9, 7) = z2
    
    Cells(2, 7) = "Минимальное значение а = " & a_min
    Cells(3, 7) = "Порядковый номер а_min = " & n_min
    Cells(5, 7) = "Максимальное значение b = " & b_max
    Cells(6, 7) = "Порядковый номер b_max = " & n_max
End Sub
 
 
Function Zamena(a As Integer, b As Integer) As Integer
    n = a_min: a(n_min) = b(n_max): b(n_max) = n
    
    Cells(n_min, 2) = b_max: Cells(n_max, 5) = a_min
    
    z1 = a_min
    z2 = b_max
    
    Cells(9, 7) = z1
    Cells(10, 7) = z2
End Function
0
2 / 2 / 0
Регистрация: 01.05.2017
Сообщений: 12
28.05.2017, 20:21  [ТС] 7
Функция не работает. Функция должна выводить в определённое место выводить новые значение минимум и максимум.

Добавлено через 4 минуты
результат уже изменённых a_min и b_max нужно вывести в строку (9,7) и (10,7)
0
5561 / 1367 / 150
Регистрация: 08.02.2009
Сообщений: 4,107
Записей в блоге: 30
28.05.2017, 20:24 8
Это и так ясно — код вполне читабелен; появились новые комменты (и вообще, не спешите отвечать — не успеваю!):
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
Option Base 1
Option Explicit
 
Public Sub Laba_SH()
Dim i, a_min, b_max, n_min, n_max, z1, z2 'уж объявлять так объявлять - а не выборочно
Dim a(20) ' As Integer
Dim b(20) ' As Integer
    
    For i = 1 To 20
        a(i) = Worksheets(1).Cells(i, 2).Value '1 вместо "Sheet 1"
        b(i) = Worksheets(1).Cells(i, 5).Value '1 вместо "Sheet 1"
    Next i
    
    MsgBox "Массив a: " & Join(a) & vbCr & _
            "Массив b: " & Join(b)
    
    a_min = a(1)
    b_max = b(1)
    n_min = 1
    n_max = 1
    
    For i = 1 To 20
        If a(i) < a_min Then
            a_min = a(i)
            n_min = i
        End If
        
        If b(i) > b_max Then
            b_max = b(i)
            n_max = i
        End If
    Next i
    
Cells(8, 7) = z1 'это z1 нигде не вычислено (тем более в функции Замена: там z1 ДРУГОЕ)
Cells(9, 7) = z2 'это тоже (а так всё нормально пашет)
    
    Cells(2, 7) = "Минимальное значение а = " & a_min
    Cells(3, 7) = "Порядковый номер а_min = " & n_min
    Cells(5, 7) = "Максимальное значение b = " & b_max
    Cells(6, 7) = "Порядковый номер b_max = " & n_max
End Sub
 
 
Function Zamena(a As Integer, b As Integer) As Integer
    n = a_min: a(n_min) = b(n_max): b(n_max) = n
    
    Cells(n_min, 2) = b_max: Cells(n_max, 5) = a_min
    
    z1 = a_min
    z2 = b_max
    
    Cells(9, 7) = z1  'присваивается пу
    Cells(10, 7) = z2
End Function
0
2 / 2 / 0
Регистрация: 01.05.2017
Сообщений: 12
28.05.2017, 20:34  [ТС] 9
Смотри. Код вполне рабочий. Я, не догоняю как в строки (9, 7) и (10,7) вывести новые значение а_min и b_max. в процедуре я, должен вызвать функцию с изменениями и записать в определённую строку. Поэтому и я писал z1, но как ты. уже отметил там z1 другое
1
3866 / 2282 / 765
Регистрация: 02.11.2012
Сообщений: 6,023
28.05.2017, 20:37 10
Продублирую. Функция не может менять, выводить значения в другие ячейки.
По замене нужен макрос а не функция.
0
5561 / 1367 / 150
Регистрация: 08.02.2009
Сообщений: 4,107
Записей в блоге: 30
28.05.2017, 21:12 11
Цитата Сообщение от Farrukh1990 Посмотреть сообщение
Код вполне рабочий.
Ну замечательно! Вы кодер.

Объявил все переменные и добавил вызов функции, а также контрольный MsgBox (но с 7-й колонкой пока что-то не то):

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
Option Base 1
Option Explicit
Dim z1, z2, a_min, b_max, n_min, n_max ' As Integer
'вот где собака… z1 и z2, а также a_min, b_max, n_min, n_max общие для всего модуля!
 
Sub Laba_SH()
Dim i, Нечто  'Нечто - для вызова функции (функцию надо чему-то присваивать)
Dim a(20) ' As Integer ("контрольный" Join работает с типом Variant)
Dim b(20) ' As Integer
    
    For i = 1 To 20
        a(i) = Worksheets(1).Cells(i, 2).Value '1 вместо "Sheet 1"
        b(i) = Worksheets(1).Cells(i, 5).Value '1 вместо "Sheet 1"
    Next i
    
    MsgBox "Массив a: " & Join(a) & vbCr & "Массив b: " & Join(b)
    
    a_min = a(1)
    b_max = b(1)
    n_min = 1
    n_max = 1
    
    For i = 1 To 20
        If a(i) < a_min Then
            a_min = a(i)
            n_min = i
        End If
        
        If b(i) > b_max Then
            b_max = b(i)
            n_max = i
        End If
    Next i
    
    Нечто = Замена(a(n_min), b(n_max)) '!!! - вы просто забыли её ВЫЗВАТЬ
    
    Cells(8, 7) = z1
    Cells(9, 7) = z2
    
    Cells(2, 7) = "Минимальное значение а = " & a_min
    Cells(3, 7) = "Порядковый номер а_min = " & n_min
    Cells(5, 7) = "Максимальное значение b = " & b_max
    Cells(6, 7) = "Порядковый номер b_max = " & n_max
 
'    MsgBox "Новый массив a: " & Join(a) & vbCr & "Новый массив b: " & Join(b)
End Sub
 
 
Function Замена(ByVal a, ByVal b)     'As Integer (она ничего не возвращает)
Dim n
    n = a
    a = b
    b = n
    
    Cells(n_min, 2) = b
    Cells(n_max, 5) = a
    
    z1 = a
    z2 = b
    
    Cells(9, 7) = z1
    Cells(10, 7) = z2
End Function
Всё, перерыв дня 2 — за 1,5 ч с 19:40 в трёх соснах блуждать устал; тоже уже не догоняю
0
2 / 2 / 0
Регистрация: 01.05.2017
Сообщений: 12
28.05.2017, 21:24  [ТС] 12
Спасибо что, уделили время.
1
5561 / 1367 / 150
Регистрация: 08.02.2009
Сообщений: 4,107
Записей в блоге: 30
28.05.2017, 23:54 13
Цитата Сообщение от Farrukh1990 Посмотреть сообщение
результат уже изменённых a_min и b_max нужно вывести в строку (9,7) и (10,7)
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
Option Base 1
Option Explicit
Dim n_min, n_max 'n_min и n_max - индексы, общие для всего модуля!
 
Sub Laba_SH()
Dim i As Integer
Dim Нечто  'Нечто - для вызова функции (функцию надо чему-то присваивать)
Dim a(20) ' As Integer ("контрольный" Join работает с типом Variant)
Dim b(20) ' As Integer
Dim a_min, b_max 'соответственно минимум 1-го массива и максимум 2-го
    
    For i = 1 To 20
        a(i) = Worksheets(1).Cells(i, 2).Value '1 вместо "Sheet 1"
        b(i) = Worksheets(1).Cells(i, 5).Value '1 вместо "Sheet 1"
    Next i
    
    MsgBox "Массив a: " & Join(a) & vbCr & "Массив b: " & Join(b)
    
    a_min = a(1)
    b_max = b(1)
    n_min = 1    'индекс минимума 1-го массива (начальное значение, если Option Base 1)
    n_max = 1    'индекс максимума 2-го массива
    
    For i = 1 To 20
        If a(i) < a_min Then
            a_min = a(i)
            n_min = i
        End If
        
        If b(i) > b_max Then
            b_max = b(i)
            n_max = i
        End If
    Next i
    
    Нечто = Замена(a(n_min), b(n_max)) ' так можно ВЫЗВАТЬ функцию
    
    Cells(2, 7) = "Минимальное значение массива а = " & a_min
    Cells(3, 7) = "Его индекс был (до обмена) а_min = " & n_min
    Cells(5, 7) = "Максимальное значение массива b = " & b_max
    Cells(6, 7) = "Его индекс был (до обмена) b_max = " & n_max
    Cells(9, 7) = "Теперь элемент в 1-м массиве a(" & n_min & ") = " & b(n_max)
    Cells(10, 7) = "Теперь элемент вo 2-м массиве b(" & n_max & ") = " & a(n_min)
End Sub
 
 
Function Замена(ByVal a, ByVal b) '(она ничего не возвращает, просто обменивает 2 ячейки)
    Cells(n_min, 2) = b 'в колонку с 1-м массивом ставим максимум 2-го
    Cells(n_max, 5) = a 'в колонку со 2-м массивом ставим минимум 1-го
End Function
В документе Excel массивы заданы содержимым 2-й и 5-й колонок. 7-я должна вмещать несколько слов для ответа программы.
Миниатюры
Функция в VBA   Функция в VBA  
0
2 / 2 / 0
Регистрация: 01.05.2017
Сообщений: 12
28.06.2017, 22:20  [ТС] 14
Option Base 1
Option Explicit
Dim n_min, n_max 'n_min è n_max

какую роль играют Option Base и Option Explicit ? Можно ли обойтись без них?
0
5561 / 1367 / 150
Регистрация: 08.02.2009
Сообщений: 4,107
Записей в блоге: 30
29.06.2017, 01:24 15
Отвечает наш участник Deniskaa: Подсчитать средний бал (!).

И другие примеры:
Цитата Сообщение от Sasha_Smirnov Посмотреть сообщение
Option Explicit 'требование явно объявлять переменные
Цитата Сообщение от Sasha_Smirnov Посмотреть сообщение
(это требование объявлять все переменные)
Цитата Сообщение от Sasha_Smirnov Посмотреть сообщение
Option Base 1 'нумерация элементов массива идёт с 1
Цитата Сообщение от Sasha_Smirnov Посмотреть сообщение
Option Base 1
Цитата Сообщение от Sasha_Smirnov Посмотреть сообщение
Option Base 1 'нумерация элементов массива идёт с 1
Цитата Сообщение от Sasha_Smirnov Посмотреть сообщение
Option Base 1
Цитата Сообщение от Sasha_Smirnov Посмотреть сообщение
Option Base 0 'индексация элементов массивов начиная с 0 (как по умолчанию)
Можно и обойтись, конечно, и оставить как по умолчанию — элементы получат индексы начиная с нуля: 0, 1, …
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.06.2017, 01:24
Помогаю со студенческими работами здесь

Функция VBA
Ребята подскажите что делает функция bush и helper.

Функция СЦЕПИТЬ на VBA
Доброго времени суток, есть такая проблема, никак не могу понять, как с помощью средств VBA сделать...

Функция в функции VBA
1)Даны числа a,b,c . Вычислить: Z = (max(a * b, a * c, b * c) - Min(a, b, a * b * c)) / max((a +...

Пользовательская функция в VBA
помогите создать пользовательскую функцию с параметром диапазон в VBA. нужно посчитать количество...

функция Vba for Excel
Доброго времени суток. Опыта работы с VBA практически нет. Необходимо написать макрос, который...

Функция: y(x)=sinx/(1+x^2) VBA в Excell
Добрый день! Подскажите, пожалуйста, мне нужно сделать программу в Excell с помощью VBA, в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru