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

Исправить проблему при присвоении значений массивам

01.06.2014, 19:05. Показов 1316. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Суть вопроса. Есть 2 массива: maskirp - в нем элементы идут по убывающей, и masobem - в нем элементы идут по возрастающей. значения массивов взаимосвязаны. Также есть ячейка Cells(13, 2) с заданным значением. Нужно сравнить это значение с элементами массива masobem и получить соответствующее значение из массива maskirp. При этом, если значение попало не точно, то получаемое значение необходимо получить интерполяцией. Все это должно выполняться по нажатию на кнопку. Полученное значение поместить в ячейку Cells(16, 2).
При выполнении получаю compil error. саnt assign to array. Подскажите, где напортачил.
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
Option Base 1 
Dim maskirp(1 To 50) As Double
Dim masobem(1 To 50) As Double 
 
Private Sub CommandButton1_Click() 
Call zapmaskirp
Call zapmasobem
 
    For i = 1 To 50
         If masobem(i) < Cells(13, 2) Then 'сравнение значения с элементом массива
         i = i + 1 ' эта строчка точно не верная, но написана просто лишь бы программа заработала. так и не придумал, что можно вписать сюда
         Else
         Cells(16, 2) = maskirp(i - 1) - ((maskirp(i - 1) - maskirp(i)) / (masobem(i) - masobem(i - 1))) * (Cells(13, 2) - masobem(i - 1)) 'определение нужного значения интерполяцией и запись его в ячейку 16,2
         End If
    Next i
       
 
End Sub
 
Sub zapmaskirp()
maskirp = Array(390, 205, 155, 90, 65, 52, 45, 45, 39, 28, 21.5, 14.5, 11.2, 9.2, 6.5, 5.1, 2.65, 1.84, 1.4, 1.18, 0.97)
End Sub
 
Sub zapmasobem()
masobem = Array(5, 10, 15, 30, 45, 60, 75, 80, 100, 150, 200, 300, 400, 500, 750, 1000, 2000, 3000, 4000, 5000, 10000)
End Sub
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.06.2014, 19:05
Ответы с готовыми решениями:

Исправить проблему с размножающимися элементами ListBox и проблему со сортировкой
Доброго времени суток. Подскажите пожалуйста, кто знает, все нервы уже истрепал с этой сортировкой...

Ошибка при присвоении значений структуре
Задана структура 3) struct point { float x,y; }A, B; При моей попытке присвоить через скан...

Исправить проблему при установке COM-соединения с 1С 8.2
Очень странно и загадочно. Есть эксель с подключённым &quot;1CV82 COM Connector Type Library&quot;, есть 1С...

Усечение константного значения при присвоении значений объектам структуры
Здравствуйте! Есть вот такой код: #include &lt;iostream&gt; using namespace std; struct date {...

9
призрак
3262 / 890 / 119
Регистрация: 11.05.2012
Сообщений: 1,702
Записей в блоге: 2
01.06.2014, 19:19 2
Лучший ответ Сообщение было отмечено ikki как решение

Решение

результат функции array() может быть присвоен только переменной variant или массиву variant с необъявленными границами:
Visual Basic
1
2
3
4
5
6
7
Sub test()
  Dim a, b(), c(1 To 3), d#()
  a = Array(1, 2, 3) ' допустимо
  b = Array(1, 2, 3) ' допустимо
  c = Array(1, 2, 3) ' ошибка времени компиляции
  d = Array(1, 2, 3) ' ошибка времени выполнения (несоответствие типов)
