Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / помогите доделать программку макрос в VBA / 8 сообщений из 8, страница 1 из 1
28.06.2012, 17:00
    #37859156
peyjer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите доделать программку макрос в VBA
Заставляют писать макрос в 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
28.06.2012, 17:10
    #37859186
Казанский
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите доделать программку макрос в VBA
peyjer,

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

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

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

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


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