Доброго дня уважаемые, с прошедшими вас праздниками.
Столкнулся с проблемой решение которой не смог к сожалению найти самостоятельно.
Есть фрагмент задачи суть которой в следующем. Есть таблица размерностью семь столбцов и не фиксированное количество строк. Строки могут быть двух типов. Первый это наименование подобъекта объединяющего все семь столбцов и второй тип составляющие этого подобъекта с параметрами по столбцам. Таблица есть в прикреплённом файле. Мне нужно на основе этой таблицы создать ещё одну таблицу в которой будет такое же количество строк но другое количество столбцов со значениями которые будут вычисляться на основе данных первой таблицы. Проблема возникла когда мне понадобилось в один из столбцов новой таблицы занести фрагменты строк после определённого знака из столбца первичной таблицы. Делал я это посредством функции split. И почему то в цикле она отказывается работать и выдаёт ошибку. Буду благодарен за помощь в поиске решения проблемы.
[vba]
Код
Sub А_Основа() Dim LastRow1 As Long Dim osnova() As Variant Dim Riz() As Variant Dim str1 As String Dim i As Integer, j As Integer, k As Integer Dim t As Variant Dim kab As Variant
' Вычисляем количество заполненных строк LastRow1 = Cells(Rows.Count, 2).End(xlUp).Row ' Заполняем массив osnova ReDim osnova(1 To LastRow1, 1 To 7) For i = 4 To LastRow1 For j = 1 To 7 osnova(i, j) = Cells(i, j) Next j Next i ' Создаём массив Riz и заполняем ReDim Riz(1 To LastRow1, 1 To 15) k = 1 For i = 4 To LastRow1 For j = 1 To 4 If IsEmpty(osnova(i, 1)) Then Riz(i, 1) = osnova(i, 2) Else Riz(i, 1) = k Riz(i, 2) = osnova(i, 2) Riz(i, 3) = osnova(i, 6) t = osnova(i, 6) kab = Split(t, "х", 2) Riz(i, 4) = kab(1) End If Next j If IsEmpty(osnova(i, 1)) Then Else k = k + 1 End If Next i ' Вывод на экран массива Riz For i = 4 To LastRow1 For j = 1 To 4 str1 = str1 & Riz(i, j) & "," Next j str1 = str1 & Chr(13) Next i MsgBox "Массив Riz:" & Chr(13) & str1 End Sub
[/vba]
Доброго дня уважаемые, с прошедшими вас праздниками.
Столкнулся с проблемой решение которой не смог к сожалению найти самостоятельно.
Есть фрагмент задачи суть которой в следующем. Есть таблица размерностью семь столбцов и не фиксированное количество строк. Строки могут быть двух типов. Первый это наименование подобъекта объединяющего все семь столбцов и второй тип составляющие этого подобъекта с параметрами по столбцам. Таблица есть в прикреплённом файле. Мне нужно на основе этой таблицы создать ещё одну таблицу в которой будет такое же количество строк но другое количество столбцов со значениями которые будут вычисляться на основе данных первой таблицы. Проблема возникла когда мне понадобилось в один из столбцов новой таблицы занести фрагменты строк после определённого знака из столбца первичной таблицы. Делал я это посредством функции split. И почему то в цикле она отказывается работать и выдаёт ошибку. Буду благодарен за помощь в поиске решения проблемы.
[vba]
Код
Sub А_Основа() Dim LastRow1 As Long Dim osnova() As Variant Dim Riz() As Variant Dim str1 As String Dim i As Integer, j As Integer, k As Integer Dim t As Variant Dim kab As Variant
' Вычисляем количество заполненных строк LastRow1 = Cells(Rows.Count, 2).End(xlUp).Row ' Заполняем массив osnova ReDim osnova(1 To LastRow1, 1 To 7) For i = 4 To LastRow1 For j = 1 To 7 osnova(i, j) = Cells(i, j) Next j Next i ' Создаём массив Riz и заполняем ReDim Riz(1 To LastRow1, 1 To 15) k = 1 For i = 4 To LastRow1 For j = 1 To 4 If IsEmpty(osnova(i, 1)) Then Riz(i, 1) = osnova(i, 2) Else Riz(i, 1) = k Riz(i, 2) = osnova(i, 2) Riz(i, 3) = osnova(i, 6) t = osnova(i, 6) kab = Split(t, "х", 2) Riz(i, 4) = kab(1) End If Next j If IsEmpty(osnova(i, 1)) Then Else k = k + 1 End If Next i ' Вывод на экран массива Riz For i = 4 To LastRow1 For j = 1 To 4 str1 = str1 & Riz(i, j) & "," Next j str1 = str1 & Chr(13) Next i MsgBox "Массив Riz:" & Chr(13) & str1 End Sub
nilem Ура заработало :-) Очень вам признателен. Только вот не пойму почему не работало в первоначальном коде а теперь работает, хочется понять и разобраться для самообразования.
nilem Ура заработало :-) Очень вам признателен. Только вот не пойму почему не работало в первоначальном коде а теперь работает, хочется понять и разобраться для самообразования.energetik
надо было If UBound(kab) > 0 Then, а не > 1 Split дает массив, нумерация индексов которого начинается с нуля. Если нам нужен 2-й по порядку элемент этого массива, то он (элемент) будет иметь индекс 1.
надо было If UBound(kab) > 0 Then, а не > 1 Split дает массив, нумерация индексов которого начинается с нуля. Если нам нужен 2-й по порядку элемент этого массива, то он (элемент) будет иметь индекс 1.nilem