powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Многомерный массив
19 сообщений из 19, страница 1 из 1
Многомерный массив
    #37192409
dd44
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что-то я запутался, подскажите плиз.
Есть многомерные массив их одной строки и двух столбцов.
Если мы этот массив переопределяем
Код: plaintext
ReDim myArray( 1 ,  1 )
, то есть делаем две строки и два столбца, то значения которые были в первой строке так и остаются в первой строке, или переносятся во вторую строку?
...
Рейтинг: 0 / 0
Многомерный массив
    #37192414
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redim без preserve просто очистит массив
...
Рейтинг: 0 / 0
Многомерный массив
    #37192444
dd44
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_Oneredim без preserve просто очистит массив
АААА голова дырявая, совсем забыл, спасибо. :)
...
Рейтинг: 0 / 0
Многомерный массив
    #37192589
dd44
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блин, либо голова уже не работает, либо не знаю что тут не так:
Код: plaintext
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.
        g =  0 
        Dim myArray( 0 ,  2 )
        For i =  4  To .Cells(Rows.Count, intTempStartCol).End(xlUp).Row
            f =  0 
            If Not .Cells(i, intTempStartCol +  9 ).Value = "" And .Cells(i, intTempStartCol +  19 ).Value = "" Then
                For j =  0  To g
                    If myArray(j,  0 ) = .Cells(i, intTempStartCol +  9 ).Value And myArray(j,  1 ) = Format(CDate(.Cells(i, intTempStartCol +  10 ).Value)) Then
                        myArray(j,  2 ) = Format(CCur(CCur(myArray(j,  2 )) + CCur(.Cells(i, intTempStartCol +  8 ).Value)), "#,##0.00")
                        f =  1 
                    End If
                Next
                If Not f =  1  Then
                    If myArray( 0 ,  0 ) =  0  Then
                        myArray( 0 ,  0 ) = .Cells(i, intTempStartCol +  9 ).Value
                        myArray( 0 ,  1 ) = Format(CDate(.Cells(i, intTempStartCol +  10 ).Value))
                        myArray( 0 ,  2 ) = Format(CCur(.Cells(i, intTempStartCol +  8 ).Value), "#,##0.00")
                    Else
                        g = g +  1 
                        ReDim Preserve myArray(g,  2 )
                        myArray(g,  0 ) = .Cells(i, intTempStartCol +  9 ).Value
                        myArray(g,  1 ) = Format(CDate(.Cells(i, intTempStartCol +  10 ).Value))
                        myArray(g,  2 ) = Format(CCur(.Cells(i, intTempStartCol +  8 ).Value), "#,##0.00")
                    End If
                End If
            End If
        Next
        If Not myArray( 0 ,  0 ) =  0  Then
            For j =  0  To g
                Me.ComboBox1.AddItem myArray(j,  0 )
            Next
        Else
            MsgBox "Íåîïëà÷åííûõ ñ÷åòîâ íåò.", vbOKOnly
            Call Unload(Me)
        End If
так эта сволочь ругается на
Код: plaintext
ReDim Preserve myArray(g,  2 )
...
Рейтинг: 0 / 0
Многомерный массив
    #37192626
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dd44,

Определить массив надо вне процедуры изначально не указывая размер
...
Рейтинг: 0 / 0
Многомерный массив
    #37192661
dd44
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Prodd44,

Определить массив надо вне процедуры изначально не указывая размер
Приношу извинения, что забыл это указать, он у меня определен
Код: plaintext
Dim myArray() As Variant
...
Рейтинг: 0 / 0
Многомерный массив
    #37192680
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тогда выбросить строку
Код: plaintext
Dim myArray( 0 ,  2 )
...
Рейтинг: 0 / 0
Многомерный массив
    #37192683
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proтогда выбросить строку
Код: plaintext
Dim myArray( 0 ,  2 )

если в процедуре определена переменная, то она перекрывает переменную, определенную на более высоком уровне
...
Рейтинг: 0 / 0
Многомерный массив
    #37192793
dd44
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProShocker.Proтогда выбросить строку
Код: plaintext
Dim myArray( 0 ,  2 )

если в процедуре определена переменная, то она перекрывает переменную, определенную на более высоком уровне
Изменил
Код: plaintext
Dim myArray( 0 ,  2 )
на
Код: plaintext
ReDim myArray( 0 ,  2 )
, все равно ругается на
Код: plaintext
ReDim Preserve myArray(g,  2 )
пишет: Subscript out of range.
...
Рейтинг: 0 / 0
Многомерный массив
    #37192843
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dd44,

Странная ошибка
Уверены, что ругается именно на эту строку?

