Страницы: 1
RSS
Разделение одного столбца на 31 с равным количеством строк
 
Всем привет! Прошу помощи.

Есть несколько столбцов с 744 или 720 (Количество часов в месяце) строками подряд, без пробелов.
Нужен макрос, который бы при запуске предлагал выделить нужные столбцы и делил каждый целый столбец на 31 или 30 столбцов по 24 строки на новый лист. То есть 31 или 30 дней по 24 часа.

И нужен макрос, делающий обратно. Из одной матрицы в один столбик

Пример прилагается.
Изменено: Артем Колчин - 08.12.2020 15:52:14
 
Цитата
Артем Колчин написал:
И нужен макрос, делающий обратно. Из одной матрицы в один столбик
и
Цитата
Артем Колчин написал:
Разделение одного столбца на 31 с равным количеством строк
1 вопрос одна тема) выбирайте_
Не бойтесь совершенства. Вам его не достичь.
 
а что этот макрос будет делать с данными за февраль?
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Ігор Гончаренко написал:
за февраль?
Ігор Гончаренко, с языка снял :) Но потом подумал и кажется возможно (правильно?) понял, что кол-во дней неважно, ТС-у нужно цикл по 24, потом новый столбец  на листе с результатом и т.д. Непонятно только - за исходные брать один столбец или несколько
Изменено: _Igor_61 - 08.12.2020 16:24:52
 
Артем Колчин, пусть будет для 1 го столбца
Код
Sub mrshkei()
Dim i As Long, z As Long, n As Long, arr, arr2, rng As Range, x As Long, result As Range
Set rng = Application.InputBox("Выберите данные", Type:=8)
x = Application.InputBox("Укажите количество дней в месяце", Type:=1)
Set result = Application.InputBox("Укажите 1 ячейку куда вывести результат", Type:=8)
arr = rng
ReDim arr2(1 To 24, 1 To x)
i = 1
For z = 1 To 24
    For n = 1 To x
        arr2(z, n) = arr(i, 1)
        i = i + 1
    Next n
Next z
result.Resize(UBound(arr2), x) = arr2
End Sub
Не бойтесь совершенства. Вам его не достичь.
 
_Igor_61, все верно, если в феврале 28 дней, то столбец будет состоять из 28*24=672 строк, и на лист с результатом, из этого одного столбца получится соответственно 28. Если 29 дней то 29. и т.д.

Цитата
_Igor_61 написал:
Непонятно только - за исходные брать один столбец или несколько
За исходные хотелось бы иметь возможность несколько столбцов. Один столбец должен соответствовать одному результату. Если столбца 2, то нужно чтобы создалось два листа, каждый из которых будет содержать матрицу  соответствующую своему столбцу.
 
Mershik, спасибо! А можно как то обойтись без указания количества дней? Чтобы к примеру если в месяце 30 дней, т.е 720 часов, следующие 24 часа добавлялся столбец с нулями?
 
Артем Колчин, а как по данным понять какой мксяц?
может так?
Код
Sub mrshkei()
Dim i As Long, z As Long, n As Long, arr, arr2, rng As Range, x As Long, result As Range
Set rng = Application.InputBox("Выберите данные", Type:=8)
x = rng.Cells.Count / 24
Set result = Application.InputBox("Укажите 1 ячейку куда вывести результат", Type:=8)
arr = rng
ReDim arr2(1 To 24, 1 To x)
i = 1
For z = 1 To 24
    For n = 1 To x
        arr2(z, n) = arr(i, 1)
        i = i + 1
    Next n
Next z
result.Resize(UBound(arr2), x) = arr2
End Sub

Изменено: Mershik - 09.12.2020 11:58:59
Не бойтесь совершенства. Вам его не достичь.
 
Mershik, да! то что нужно!!!
огромное спасибо. А сможете еще помочь по обратному коду? Дабы не плодить новую тему....
 
Артем Колчин, нет это другой вопрос и тема соответственно, комплексные вопросы решаются в разделе "РАБОТА".
Не бойтесь совершенства. Вам его не достичь.
Страницы: 1
Наверх