End Sub
1
0 / 0 / 0
Регистрация: 01.06.2014
Сообщений: 5
01.06.2014, 19:57  [ТС] 3
исправил на:
Dim maskirp()
Dim masobem()
пишет out of range
это значит, что выходит за границы существующего массива?
можете подсказать, почему не подхватывает значение из массива (там значения до 10000)? значение в ячейке (13,2) - 450
заранее благодарен.
0
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
01.06.2014, 20:33 4
Покажите файл с кодом и значениями, и что именно хотите сделать - пока ничего не понятно...
И зачем по 100 раз зря проделывать Cells(16, 2) = maskirp(i -.... ?
0
0 / 0 / 0
Регистрация: 01.06.2014
Сообщений: 5
01.06.2014, 20:57  [ТС] 5
Добавлено через 12 минут
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
Option Base 1 
Dim maskirp() 
Dim masobem() 
 
Private Sub CommandButton1_Click() 
Call zapmaskirp
Call zapmasobem
    For i = 1 To 50
         If masobem(i) < Cells(13, 2) Then
         i = i
         Else
         Cells(16, 2) = maskirp(i - 1) - ((maskirp(i - 1) - maskirp(i)) / (masobem(i) - masobem(i - 1))) * (Cells(13, 2) - masobem(i - 1))
         End If
    Next i
End Sub
 
Sub zapmaskirp()
maskirp = Array(390, 205, 155, 90, 65, 52, 45, 45, 39, 28, 21.5, 14.5, 11.2, 9.2, 6.5, 5.1, 2.65, 1.84, 1.4, 1.18, 0.97)
End Sub
 
Sub zapmasobem()
masobem = Array(5, 10, 15, 30, 45, 60, 75, 80, 100, 150, 200, 300, 400, 500, 750, 1000, 2000, 3000, 4000, 5000, 10000)
End Sub
Добавлено через 5 минут
Есть ячейка (13,2) с заданным значением 450. Нужно сравнить это значение с элементами массива masobem и получить соответствующее значение из массива maskirp, соответствующее номеру элемента. При этом, если значение попало не точно, то получаемое значение необходимо получить интерполяцией. Все это должно выполняться по нажатию на кнопку. Полученное значение поместить в ячейку (16, 2). Т.е. если в ячейке (13,2) значение будет 10, то в ячейку (16,2) должно быть записано 205. А если в (13,2) будет 9, то в (16,2) должно быть записано 242, т.к. по интерполяции значение 9 в диапозоне от 5 до 10 массива masobem соответствует значению 242 в диапозоне от 390 до 205 массива maskirp.

Добавлено через 4 минуты
Т.о. если у нас начальное значение 450, то по идее в ячейку (16,2) должно быть записано значение 10,2, т.к. (9,2+11,2)/2=10,2
0
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
01.06.2014, 21:00 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
Option Base 1
Dim maskirp()
Dim masobem()
 
Private Sub CommandButton1_Click()
Call zapmaskirp
Call zapmasobem
    For i = 1 To UBound(maskirp)
         If masobem(i) < Cells(13, 2) Then
         i = i
         Else
         Cells(16, 2) = maskirp(i - 1) - ((maskirp(i - 1) - maskirp(i)) / (masobem(i) - masobem(i - 1))) * (Cells(13, 2) - masobem(i - 1))
         Exit For
         End If
    Next i
End Sub
 
Sub zapmaskirp()
maskirp = Array(390, 205, 155, 90, 65, 52, 45, 45, 39, 28, 21.5, 14.5, 11.2, 9.2, 6.5, 5.1, 2.65, 1.84, 1.4, 1.18, 0.97)
End Sub
 
Sub zapmasobem()
masobem = Array(5, 10, 15, 30, 45, 60, 75, 80, 100, 150, 200, 300, 400, 500, 750, 1000, 2000, 3000, 4000, 5000, 10000)
End Sub
Правда всё равно ошибка будет в maskirp(i - 1) и masobem(i - 1), если будете проверять например 4-ку. Как исправлять - это нужно вникать...
0
0 / 0 / 0
Регистрация: 01.06.2014
Сообщений: 5
01.06.2014, 21:00  [ТС] 7
Цитата Сообщение от Hugo121 Посмотреть сообщение
И зачем по 100 раз зря проделывать Cells(16, 2) = maskirp(i -.... ?
да, кстати, хороший вопрос.
спасибо
0
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
01.06.2014, 21:05 8
Лучший ответ Сообщение было отмечено deniskaizminska как решение

Решение

Да, зачем i = i? Явно лишняя строка, сразу не заметил...
Да и проверку можно изменить:
Visual Basic
1
2
3
4
5
6
7
8
9
10
Private Sub CommandButton1_Click()
Call zapmaskirp
Call zapmasobem
    For i = 1 To UBound(maskirp)
         If masobem(i) >= Cells(13, 2) Then
         Cells(16, 2) = maskirp(i - 1) - ((maskirp(i - 1) - maskirp(i)) / (masobem(i) - masobem(i - 1))) * (Cells(13, 2) - masobem(i - 1))
         Exit For
         End If
    Next i
End Sub
0
0 / 0 / 0
Регистрация: 01.06.2014
Сообщений: 5
01.06.2014, 21:27  [ТС] 9
Спасибо за хороший вариант.
0
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
01.06.2014, 21:43 10
Но подумайте как обойти ошибку на maskirp(i - 1) при i=1!
Может быть можно/нужно
Visual Basic
1
For i = 2 To UBound(maskirp)
0
01.06.2014, 21:43
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.06.2014, 21:43
Помогаю со студенческими работами здесь

Исправить проблему при распознавании типа объекта
Из аксес пытаюсь сделать таблицу в ворд, описываю переменную типа table, говорит, что такой...

Как исправить проблему черного экрана при загрузке Windows 2000?
Пытаюсь восстановить образ ОС Windows 2000 &quot;снятый акронисом&quot;. После восстановления, при загрузке...

Как исправить проблему
Добрый день! Выписал недавно проекционные часы с Таобао. Все работает, но не устраивает один...

Как исправить проблему с задачей?
Даны целые числа а(1)...а(n) (в этой последовательности могут быть повторяющиеся члены) ...


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

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