попробуйте локализовать или выкладывайте рабочий фрагмент для анализа.
...
Рейтинг: 0 / 0
Многомерный массив
    #37192867
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
потому что нельзя
читайте классику
...
Рейтинг: 0 / 0
Многомерный массив
    #37192911
dd44
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_Oneпотому что нельзя
читайте классику Все равно туплю. Изменил строку в соответствии с примером на
Код: plaintext
ReDim Preserve myArray(UBound(myArray) +  1 )
опять та же ошибка: Subscript out of range.
...
Рейтинг: 0 / 0
Многомерный массив
    #37192914
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Плохо читаете классику:
Коррекция длины массива с использование Preserve возможна и для многомерных массивов, но при этом допускается изменение только последнего индекса

Спасибо, Костя, за подсказкку, сам я об этом позабыл
...
Рейтинг: 0 / 0
Многомерный массив
    #37192916
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Dim myArray() as String

Redim myArray( 2 )
myArray( 0 )="раз"
myArray( 1 )="два"
myArray( 2 )="три"

ReDim Preserve myArray(UBound(myArray) +  1 )
myArray( 3 )="четыре"

теперь надеюсь, что сами разберётесь
...
Рейтинг: 0 / 0
Многомерный массив
    #37193257
dd44
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так что, я могу добавить только столбец?
...
Рейтинг: 0 / 0
Многомерный массив
    #37193300
dd44,
Что мешает тебе выдумать порох непромокаемый?(с) Козьма Прутков

Поменяйте "ряды" и "столбцы" местами
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Dim myArray()
'...
ReDim myArray( 2 ,  0 )
'...
    g = g +  1 
    ReDim Preserve myArray( 2 , g)
    myArray( 0 , g) = .Cells(i, intTempStartCol +  9 ).Value
    myArray( 1 , g) = Format(CDate(.Cells(i, intTempStartCol +  10 ).Value))
    myArray( 2 , g) = Format(CCur(.Cells(i, intTempStartCol +  8 ).Value), "#,##0.00")
'...
...
Рейтинг: 0 / 0
Многомерный массив
    #37193698
dd44
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пробуй камнемdd44,
Что мешает тебе выдумать порох непромокаемый?(с) Козьма Прутков

Поменяйте "ряды" и "столбцы" местами
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Dim myArray()
'...
ReDim myArray( 2 ,  0 )
'...
    g = g +  1 
    ReDim Preserve myArray( 2 , g)
    myArray( 0 , g) = .Cells(i, intTempStartCol +  9 ).Value
    myArray( 1 , g) = Format(CDate(.Cells(i, intTempStartCol +  10 ).Value))
    myArray( 2 , g) = Format(CCur(.Cells(i, intTempStartCol +  8 ).Value), "#,##0.00")
'...

Спасибо всем огромное. Это понятно что можно транспонировать массив, понятно, что его можно сделать одномерным и добавлять по три значения, можно также сделать два массива и предварительно изменив один передавать в него значения из другого, но это все как-то неправильно что ли, не красиво и губит в душе тягу к прекрасному.
...
Рейтинг: 0 / 0
Многомерный массив
    #37193788
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dd44Спасибо всем огромное. Это понятно что можно транспонировать массив, понятно, что его можно сделать одномерным и добавлять по три значения, можно также сделать два массива и предварительно изменив один передавать в него значения из другого, но это все как-то неправильно что ли, не красиво и губит в душе тягу к прекрасному.

Когда возникает подобный душевный диссонанс, ты берешь в руки мышь и парой кликов создаешь класс. Затем заполняешь класс всем, что тебя так сильно расстраивает, и реализуешь свою тягу к прекрасному путем создания прекрасных методов и свойств этого класса. Таким образом создав "черный ящик", ты навсегда забываешь о плохом настроении из-за массивов, после создания не менее двух десятков подобных классов, можешь достичь просветления, а после пятого десятка - нирваны.
...
Рейтинг: 0 / 0
Многомерный массив
    #37197368
dd44
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Prodd44Спасибо всем огромное. Это понятно что можно транспонировать массив, понятно, что его можно сделать одномерным и добавлять по три значения, можно также сделать два массива и предварительно изменив один передавать в него значения из другого, но это все как-то неправильно что ли, не красиво и губит в душе тягу к прекрасному.

Когда возникает подобный душевный диссонанс, ты берешь в руки мышь и парой кликов создаешь класс. Затем заполняешь класс всем, что тебя так сильно расстраивает, и реализуешь свою тягу к прекрасному путем создания прекрасных методов и свойств этого класса. Таким образом создав "черный ящик", ты навсегда забываешь о плохом настроении из-за массивов, после создания не менее двух десятков подобных классов, можешь достичь просветления, а после пятого десятка - нирваны.Улыбнуло, с классами я еще не знаком, будем изучать матчасть.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Многомерный массив
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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