powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / помогите доделать программку макрос в VBA
8 сообщений из 8, страница 1 из 1
помогите доделать программку макрос в VBA
    #37859156
peyjer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Заставляют писать макрос в VBA, в котором работал давным давно.
И так, от меня хотят:
Поменять местами значения массива, имеющие минимальное и максимальное значение. Числа массива расположены в первых 10 строках и первых 3 столбцах.

Вот что наработал, но не получается то, что надо, подкорректируйте у кого с этим проще.

Код: vbnet
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.
Public Sub huh2()
Dim n As Integer, m As Integer, a As Integer, b As Integer
Dim tmp As Integer, d() As Integer
Dim i As Integer, j As Integer
Dim jmax As Integer, jmin As Integer
 
    n = InputBox("Введите количество строк массива")
    m = InputBox("Введите количество столбцов массива")
    a = InputBox("Введите нижнюю границу значений элементов массива")
    b = InputBox("Введите верхнюю границу значений элементов массива")
 
    ReDim d(n, m)
    Randomize
    For i = 1 To n
        For j = 1 To m
            d(i, j) = Int(a + Rnd * (b - a))
            Cells(i, j) = d(i, j)
            Cells(i, j + 2 + m) = d(i, j)
        Next j
    Next i
 
    For i = 1 To n
        jmax = 1
        jmin = 1
        For j = 2 To m
            If d(i, j) > d(i, jmax) Then
                jmax = j
            ElseIf d(i, j) < d(i, jmin) Then
                jmin = j
            End If
        Next j
        If jmax <> jmin Then
            tmp = d(i, jmax)
            d(i, jmax) = d(i, jmin)
            d(i, jmin) = tmp
            Cells(i, jmax) = d(i, jmax)
            Cells(i, jmin) = d(i, jmin)
        End If
    Next i
 
End Sub



это 1-й вариант, и вот еще

Код: vbnet
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.
Public Sub huh3()
Dim C() As Integer, B() As Double, i As Integer, j As Integer, k As Integer, x As Integer
N = InputBox("n")
ReDim C(1 To N)
For i = 1 To N
Randomize
C(i) = Int(10 * Rnd)
Cells(i) = C(i)
Next i
Max = C(1)
Min = C(1)
 For i = 1 To N
 Select Case C(i)
        Case Is > Max
    Max = C(i)
    nmax = i
        Case Is < Min
    Min = C(i)
    nmin = i
    End Select
Next i
MsgBox (" " & Min & "," & Max & " ," & nmin & ", " & nmax & "")
k = Max
Max = Min
Min = k
For i = 1 To N
If i = nmax Then C(i) = Max
If i = nmin Then C(i) = Min
Cells(9, i) = C(i)
Next i
End Sub 




не понимаю, в чем ошибся.
Модератор: Есть такие теги - SRC и SPOILER.
...
Рейтинг: 0 / 0
помогите доделать программку макрос в VBA
    #37859186
Казанский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
peyjer,

Вы переставляете мин и макс в каждой строке, а надо во всем массиве. Вы решили более сложную задачу. :)
...
Рейтинг: 0 / 0
помогите доделать программку макрос в VBA
    #37859218
peyjer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Казанский,

так я ж говорю, vba 10 лет назад че-т делал. уже половину не помню.
...
Рейтинг: 0 / 0
помогите доделать программку макрос в VBA
    #37859221
Edd.Dragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
peyjerКазанский,

так я ж говорю, vba 10 лет назад че-т делал. уже половину не помню.
Ну это ни при чем. Просто не надо торопиться менять местами. Сначала найдите где мин и макс во ВСЕМ массиве. А потом помейте только эти два элемента. Т.е. УПРОСТИТЕ программу, вынесите обмен значений за циклы вовсе.
...
Рейтинг: 0 / 0
помогите доделать программку макрос в VBA
    #37859539
Казанский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот что наработал
Да не наработал, а скопипастил
Ладно, добрый я сегодня...

Код: vbnet
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.
DefLng A-Z

Public Sub huh2()
Dim n, m, a, b
Dim tmp, d()
Dim i, j
Dim jmax, jmin, imax, imin

n = InputBox("Введите количество строк массива", , 5)
m = InputBox("Введите количество столбцов массива", , 3)
a = InputBox("Введите нижнюю границу значений элементов массива", , 0)
b = InputBox("Введите верхнюю границу значений элементов массива", , 50)

ReDim d(n, m)
Randomize
For i = 1 To n
    For j = 1 To m
        d(i, j) = Int(a + Rnd * (b - a))
        Cells(i, j) = d(i, j)
        Cells(i, j + 2 + m) = d(i, j)
    Next j
Next i

jmax = 1
jmin = 1
imax = 1
imin = 1

For i = 1 To n
    For j = 1 To m
        If d(i, j) > d(imax, jmax) Then
            jmax = j
            imax = i
        ElseIf d(i, j) < d(imin, jmin) Then
            jmin = j
            imin = i
        End If
    Next j
Next i
tmp = d(imax, jmax)
d(imax, jmax) = d(imin, jmin)
d(imin, jmin) = tmp
Cells(imax, jmax) = d(imax, jmax)
Cells(imin, jmin) = d(imin, jmin)

End Sub
...
Рейтинг: 0 / 0
помогите доделать программку макрос в VBA
    #37859899
peyjer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо, за доделку. А возможно сделать, чтобы значение переменной можно было поменять в рабочем листе exсel? чтобы заново не создавать массив?
...
Рейтинг: 0 / 0
помогите доделать программку макрос в VBA
    #37860912
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Конечно - переведи индексы массива в координаты ранга
...
Рейтинг: 0 / 0
помогите доделать программку макрос в VBA
    #37861134
peyjer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
всё, разобрался, всем спасибо за помощь
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / помогите доделать программку макрос в VBA
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]