powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / распределение данных по листам в книге
15 сообщений из 15, страница 1 из 1
распределение данных по листам в книге
    #37672084
VikVikVik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
подскажите как нужно указать счетчик, что бы приразбивке по счетам на другие листы все записи были по порядку без пустых строк. На данный момент макро сразбивает по листам но не порядку строки.
рассмотрю и другие предложенные варианты )))
...
Рейтинг: 0 / 0
распределение данных по листам в книге
    #37672109
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: VikVikVik
> подскажите как нужно указать счетчик, что бы приразбивке по счетам на другие листы все записи были по порядку без
> пустых строк. На данный момент макро сразбивает по листам но не порядку строки.

Ничего не понятно
Если макрос разбивает по разным листам а счётчик используется один для всех, то это нормально, такое поведение.
Заведи счетчики для каждого из листов и будет тебе счастье.

Или я не правильно понял???

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
распределение данных по листам в книге
    #37672114
VikVikVik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь Горбонос,


Заведи счетчики для каждого из листов и будет тебе счастье.


вот-вот отсюда подробнее...
...
Рейтинг: 0 / 0
распределение данных по листам в книге
    #37672131
VikVikVik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь Горбонос,

как сдесь подправить?

For i = 1 To 100
For j = 1 To 20
Worksheets("1").Cells(1 + i, j) = Worksheets("распределено").Cells(1 + i, j)
Next i
Next j
...
Рейтинг: 0 / 0
распределение данных по листам в книге
    #37672139
VikVikVik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь Горбонос,

если пишу так

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
For i = 1 To 100

For j = 1 To 20


For k = 1 To 100
     Worksheets("1").Cells(1 + i, j) = Worksheets("распределено").Cells(1 + k, j)
     
Next k


        Next j

       Next i


