Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
0 / 0 / 1
Регистрация: 10.01.2016
Сообщений: 31
1

Элементарная задача VBA

11.01.2016, 13:31. Показов 1381. Ответов 25

Author24 — интернет-сервис помощи студентам
Создать массив nxm, и заполнить данными.(все данные m,n и эллементы вводятся через input)
И главный вопрос: Почему не работает (проблема в 14 строчке)?

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Sub CreateTable()
    Dim A() As Long
    Dim n, m As Integer
    Dim i, j As Integer
    
    ReDim A(n, m)
    
    n = InputBox("Input row")
    m = InputBox("Input column")
        If n = m Then
            For j = 1 To m
                For i = 1 To n
                    A(i, j) = InputBox("Please, input an element " & i, j)
                    Next
                    n = n - 1
                    Next
        End If
  
     
    End Sub
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.01.2016, 13:31
Ответы с готовыми решениями:

Элементарная задача VBA
Создать массив nxm, и заполнить данными.(все данные m,n и эллементы вводятся через input) И...

Задача VBA
Привет Народ, я тут новенький посоветовали к вам обратиться , нужна помощь в написании программы в...

VBA задача
Option Explicit Sub триодин() Dim i As Integer Dim x As Double Dim s As Double For i = 1 To 40...

задача на массивы в VBA
вот условие: Дан массив М(9). Если разность между средним арифметическим и средним...

25
Заблокирован
11.01.2016, 13:38 2
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
Sub CreateTable()
    Dim A() As Long
    Dim n, m As Integer
    Dim i, j As Integer
    
    'ReDim A(n, m) - рано!
    
    n = InputBox("Input row")
    m = InputBox("Input column")
    
ReDim A(1to n, 1to m)
 
        'If n = m Then???
            For j = 1 To m
                For i = 1 To n
                    A(i, j) = InputBox("Please, input an element a(" & i & ", " & j & ")")
                 Next
                    'n = n - 1???
            Next
        'End If???
  
     
    End Sub
1
0 / 0 / 1
Регистрация: 10.01.2016
Сообщений: 31
11.01.2016, 13:44  [ТС] 3
Shersh, Спасибо за ответ!Оно заработало
if мне нужен т.к. это часть большой задачи (у меня будут 3 варианта массивов, когда кол-во строк=кол-ву столбцов, когда кол-во строк в 2 раза больше кол-ва столбцов и т.д.)

массив, код которого я написала, должен выглядеть как 1 на рис ниже, поэтому я добавила n=n-1 (т.к. каждый раз кол-во строк уменьшается)

Маленький вопрос: как правильно вывести на экран этот массив?
Миниатюры
Элементарная задача VBA  
0
3897 / 2302 / 776
Регистрация: 02.11.2012
Сообщений: 6,123
11.01.2016, 13:55 4
при такой записи
Visual Basic
1
2
Dim n, m As Integer
    Dim i, j As Integer
n и i имеют тип Variant

как правильно вывести на экран этот массив?
на экран или на лист?
на лист так
Visual Basic
1
Range("A1").Resize(n, m) = A()
1
0 / 0 / 1
Регистрация: 10.01.2016
Сообщений: 31
11.01.2016, 13:57  [ТС] 5
по заданию, на лист

но на экран тоже интересно посмотреть

P.s. m,j тоже, наверное, тип Variant?
0
3897 / 2302 / 776
Регистрация: 02.11.2012
Сообщений: 6,123
11.01.2016, 14:19 6
для первой таблицы, судя по скрину, по моему нужно так

Добавлено через 2 минуты
Visual Basic
1
2
For j = 1 To n
      For i = 1 To n + 1 - j
