Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Результат выполнения функции split в массив - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Результат выполнения функции split в массив (Макросы/Sub)
Результат выполнения функции split в массив
energetik Дата: Вторник, 13.05.2014, 17:07 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Доброго дня уважаемые, с прошедшими вас праздниками.

Столкнулся с проблемой решение которой не смог к сожалению найти самостоятельно.

Есть фрагмент задачи суть которой в следующем. Есть таблица размерностью семь столбцов и не фиксированное количество строк. Строки могут быть двух типов. Первый это наименование подобъекта объединяющего все семь столбцов и второй тип составляющие этого подобъекта с параметрами по столбцам. Таблица есть в прикреплённом файле. Мне нужно на основе этой таблицы создать ещё одну таблицу в которой будет такое же количество строк но другое количество столбцов со значениями которые будут вычисляться на основе данных первой таблицы. Проблема возникла когда мне понадобилось в один из столбцов новой таблицы занести фрагменты строк после определённого знака из столбца первичной таблицы. Делал я это посредством функции 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]
К сообщению приложен файл: adr11.xlsm (19.9 Kb)
 
Ответить
СообщениеДоброго дня уважаемые, с прошедшими вас праздниками.

Столкнулся с проблемой решение которой не смог к сожалению найти самостоятельно.

Есть фрагмент задачи суть которой в следующем. Есть таблица размерностью семь столбцов и не фиксированное количество строк. Строки могут быть двух типов. Первый это наименование подобъекта объединяющего все семь столбцов и второй тип составляющие этого подобъекта с параметрами по столбцам. Таблица есть в прикреплённом файле. Мне нужно на основе этой таблицы создать ещё одну таблицу в которой будет такое же количество строк но другое количество столбцов со значениями которые будут вычисляться на основе данных первой таблицы. Проблема возникла когда мне понадобилось в один из столбцов новой таблицы занести фрагменты строк после определённого знака из столбца первичной таблицы. Делал я это посредством функции 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]

Автор - energetik
Дата добавления - 13.05.2014 в 17:07
nilem Дата: Вторник, 13.05.2014, 18:02 | Сообщение № 2
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
попробуйте вместо строки
[vba]
Код
Riz(i, 4) = kab(1)
[/vba]
вот это
[vba]
Код
If UBound(kab) > 1 Then Riz(i, 4) = kab(1)
[/vba]


Яндекс.Деньги 4100159601573
 
Ответить
Сообщениепопробуйте вместо строки
[vba]
Код
Riz(i, 4) = kab(1)
[/vba]
вот это
[vba]
Код
If UBound(kab) > 1 Then Riz(i, 4) = kab(1)
[/vba]

Автор - nilem
Дата добавления - 13.05.2014 в 18:02
energetik Дата: Вторник, 13.05.2014, 18:19 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Попробовал, ошибку дебагер перестал выдавать. Но значения Riz(i, 4) пустые остаются при выполнении макроса.

[moder]Не надо цитировать пост целиком. отвечать можно и без цитирования[/moder]
 
Ответить
СообщениеПопробовал, ошибку дебагер перестал выдавать. Но значения Riz(i, 4) пустые остаются при выполнении макроса.

[moder]Не надо цитировать пост целиком. отвечать можно и без цитирования[/moder]

Автор - energetik
Дата добавления - 13.05.2014 в 18:19
nilem Дата: Среда, 14.05.2014, 07:48 | Сообщение № 4
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
скорее всего вот так надо:
[vba]
Код
...
Riz(i, 1) = k
Riz(i, 2) = osnova(i, 2)
Riz(i, 3) = osnova(i, 6)
If InStr(osnova(i, 6), "х") Then Riz(i, 4) = Split(osnova(i, 6), "х")(1)
...
[/vba]


Яндекс.Деньги 4100159601573
 
Ответить
Сообщениескорее всего вот так надо:
[vba]
Код
...
Riz(i, 1) = k
Riz(i, 2) = osnova(i, 2)
Riz(i, 3) = osnova(i, 6)
If InStr(osnova(i, 6), "х") Then Riz(i, 4) = Split(osnova(i, 6), "х")(1)
...
[/vba]

Автор - nilem
Дата добавления - 14.05.2014 в 07:48
energetik Дата: Среда, 14.05.2014, 09:02 | Сообщение № 5
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
nilem
Ура заработало :-) Очень вам признателен. Только вот не пойму почему не работало в первоначальном коде а теперь работает, хочется понять и разобраться для самообразования.
 
Ответить
Сообщениеnilem
Ура заработало :-) Очень вам признателен. Только вот не пойму почему не работало в первоначальном коде а теперь работает, хочется понять и разобраться для самообразования.

Автор - energetik
Дата добавления - 14.05.2014 в 09:02
nilem Дата: Среда, 14.05.2014, 10:07 | Сообщение № 6
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
надо было If UBound(kab) > 0 Then, а не > 1
Split дает массив, нумерация индексов которого начинается с нуля. Если нам нужен 2-й по порядку элемент этого массива, то он (элемент) будет иметь индекс 1.


Яндекс.Деньги 4100159601573
 
Ответить
Сообщениенадо было If UBound(kab) > 0 Then, а не > 1
Split дает массив, нумерация индексов которого начинается с нуля. Если нам нужен 2-й по порядку элемент этого массива, то он (элемент) будет иметь индекс 1.

Автор - nilem
Дата добавления - 14.05.2014 в 10:07
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Результат выполнения функции split в массив (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!