то получаються пустые строки (((
...
Рейтинг: 0 / 0
распределение данных по листам в книге
    #37672148
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: VikVikVik
> вот-вот отсюда подробнее...

а что подробнее?? Я не вижу кода, который у тебя разбрасывает по разным листам. У себя я завел-бы класс:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Option 
Explicit

Dim sh As Worksheet
Dim nCurrentRow As Long

Public Function Out(sOut As String)
If Not sh Is Nothing Then
    sh.Cells(nCurrentRow, 1).Value = sOut
    nCurrentRow = nCurrentRow + 1
End If
End Function


Public Property Set SetWorkSheet(ByVal vNewValue As Worksheet)
Set sh = vNewValue
nCurrentRow = sh.Cells.SpecialCells(xlLastCell).Row
End Property


При старте макроса, сделал-бы коллекцию, в которую напихал-бы нужное количество экземпляров этого класса, примерно так
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Dim mCol As New Collection, c As Class1
Set c = New Class1
Set c.SetWorkSheet = Sheets("Валютные")
mCol.Add c, "Валютные"
Set c = New Class1
Set c.SetWorkSheet = Sheets("Резервные")
mCol.Add c, "Резервные"
Set c = New Class1
Set c.SetWorkSheet = Sheets("Новые")
mCol.Add c, "Новые"

и при обработке получал-бы нужный екземпляр из коллекции по имени листа и выводил нужные
данные, например так
Код: vbnet
1.
2.
3.
 Set c = mCol("Резервные")
c.Out ("322223123456")
Set c = Nothing



Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
распределение данных по листам в книге
    #37672156
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: VikVikVik
> то получаються пустые строки (((

Странно, там не должно быть пустых строк

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
распределение данных по листам в книге
    #37672171
VikVikVik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь Горбонос,

сильно сложно для моего мозга )))
я сделала так что бы разбрасывало. файл прилагаю. помогите убрать пустые строки
...
Рейтинг: 0 / 0
распределение данных по листам в книге
    #37672328
VikVikVik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь Горбонос,

может все таки подскажите(((
...
Рейтинг: 0 / 0
распределение данных по листам в книге
    #37672384
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VikVikVikИгорь Горбонос,

может все таки подскажите((( вообще-то у маня то-же есть работа
...
Рейтинг: 0 / 0
распределение данных по листам в книге
    #37672874
VikVikVik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь Горбонос
спасибо, но все как в тумане)))
...
Рейтинг: 0 / 0
распределение данных по листам в книге
    #37673149
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: VikVikVik
> спасибо, но все как в тумане)))

Еще раз, у тебя "удачная" структура, имена листов - две последние цифры счета + сами счета последовательные и монотонно
возрастающие. Поэтому можно опустить проверку полного счета и ограничится двумя последними цифрами. Как только появится
счет выбивающийся из этой последовательности, логику проверок нужно будет менять.
Теперь сам код. Т.к. номера счетов у тебя идут непрерывно то можно сделать простой цикл по изменяющейся части счетов и
заполнить листы шапками будущих таблиц. А так-же инициализировать структуру, с помощью которой будем определять на какой
лист выводить и куда выводить.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
For i = 1 To 27
' Идем по всем листам, проставляем там шапки и подготавливаем для работы
' Листы имеют имена 1, 2, 3, 4 и т.д поэтому делаем простой цикл от 1 до 27 по количеству листов
' Получаем лист в переменную и копируем туда шапку, не по ячеечно, а сразу всем диапазоном
    Set sh = Sheets(CStr(i))
    sh.Range(sh.Cells(1, 1), sh.Cells(1, 8)).Value = _
        Sheets("распределено").Range(Sheets("распределено").Cells(1, 1), Sheets("распределено").Cells(1, 8)).Value
' После чего инициируем экземпляр класса, в котором будет хранится информация о листе, на который будет выводится 
информация
    Set c = New Class1
' Сохраняем в объекте ссылку на обслуживаемый лист, счетчик текущей позиции на листе хранится в самом объекте
' и делается равным 2 при получении ссылки на лист. А в функции вывода Out увеличивает своё значение на 1, т.е. сдвигает 
позицию следующего вывода вниз, на новую строку
    Set c.SetWorkSheet = sh
' Добавляем подготовленный объект в коллекцию с ключем, равным имени листа и равным последним двум цифрам счета(первые 
девять цифр без лидирующего нуля опускаем :) )
    mColl.Add c, CStr(i)
Next i
Set c = Nothing


С первой частью, так сказать подготовкой - закончили. Теперь собственно рабочий цикл
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
' Заполнили, теперь идем по 
данным
For i = 1 To 100
' Т.к. нас из всего счета интересуют только две последние цифры - получаем только их
' По ним получим объект, который выведет на нужный лист нужные данные
' Получаем две последние цифры счета, по которым получаем объект класса с нужным листом
    a = Right(Worksheets("распределено").Cells(1 + i, 2).Text, 2)
    ' И передаем в функцию вывода, Range, который нужно вывести.
    ' Только я сделал на 8 столбцов, по количеству столбцов в шапке, а не на 27 - как в цикле
    ' Здесь можно поставить условие окончания цикла, что-бы не гонять впустую но конца счетчика
    If Len(a) > 0 Then
' Здесь мы сначала получаем объект
        Set c = mColl.Item(CStr(Int(a)))
' а потом вызываем его метод и передаем диапазон для вывода
' и в этой функции происходит вывод диапазона, а так-же "сдвиг" текущей позиции для вывода на одну строку вниз.
' Причем этот сдвиг происходит только в этом объекте, для этого листа,
' во всех остальных объектах свои счетчики и они передвигаются независимо от счетчиков других листов
        c.Out Sheets("распределено").Range(Sheets("распределено").Cells(1 + i, 1), Sheets("распределено").Cells(1 + i, 
8))
    End If
Next i


А потом простой цикл очистки коллекции.

По самим коллекциям почитай здесь и
здесь и вообще проштудируй на www.firststeps.ru разделы по Visual
Basic и VBA by Step.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
распределение данных по листам в книге
    #37673477
Фотография alex77755
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Макрос6 вполне можно заменить на:
Код: vbnet
1.
2.
3.
4.
5.
6.
Sub Очистить()
Dim J
For J = 1 To 27
    Sheets(J).Cells.ClearContents
Next J
End Sub


Короче будет. Основную процедуру тоже можно значительно урезать
...
Рейтинг: 0 / 0
распределение данных по листам в книге
    #37673491
Фотография alex77755
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сории строка должна быть такой:
Код: vbnet
1.
  Sheets(Trim(Str(J))).Cells.ClearContents
...
Рейтинг: 0 / 0
распределение данных по листам в книге
    #37673541
Фотография alex77755
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну а всё вместе где-то так:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
 Sub РАСКИДАТЬ()
 Dim M()
 Dim LR
 Dim R, C
 Очистить
 Dim L
 LR = Sheet3.Cells(Rows.Count, 1).End(xlUp).Row
 M = Sheet3.Range(Sheet3.Cells(1, 1), Sheet3.Cells(LR, 8)).Value
For R = 1 To 27
  For C = 1 To 8
      Sheets(Trim(Str(R))).Cells(1, C) = M(1, C)
Next C, R
For R = 2 To UBound(M)
 L = VBA.Right(M(R, 2), 2)
 LR = Sheets(Trim(Str(L))).Cells(Rows.Count, 1).End(xlUp).Row + 1
  For C = 1 To 8
      Sheets(Trim(Str(L))).Cells(LR, C) = IIf((C = 2 Or C = 4), Format(M(R, C), "##############"), M(R, C))
Next C, R
 End Sub
 
Sub Очистить()
Dim J
For J = 1 To 27
    Sheets(Trim(Str(J))).Cells.ClearContents
Next J
End Sub
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / распределение данных по листам в книге
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]