powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Проблема с индексами массивов
6 сообщений из 6, страница 1 из 1
Проблема с индексами массивов
    #39354340
MAGRAV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

Заметил какую то странную аномалию с индексами считываемого массива с листа Excel.
считываю массив:

Public Sub READALLDATAFAST(ByRef DATA_ALL)
Dim adres, stroka As String
Dim ii, jj As Integer

'ищем файл в проводнике
Me.OpenFileDialog1.Filter = "Все файлы (*.*)|*.*|MS Excel 2010 (*.xlsx)|*.xlsx|MS Excel 2003 (*.xls)|*.xls|Текстовые файлы (*.txt)|*.txt"
Me.OpenFileDialog1.FilterIndex = 1
Me.OpenFileDialog1.RestoreDirectory = True
Me.OpenFileDialog1.ShowDialog()
adres = Me.OpenFileDialog1.FileName

'считываем данные с листа EXCEL
Dim xlsApp As New Microsoft.Office.Interop.Excel.Application With {.Visible = False}
Dim xlsBook As Microsoft.Office.Interop.Excel.Workbook
Dim xlsSheet As Microsoft.Office.Interop.Excel.Worksheet
xlsBook = xlsApp.Workbooks.Open(adres)
xlsSheet = xlsBook.Sheets(1)

ii = FunLenRow2(xlsSheet, 1, 1)
jj = FunLenClm2(xlsSheet, 1, 1)

DATA_ALL = xlsSheet.Range(xlsSheet.Cells(1, 1), xlsSheet.Cells(ii, jj)).Value

xlsBook.Close()
End Sub


Далее делаю операцию поиска максимального и минимального значения в выбранном столбце массива:


'ПОИСК МАКСИМАЛЬНОГО и МИНИМАЛЬНОГО значений в n-мерном массиве
' ValueMass() - двумерный массив данных
Sub SearchMaxMinValueND(ByVal ValueMass(,) As Object, _
ByVal StartRow As Integer, _
ByVal indexClm As Integer, _
ByRef MaxValue As Object, _
ByRef MinValue As Object)
Dim I As Integer
'Dim L As Integer = ValueMass.GetLength(0) - 1
Dim L As Integer = UBound(ValueMass, 1) - 1

MaxValue = -(10) ^ 12
MinValue = (10) ^ 12
For I = StartRow To L 'ValueMass(0, 0)
If ValueMass(I, indexClm) <> 0 Then
If MaxValue < ValueMass(I, indexClm) Then MaxValue = ValueMass(I, indexClm)
If MinValue > ValueMass(I, indexClm) Then MinValue = ValueMass(I, indexClm)
End If
Next I

End Sub


Так вот. Первый индекс в массиве ValueMass(I, J) (I=1), задаваемый мною при помощи StartRow =1 в массиве ссылается на I=0.......... Смещение.

В чем может быть причина? Может что-то в настройках системы засело? Впервые с таким столкнулся.
...
Рейтинг: 0 / 0
Проблема с индексами массивов
    #39354372
Казанский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MAGRAV, а чему равно LBound(ValueMass, 1), LBound(ValueMass, 2) ?
Для нахождения мин и макс можно использовать функции приложения, примерно так
Код: vbnet
1.
MaxValue = xlsApp.worksheetfunction.max(xlsSheet.columns(indexClm))
...
Рейтинг: 0 / 0
Проблема с индексами массивов
    #39354444
MAGRAV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Казанский,
Я работаю в VB.NET. Мне только данные загрузить. А весь это экселевский функционал в данной задаче не нужен. К томе считаю что Ubound куда элегантнее и минималистичнее.а если ближе к делу недавно на своём компутере запускал VBA макрос в котором один "хороший" "макросист" без особой нужды испольсовал следующее:


Option Base 0


могло это как то повлиять в моём случае?
...
Рейтинг: 0 / 0
Проблема с индексами массивов
    #39354451
MAGRAV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Казанский,
чет поторопился с ответом.
про другое начал)
Тем не менее данное смещение индексов i меня сильно озадачило.
...
Рейтинг: 0 / 0
Проблема с индексами массивов
    #39354471
MAGRAV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Казанский,

С массовом получаемым из Excel и присваемым в динамическую переменную
DATA_ALL = xlsSheet.Range(xlsSheet.Cells(1, 1), xlsSheet.Cells(ii, jj)).Value
такая ситуация:
-если этот код непосредственно в самом редакторе VBA Excel. То массив индексируется начиная с единицы;
-если я это делаю из VS то массив индексируется с нуля.
И когда я в VS пытаюсь получить один из элементов этого массива то я i-подразумеваю как индекс, но по смыслу получается что это не индекс а порядковый номер.
...
Рейтинг: 0 / 0
Проблема с индексами массивов
    #39354564
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MAGRAV

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


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