powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Отбор данных
14 сообщений из 14, страница 1 из 1
Отбор данных
    #34073865
SirFisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Задача следующая:
Есть рабочая книга с несколькими листами. На листах - поля (столбцы) данных. Каждое поле имеет уникальное значение. Можно ли отобрать в новую книгу диапазон полей, если он начинается на одном листе, а заканчивается на следующем или через 1-2-n листов.
Заранее спасибо.
P.S. Файл-образец прилагаю.
...
Рейтинг: 0 / 0
Отбор данных
    #34073956
Фотография talgat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
диапазон полей - это что? Имена полей?

Рыба ищет-где глубже, человек-где больше рыбы.
...
Рейтинг: 0 / 0
Отбор данных
    #34073984
SirFisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
talgatдиапазон полей - это что? Имена полей?

Рыба ищет-где глубже, человек-где больше рыбы.

Да, имена полей. Они находятся в первой строке. Допустим, необходио отобрать поля с 7777 по 8225.
...
Рейтинг: 0 / 0
Отбор данных
    #34074085
Фотография talgat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Перебор ячеек 1 строки до пустой.
Перебор всех листов http://www.sql.ru/forum/actualthread.aspx?tid=352867&hl=%ef%e5%f0%e5%e1%ee%f0+%eb%e8%f1%f2%ee%e2

Рыба ищет-где глубже, человек-где больше рыбы.
...
Рейтинг: 0 / 0
Отбор данных
    #34076198
Ashton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В чем проблема? SirFisher, ты же вроде не новичек и советы даешь вроде как. Цикл по листа и столбцам.
...
Рейтинг: 0 / 0
Отбор данных
    #34076341
SirFisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AshtonВ чем проблема? SirFisher, ты же вроде не новичек и советы даешь вроде как. Цикл по листа и столбцам.

Не сочти за бестактность, но разреши я не буду подробно отвечать на твой вопрос.
Всё упирается во время. Если можешь помочь - буду очень признателен.
...
Рейтинг: 0 / 0
Отбор данных
    #34079137
Ashton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
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.
27.
28.
29.
30.
31.
32.
33.
34.
35.
Public Sub SelectFields()
    Dim wbCurrent As Excel.Workbook
    Dim wbNew As Excel.Workbook
    Dim ws As Excel.Worksheet
    Dim rng As Excel.Range
    Dim lngValue1 As Long
    Dim lngValue2 As Long
    Dim lngI As Long
    
    lngValue1 =  8344 
    lngValue2 =  8440 
    
    Application.ScreenUpdating = False
    
    Set wbNew = Application.Workbooks.Add
    Set wbCurrent = ThisWorkbook
    
    For Each ws In wbCurrent.Worksheets
        For Each rng In ws.Rows( 1 ).Cells
            If Not IsEmpty(rng) And ( _
              rng.Value >= lngValue1 And _
              rng.Value <= lngValue2) Then
                lngI = lngI +  1 
                rng.EntireColumn.Copy _
                  Destination:=wbNew.Worksheets( 1 ). _
                  Cells( 1 , lngI).EntireColumn
                
                If rng.Value > lngValue2 Then
                    Exit Sub
                End If
            End If
        Next rng
    Next ws
    
    Application.ScreenUpdating = True
End Sub
...
Рейтинг: 0 / 0
Отбор данных
    #34079197
SirFisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ashton
Спасибо. Очень признателен за помощь.
...
Рейтинг: 0 / 0
Отбор данных
    #34088480
SirFisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток.
Несколько изменил вышепредставленный код, написанный Ashton.
Код: plaintext
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.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
Public Sub SelectFields_1()
    Dim wbCurrent As Excel.Workbook
    Dim wbNew As Excel.Workbook
    Dim ws As Excel.Worksheet
    Dim rng As Excel.Range
    Dim lngValue1 As Long
    Dim lngValue2 As Long
    Dim lngI As Long
    Dim CurrSheet As Worksheet
    Dim nmCurrSheet As String
    Dim n, nn As Integer
    Dim nmbCol As Integer
   
'первое поле отбираемого диапазона
    lngValue1 =  7770 
'последнее поле отбираемого диапазона
    lngValue2 =  8630 
'количество заполняемых полей на листе
    nmbCol =  222 
    
    Application.ScreenUpdating = False

'   Создание рабочей книги с одним листом
    Workbooks.Add xlWorksheet

    
'   Определение текущей книги
    Set wbCurrent = ThisWorkbook
    
    For Each ws In wbCurrent.Worksheets
        For Each rng In ws.Rows( 1 ).Cells
            If Sheets.Count =  1  Then
                If Not IsEmpty(rng) And (rng.Value >= lngValue1 And rng.Value <= lngValue2) Then
                    lngI = lngI +  1 
                    nmCurrSheet = ActiveSheet.Name
                    rng.EntireColumn.Copy Destination:=Worksheets(nmCurrSheet).Cells( 1 , lngI).EntireColumn
                        If lngI <>  0  And lngI Mod nmbCol =  0  Then
                               Set CurrSheet = Sheets.Add(after:=Sheets(Sheets.Count))
                        End If
                End If
            End If
            
            If Sheets.Count >  1  Then
                If Not IsEmpty(rng) And (rng.Value >= lngValue1 And rng.Value <= lngValue2) Then
                    n = Sheets.Count -  1 
                    lngI = lngI +  1 
                    nn = lngI - nmbCol * n
                    nmCurrSheet = ActiveSheet.Name
                    rng.EntireColumn.Copy Destination:=Worksheets(nmCurrSheet).Cells( 1 , nn).EntireColumn
                        If lngI <>  0  And lngI Mod nmbCol =  0  Then
                            Set CurrSheet = Sheets.Add(after:=Sheets(Sheets.Count))
                        End If
                End If
            End If
            
            If rng.Value > lngValue2 Then
                Exit Sub
            End If
        Next rng
    Next ws
    
    Application.ScreenUpdating = True
End Sub
В результате цель достигнута - отбираются поля и распределяются по листам.
Однако макрос возвращает ошибки в ходе отбора данных из файла, приложенного в первом сообщении:
- при переходе с первого листа на второй дублируется поле 7991;
- на третьем листе вместо поля 8213 располагается поле 8440.
Прошу помочь с решением данных ошибок.
Заранее благодарен.
...
Рейтинг: 0 / 0
Отбор данных
    #34088495
vbapro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в описанном тобой случае соблюдаются оба условия по причине создания нового листа в первом блоке:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
If Sheets.Count =  1  Then
...
Set CurrSheet = Sheets.Add(after:=Sheets(Sheets.Count))
...
End If

If Sheets.Count >  1  Then
...
End If
храни количество листов в переменной или используй ...else...
...
Рейтинг: 0 / 0
Отбор данных
    #34088507
SirFisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vbapro
Спасибо за подсказку. Использование ...else... позволило убрать первую ошибку. Тем не менее, вместо поля 8213 располагается поле 8440. С чем это может быть связано?
...
Рейтинг: 0 / 0
Отбор данных
    #34088511
SirFisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос снимается. Анализ материалов показал, что ошибка в данных исходного файла.
Спасибо всем. Отдельное спасибо Ashton и vbapro
...
Рейтинг: 0 / 0
Отбор данных
    #34088686
SirFisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Какие изменения надо внести в код, чтобы можно было отбирать не поля целиком, а диапазон ячеек? Заранее спасибо за подсказку.
...
Рейтинг: 0 / 0
Отбор данных
    #34089971
SirFisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всё реализовано. Спасибо всем.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Отбор данных
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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