У меня есть быстрый вопрос, который, я надеюсь, будет легко любому, кто знаком с массивами, ответить.Динамический массив с (1) значением - VBA Excel
У меня есть одна колонка с различным количеством списков, разделенных пробелом. У меня есть программа, добавляющая номера вверх. Когда он попадает в пустую ячейку, он должен добавить это число в массив, увеличить количество пробелов в массиве по (1) и установить полный счетчик обратно на ноль и перейти к следующей итерации цикла. начните считать, пока он снова не коснется пробела. Со временем будет изменяться количество списков. Я не думаю, что когда-нибудь будет больше 3-4, но я бы хотел запрограммировать его, чтобы справиться с этим, если в будущем будет больше.
Так, например, ячейки C4: C10 содержат числа, содержащие до 200, тогда ячейка C11 пуста. Ячейки C12: C14 содержат числа, добавляющие до 150. Я бы хотел, чтобы массив сохранял 200 в первом месте и 150 во втором месте. Затем я хотел бы, чтобы ящики сообщений всплывали, говоря мне, что «Список 1 - 200», список 2 - 150 »и т. Д.
Прямо сейчас, я получаю индекс за пределами, но я думаю, это потому, что Я не объявлял размер массива.Я бы хотел, чтобы он был динамическим, но я не знал, как иметь массив, содержащий только (1) слот. Это всегда что-то вроде arr (от 0 до 1). Я просто вижу одно значение в примерах, на которые я смотрю, и поскольку он находится в цикле for, если я сделал цикл для lbound для ubound, я думаю, что он сказал бы что-то вроде «List 1 is 200», «List 2 является «без значения на втором, потому что у него не было данных, если есть только один список.
Возможно, я думаю, что это или происходит неправильно, но я никогда не использовал массивы раньше Я думаю, что это будет полезно в этой программе. Спасибо за любую помощь, которую вы можете предоставить.
Я собираюсь предоставить беспорядок, который у меня внизу. Я не очистил это и хорошо прокомментировал это, но вы можете спросить, есть ли у вас вопросы. Я уверен, что делаю это неправильно, я просто пытаюсь дать вам представление о том, куда я иду.
Private Sub cmdTest_Click()
Dim wb As Workbook
Dim ws As Worksheet
Dim intCounter As Integer
Dim intValue As Integer
Dim strCell As String
Dim arr() As Long
Dim intArr As Integer
Set wb = Application.Workbooks("ListTotal.xlsm")
Set ws = wb.Worksheets("Main")
Call LastRowWithData_xlUp_1(lastColRow)
MsgBox "Number of lists is: " & WorksheetFunction.CountIf(Range("C3:C" & lastColRow), "") + 1
Call FindLastRow(LastRow)
'Count pages left in each series
intValue = 0
'set number of values in array
intArr = 1
For i = 3 To LastRow
strCell = "C" & i
If Range(strCell) = "" Then
arr(0) = intValue
intValue = 0
GoTo NextIteration
End If
openingParen = InStr(Range(strCell), "[")
closingParen = InStr(Range(strCell), "]")
enclosedvalue = Mid(Range(strCell), openingParen + 1, closingParen - openingParen - 1)
intValue = intValue + enclosedvalue
MsgBox "The number of pages in this book is: " & enclosedvalue
NextIteration:
MsgBox "The total pages left in the series is: " & intValue
Next
For i = LBound(arr) To UBound(arr)
MsgBox ("The number of pages left in Series " & j & " is:") 'arr(i))
Next i
End Sub
Похоже, вам нужно определить размер массива. Вы можете добиться этого, используя «Redim». Что-то вроде 'Redim Arr (99)' будет размер 1-мерного массива 100 пустых элементов. Вам нужно было достаточно места для каждой строки? Если это так, вы можете использовать LastRow, хотя я не вижу, где это объявлено. –
Эй, Райан. Да, я видел, как изменить его размер. Я мог бы использовать Redim Preserve Arr. Я не сохраняю каждую строку. Я суммирую каждый список и сохраняю общее количество в массиве. Идея заключалась в том, что я мог бы перебирать массив и отображать каждый итог. Так что, если у меня было 3 списка, я мог бы сделать цикл, где я получаю ubound из массива и скажу от j = 1 до ubound, msgbox «Total is:» & arr (j). – Dalton