1
0 / 0 / 1
Регистрация: 10.01.2016
Сообщений: 31
11.01.2016, 14:19  [ТС] 7
Vlad999, мне кажется, тогда программа будет работать до n-1, т.е. если n=5 , то таблица будет 4xm, поэтому я внесла в цикл n-1
0
3897 / 2302 / 776
Регистрация: 02.11.2012
Сообщений: 6,123
11.01.2016, 14:22 8
так правильно записывается
Visual Basic
1
Dim n As Integer, m As Integer
или с сокращением
Visual Basic
1
Dim n%, m%
Добавлено через 1 минуту
EkaterinaTsi, смотрите последний исправленный вариант (пост #6) предыдущий был не правильный.
0
0 / 0 / 1
Регистрация: 10.01.2016
Сообщений: 31
11.01.2016, 14:25  [ТС] 9
Vlad999, интересный подход! а, мое n=n-1 совсем не правильно использовать?

да, почему-то вторая часть не хочет работать вообще (2 часть- это 2 таблица на рисунке)

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
If 2 * n = m Then
            For j = 1 To m Step 2
                For i = 1 To n
                A(i, j) = InputBox("Please, input an element a(" & i & ", " & j & ")")
                Next
                    For k = 1 To n
                    A(i, j + 1) = InputBox("Please, input an element a(" & i & ", " & j + 1 & ")")
 
                    Next
            Next
        End If
0
3897 / 2302 / 776
Регистрация: 02.11.2012
Сообщений: 6,123
11.01.2016, 14:36 10
Цитата Сообщение от EkaterinaTsi Посмотреть сообщение
мое n=n-1 совсем не правильно использовать?
по логике можно и так. Сразу как то в ваш вариант и не вникал.
для второй таблицы нужно алгоритм придумывать, пока времени нет думать. может у бывалых есть наработки.
с наскоку вариант использовать MOD для определения уменьшения строки на -1.
0
0 / 0 / 1
Регистрация: 10.01.2016
Сообщений: 31
11.01.2016, 14:44  [ТС] 11
Vlad999, В принципе, алгоритм есть и по логике он правильный, просто он не работает
если кол-во строк в два раза меньше кол-ва столбцов,
то пробег по парам столбцов
1 столбец пробег до последней строчки
2 столбец пробег до последней строчки
затем, следующая пара- пробег обейх до n-1
и т.д.

на QBasic работает, а здесь почему-то нет

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
If 2 * n = m Then
            For j = 1 To m Step 2
                For i = 1 To n
                A(i, j) = InputBox("Please, input an element a(" & i & ", " & j & ")")
                Next
                    For k = 1 To n
                    A(i, j + 1) = InputBox("Please, input an element a(" & i & ", " & j + 1 & ")")
 
                    Next
            Next
        End If
0
Заблокирован
11.01.2016, 14:50 12
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
If 2 * n = m Then
         For i = 1 To n
            For j = 1 To 2*I 'Step 2
                A(i, j) = InputBox("Please, input an element a(" & i & ", " & j & ")")
            Next
                    'For k = 1 To n
                    'A(i, j + 1) = InputBox("Please, input an element a(" & i & ", " & j + 1 & ")")
 
                    'Next
          Next
End If
1
0 / 0 / 1
Регистрация: 10.01.2016
Сообщений: 31
11.01.2016, 14:51  [ТС] 13
Vlad999, скрипт внезапно заработал!

Что-то я не смогла разобраться с выводом массива на лист, не могли бы вы мне помочь?
0
Заблокирован
11.01.2016, 14:53 14
это третья строка кода из того (Элементарная задача VBA) сообщения
Visual Basic
1
For j = 1 To m-2*I 'Step 2
(не успел исправить)
0
0 / 0 / 1
Регистрация: 10.01.2016
Сообщений: 31
11.01.2016, 14:56  [ТС] 15
Shersh,
2*I это кто такой?
0
Заблокирован
11.01.2016, 14:59 16
это 2 умножить на i

Добавлено через 2 минуты
Visual Basic
1
For j = 1 To m-2*I+2
ещё одна правка
1
3897 / 2302 / 776
Регистрация: 02.11.2012
Сообщений: 6,123
11.01.2016, 15:06 17
Лучший ответ Сообщение было отмечено EkaterinaTsi как решение

Решение

вариант
Visual Basic
1
2
3
4
5
6
7
8
9
If 2 * n = m Then
k = n
    For j = 1 To m
          For i = 1 To k
              A(i, j) = InputBox("Please, input an element a(" & i & ", " & j & ")")
           Next
       If (j Mod 2) = 0 Then k = k - 1
    Next
End If
не могли бы вы мне помочь?
с 4 поста строчка не работает? покажите как вы выводите.
0
0 / 0 / 1
Регистрация: 10.01.2016
Сообщений: 31
11.01.2016, 15:14  [ТС] 18
Лучший ответ Сообщение было отмечено Sasha_Smirnov как решение

Решение

Добавлено через 19 секунд
Vlad999, Ваш код работает!!Спасибо огромное!!!
0
Заблокирован
11.01.2016, 15:26 19
Лучший ответ Сообщение было отмечено EkaterinaTsi как решение

Решение

Visual Basic
1
2
3
4
5
6
7
If 2 * n = m Then
         For i = 1 To n
            For j = 1 To m- 2 * I + 2 'или +1 для третьего варианта
                A(i, j) = InputBox("Please, input an element a(" & i & ", " & j & ")")
            Next
        Next
End If
А массив А() лучше объявить как вариант для подавления лишних нулей
Visual Basic
1
Dim A() 'As Long
1
0 / 0 / 1
Регистрация: 10.01.2016
Сообщений: 31
11.01.2016, 16:11  [ТС] 20
Vlad999, по поводу вывода на лист

Visual Basic
1
2
3
4
5
For i = 1 To n
            For j = 1 To m
            Cells(i, j) = A(i, j)
            Next
Next
Это не правильно?(естественно, если его запихнуть в цикл if)
0
11.01.2016, 16:11
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.01.2016, 16:11
Помогаю со студенческими работами здесь

Задача VBA excel
Ребята помогите с решением задачи по информатике, заранее благодарю!!! Магазин парфюмерии и...

Задача в Access на VBA
Помогите решить задачу на VBA. В базе данных есть запрос Изменение запасов материалов на складе -...

Задача в vba из excel
В excel, в visual basic создать приложения. => Создать таблицу со следующими реквизитами: ФИО...

Vba excel задача
Кто может помочь сделать задачу? Нужно ее решить и перенести в макросы. Я не пойму как это сделать?...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru