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

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

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

Да, имена полей. Они находятся в первой строке. Допустим, необходио отобрать поля с 7777 по 8225.
...
Рейтинг: 0 / 0
23.10.2006, 14:29:56
    #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
24.10.2006, 11:05:57
    #34076198
Ashton
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отбор данных
В чем проблема? SirFisher, ты же вроде не новичек и советы даешь вроде как. Цикл по листа и столбцам.
...
Рейтинг: 0 / 0
24.10.2006, 11:36:50
    #34076341
SirFisher
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отбор данных
AshtonВ чем проблема? SirFisher, ты же вроде не новичек и советы даешь вроде как. Цикл по листа и столбцам.

Не сочти за бестактность, но разреши я не буду подробно отвечать на твой вопрос.
Всё упирается во время. Если можешь помочь - буду очень признателен.
...
Рейтинг: 0 / 0
25.10.2006, 10:17:11
    #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
25.10.2006, 10:34:03
    #34079197
SirFisher
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отбор данных
Ashton
Спасибо. Очень признателен за помощь.
...
Рейтинг: 0 / 0
28.10.2006, 09:34:13
    #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
28.10.2006, 10:17:10
    #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
28.10.2006, 10:39:48
    #34088507
SirFisher
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отбор данных
vbapro
Спасибо за подсказку. Использование ...else... позволило убрать первую ошибку. Тем не менее, вместо поля 8213 располагается поле 8440. С чем это может быть связано?
...
Рейтинг: 0 / 0
28.10.2006, 10:48:51
    #34088511
SirFisher
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отбор данных
Вопрос снимается. Анализ материалов показал, что ошибка в данных исходного файла.
Спасибо всем. Отдельное спасибо Ashton и vbapro
...
Рейтинг: 0 / 0
28.10.2006, 15:58:17
    #34088686
SirFisher
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отбор данных
Какие изменения надо внести в код, чтобы можно было отбирать не поля целиком, а диапазон ячеек? Заранее спасибо за подсказку.
...
Рейтинг: 0 / 0
30.10.2006, 08:34:16
    #34089971
SirFisher
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отбор данных
Всё реализовано. Спасибо всем.
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Отбор данных / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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