Не хочет записать данные из массива в лист Excel - VBA
Формулировка задачи:
Тут код програмки .
Сперва выделяется два массива на листе ексель , потом програма их умножает и выводит через MsgBox , хотел сохранить данные из массива на ексель в ячейки которые пустие , пробовал както так
но на строке
почему то просто ничего ничего не делает и завершает программу . Подскажите что не так.
Листинг программы
- Function Multi(x As Range, y As Range)
- Debug.Print x.Address
- Debug.Print x.Columns.Count
- Debug.Print x.Rows.Count
- Dim arr(), sz_f_i As Byte, sz_f_j As Byte
- sz_f_i = x.Rows.Count: sz_f_j = x.Columns.Count
- arr = Range(x.Address).Value
- ' Call output_arr(sz_f_i, sz_f_j, arr)'
- Debug.Print y.Address
- Debug.Print y.Columns.Count
- Debug.Print y.Rows.Count
- Dim arr_t(), sz_s_i As Byte, sz_s_j As Byte
- sz_s_i = y.Rows.Count: sz_s_j = y.Columns.Count
- arr_t = Range(y.Address).Value
- ' Call output_arr(sz_s_i, sz_s_j, arr_t)'
- Dim new_arr()
- ReDim Preserve new_arr(1 To sz_f_i, 1 To sz_s_j)
- Call multiplication_arr(sz_f_i, sz_f_j, arr, sz_s_i, sz_s_j, arr_t, new_arr)
- Call output_arr(sz_f_i, sz_s_j, new_arr)
- End Function
- Sub output_arr(size_i As Byte, size_j As Byte, arr()) ' ГўГЁГўВіГ¤ Г¬Г*Г±ГЁГўГі '
- Dim strS$, ttm%
- For i = 1 To size_i
- For j = 1 To size_j
- ttm = j Mod size_j
- If ttm = 0 Then strS = strS + " " + Str(arr(i, j)) + vbCrLf
- If ttm <> 0 Then strS = strS + " " + Str(arr(i, j))
- Next j
- Next i
- MsgBox (strS)
- Dim m_i%, m_j%, temp_cell As Range
- m_i = 1: m_j = 1
- End Sub
- Sub multiplication_arr(sz_i As Byte, sz_j As Byte, arr_one(), t_sz_i As Byte, t_sz_j As Byte, arr_two(), new_arr())
- Dim save_num%, count_cycle%, llt%, amount%
- llt = 1: count_cycle = 0: amount = 0
- save_num = 0
- For i = 1 To sz_i
- For j = 1 To sz_j
- For m = 1 To t_sz_j
- If count_cycle >= sz_i Then GoTo here
- For n = 1 To t_sz_i
- save_num = save_num + arr_one(m, n) * arr_two(n, llt)
- amount = amount + 1
- Next n
- new_arr(m, llt) = save_num: save_num = 0: If amount >= (sz_j * t_sz_j) Then amount = 0: _
- m = 0: _
- count_cycle = count_cycle + 1: _
- llt = llt + 1
- Next m
- Next j
- Next i
- here:
- End Sub
Листинг программы
- For i = 1 To size_i
- For j = 10 To 10 + size_j
- Cells(i, j) = arr(m_i, m_j)
- m_j = m_j + 1
- Next j
- m_i = m_i + 1
- Next i
Листинг программы
- Cells(i, j) = arr(m_i, m_j)
Решение задачи: «Не хочет записать данные из массива в лист Excel»
textual
Листинг программы
- Function Multiplication(x As Range, y As Range)
- Dim arr_one(), arr_two(), arr_three()
- arr_one = x.Value ' first arr '
- arr_two = y.Value ' second arr '
- ReDim Preserve arr_three(1 To x.Rows.Count, 1 To y.Columns.Count) ' three arr -> set size '
- If x.Rows.Count <> y.Columns.Count Then MsgBox "Кількість рядків 1 матриці повинна = кількості стовпців 2 матриці ": GoTo ended
- If x.Rows.Count = y.Columns.Count Then Call multiplication_arr(arr_one, arr_two, arr_three): _
- Call output_arr(arr_three) ' output in MsgBox '
- Dim i&, j&
- ReDim temp(1 To UBound(arr_one), 1 To UBound(arr_two, 2))
- For i = 1 To UBound(temp)
- For j = 1 To UBound(temp, 2)
- temp(i, j) = arr_three(i, j)
- Next j
- Next i
- Multiplication = temp
- ended:
- End Function
- Sub output_arr(arr_three()) ' output arr '
- Dim strS$, ttm&
- For i = 1 To UBound(arr_three)
- For j = 1 To UBound(arr_three, 2)
- ttm = j Mod UBound(arr_three, 2)
- If ttm = 0 Then strS = strS + " " + Str(arr_three(i, j)) + vbCrLf
- If ttm <> 0 Then strS = strS + " " + Str(arr_three(i, j))
- Next j
- Next i
- MsgBox (strS)
- End Sub
- Sub multiplication_arr(arr_f(), arr_s(), arr_th()) 'A * B'
- 'result multiplication/cycle/num row/num colum/amount cycle '
- Dim save_num&, count_cycle&, a_row&, a_colum&, amount&
- a_row = 1: a_colum = 1: count_cycle = 0: amount = 0
- save_num = 0
- For i = 1 To UBound(arr_f) ' - first cycle '
- For j = 1 To UBound(arr_f, 2)
- For m = 1 To UBound(arr_s, 2) ' - second cycle '
- If count_cycle >= UBound(arr_s, 2) Then GoTo here
- For n = 1 To UBound(arr_s)
- save_num = save_num + arr_f(a_row, n) * arr_s(n, a_colum) 'multiplication and addition numbers '
- amount = amount + 1
- Next n
- 'save result '
- arr_th(a_row, a_colum) = save_num: a_row = a_row + 1
- save_num = 0: If amount >= (UBound(arr_f) * UBound(arr_s)) Then amount = 0: _
- m = 0: _
- count_cycle = count_cycle + 1: _
- a_row = 1: a_colum = a_colum + 1
- Next m
- Next j
- Next i
- here:
- End Sub
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д