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

Вход

Регистрация

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

 

= Мир MS Excel/Форматирование большого документа - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Форматирование большого документа
Gringo Дата: Четверг, 28.02.2013, 17:35 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 9
Репутация: 0 ±
Замечаний: 0% ±

Здравствуйте, к сожалению своими силами в создании макроса далеко я не ушёл, прошу помощи разобраться в форматировании.

Объясню кратко суть проблемы.

Документ состоит из много-много таких маленьких кусочков, идущих один за другим.
Как мне убрать весь текст из него, оставив только строчки, где указаны все данные по расходным и возвратным накладным.
и второе, как в строчках "Возвратные накладные" значения даты и номер накладной поменять на дату и номер из столбцов смежной страницы т.е.
к примеру:
ВозвратнаяНакладная Е-00001022 11.01.12 номер и дату поменять на 34128М13214 05.01.12г. из этой же строки
К сообщению приложен файл: 7987860.xls (19.5 Kb)
 
Ответить
СообщениеЗдравствуйте, к сожалению своими силами в создании макроса далеко я не ушёл, прошу помощи разобраться в форматировании.

Объясню кратко суть проблемы.

Документ состоит из много-много таких маленьких кусочков, идущих один за другим.
Как мне убрать весь текст из него, оставив только строчки, где указаны все данные по расходным и возвратным накладным.
и второе, как в строчках "Возвратные накладные" значения даты и номер накладной поменять на дату и номер из столбцов смежной страницы т.е.
к примеру:
ВозвратнаяНакладная Е-00001022 11.01.12 номер и дату поменять на 34128М13214 05.01.12г. из этой же строки

Автор - Gringo
Дата добавления - 28.02.2013 в 17:35
Michael_S Дата: Четверг, 28.02.2013, 18:14 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 2012
Репутация: 373 ±
Замечаний: 0% ±

Excel2016
ни ... (чего) не понятно.
 
Ответить
Сообщениени ... (чего) не понятно.

Автор - Michael_S
Дата добавления - 28.02.2013 в 18:14
Gringo Дата: Четверг, 28.02.2013, 19:06 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 9
Репутация: 0 ±
Замечаний: 0% ±

Цитата (Michael_S)
ни ... (чего) не понятно.


вроде просто всё изложил)

Грубо говоря имеется документ, который содержит некоторую текстовую шапку, затем идёт шапка таблицы и собственно сама таблица, которая содержит список возвратных и расходных накладных. (считайте это 1 файлом)
и подобных файлов огромное количество, удалять у каждого шапку и менять вручную номера накладных и их даты очень долгая работа. Требуется рациональный подход, в макрасах не нашёл подобного условия для проверки, замены и удаления ненужного текста.
 
Ответить
Сообщение
Цитата (Michael_S)
ни ... (чего) не понятно.


вроде просто всё изложил)

Грубо говоря имеется документ, который содержит некоторую текстовую шапку, затем идёт шапка таблицы и собственно сама таблица, которая содержит список возвратных и расходных накладных. (считайте это 1 файлом)
и подобных файлов огромное количество, удалять у каждого шапку и менять вручную номера накладных и их даты очень долгая работа. Требуется рациональный подход, в макрасах не нашёл подобного условия для проверки, замены и удаления ненужного текста.

Автор - Gringo
Дата добавления - 28.02.2013 в 19:06
Michael_S Дата: Четверг, 28.02.2013, 19:54 | Сообщение № 4
Группа: Друзья
Ранг: Старожил
Сообщений: 2012
Репутация: 373 ±
Замечаний: 0% ±

Excel2016
Цитата (Gringo)
вроде просто всё изложил)

изложено несложно, но изложение и пример не совпадают. Да и в примере непонятки (и, по всей видимости, не только мне) - что из чего нужно получить.
 
Ответить
Сообщение
Цитата (Gringo)
вроде просто всё изложил)

изложено несложно, но изложение и пример не совпадают. Да и в примере непонятки (и, по всей видимости, не только мне) - что из чего нужно получить.

Автор - Michael_S
Дата добавления - 28.02.2013 в 19:54
Gringo Дата: Четверг, 28.02.2013, 20:24 | Сообщение № 5
Группа: Пользователи
Ранг: Прохожий
Сообщений: 9
Репутация: 0 ±
Замечаний: 0% ±

Цитата (Michael_S)
изложено несложно, но изложение и пример не совпадают. Да и в примере непонятки (и, по всей видимости, не только мне) - что из чего нужно получить.


сделал более понятно. На втором листе сделал вид к которому после форматирования я прихожу.

Лист 1 исходный пример как это выглядит в документе) идут данные по каждой точке, описание заканчиваются начинается следующая и т.д. документ раздувается на 6-10 тысяч строк, удалять вручную ну очень долго.
Лист 2 документ на выходе.
Убираются лишние строки, в строках Возвратные накладные заменяются дата и номер накладной.
К сообщению приложен файл: 5365394.xls (30.5 Kb)
 
Ответить
Сообщение
Цитата (Michael_S)
изложено несложно, но изложение и пример не совпадают. Да и в примере непонятки (и, по всей видимости, не только мне) - что из чего нужно получить.


сделал более понятно. На втором листе сделал вид к которому после форматирования я прихожу.

Лист 1 исходный пример как это выглядит в документе) идут данные по каждой точке, описание заканчиваются начинается следующая и т.д. документ раздувается на 6-10 тысяч строк, удалять вручную ну очень долго.
Лист 2 документ на выходе.
Убираются лишние строки, в строках Возвратные накладные заменяются дата и номер накладной.

Автор - Gringo
Дата добавления - 28.02.2013 в 20:24
Ralf Дата: Четверг, 28.02.2013, 20:43 | Сообщение № 6
Группа: Пользователи
Ранг: Участник
Сообщений: 71
Репутация: 5 ±
Замечаний: 0% ±

можно без макросов по следующей схеме:
1. выделяем всё, нажимаем "объединение ячеек" - объединённые ячейки разъединяются
2. выделяем столбцы с 1 по 7 и сортируем по 1му*
3. удаляем весь текст, оказавшийся внизу.
если важен исходный порядок - предварительно вводим дополнительный 8й столбец с номерами по порядку сплошняком, и после удаления текстовых строк сортируем уже по нему, чтобы восстановить порядок следования записей.

* замену номеров не учёл - тогда не по 7й выделяем, а по 10й или 11й
Саму замену можно макросом осуществить или через вспомогательный столбец с формулами если(), или же отсортировать по 10му и скопировать


Сообщение отредактировал Ralf - Четверг, 28.02.2013, 20:58
 
Ответить
Сообщениеможно без макросов по следующей схеме:
1. выделяем всё, нажимаем "объединение ячеек" - объединённые ячейки разъединяются
2. выделяем столбцы с 1 по 7 и сортируем по 1му*
3. удаляем весь текст, оказавшийся внизу.
если важен исходный порядок - предварительно вводим дополнительный 8й столбец с номерами по порядку сплошняком, и после удаления текстовых строк сортируем уже по нему, чтобы восстановить порядок следования записей.

* замену номеров не учёл - тогда не по 7й выделяем, а по 10й или 11й
Саму замену можно макросом осуществить или через вспомогательный столбец с формулами если(), или же отсортировать по 10му и скопировать

Автор - Ralf
Дата добавления - 28.02.2013 в 20:43
_Boroda_ Дата: Четверг, 28.02.2013, 21:35 | Сообщение № 7
Группа: Админы
Ранг: Местный житель
Сообщений: 16718
Репутация: 6505 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Такой вариант
[vba]
Код
Sub macr1()
  Application.ScreenUpdating = 0' не обновлять экран
  sn_ = ActiveSheet.Name 'sn_ - это номер тек. листа
  Sheets.Add 'вставить новый лист
With Sheets(sn_) 'работаем в листе sn_
      .Cells.UnMerge 'разъединить все ячейки
      .Columns("J:K").Replace What:=" ", Replacement:="", LookAt:=xlWhole 'в столбцах jk заменить все ячейки с пробелами на пустые ячейки
      .Columns("J:K").Copy' скопировать столбцы jk
      .Columns("C:D").PasteSpecial Paste:=xlPasteAll, SkipBlanks:=True 'вставить в столбцы cd спецвставкой с галкой "пропускать пустые ячейки"
      .Columns("A:G").AutoFilter Field:=1, Criteria1:=">0", Operator:=xlAnd 'поставить автофильтр и поставить фильтр по столбцу а все больше нуля  
      .Columns("A:G").SpecialCells(xlCellTypeVisible).Copy ActiveSheet.Range("A1") 'скопировать видимые ячейкии вставить в новый лист (который вставили раньше)
End With 'конец работы в листе sn_
      Range("A1").EntireRow.Delete 'на новом листе грохнуть первую строку
      Range("A1").EntireColumn.Delete 'грохнуть первый столбец
      Columns("A:F").EntireColumn.AutoFit' поставить автоширину на оставшиеся столбцы
  Application.ScreenUpdating = 1 'обновлять экран как обычно
End Sub
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеТакой вариант
[vba]
Код
Sub macr1()
  Application.ScreenUpdating = 0' не обновлять экран
  sn_ = ActiveSheet.Name 'sn_ - это номер тек. листа
  Sheets.Add 'вставить новый лист
With Sheets(sn_) 'работаем в листе sn_
      .Cells.UnMerge 'разъединить все ячейки
      .Columns("J:K").Replace What:=" ", Replacement:="", LookAt:=xlWhole 'в столбцах jk заменить все ячейки с пробелами на пустые ячейки
      .Columns("J:K").Copy' скопировать столбцы jk
      .Columns("C:D").PasteSpecial Paste:=xlPasteAll, SkipBlanks:=True 'вставить в столбцы cd спецвставкой с галкой "пропускать пустые ячейки"
      .Columns("A:G").AutoFilter Field:=1, Criteria1:=">0", Operator:=xlAnd 'поставить автофильтр и поставить фильтр по столбцу а все больше нуля  
      .Columns("A:G").SpecialCells(xlCellTypeVisible).Copy ActiveSheet.Range("A1") 'скопировать видимые ячейкии вставить в новый лист (который вставили раньше)
End With 'конец работы в листе sn_
      Range("A1").EntireRow.Delete 'на новом листе грохнуть первую строку
      Range("A1").EntireColumn.Delete 'грохнуть первый столбец
      Columns("A:F").EntireColumn.AutoFit' поставить автоширину на оставшиеся столбцы
  Application.ScreenUpdating = 1 'обновлять экран как обычно
End Sub
[/vba]

Автор - _Boroda_
Дата добавления - 28.02.2013 в 21:35
Gringo Дата: Четверг, 28.02.2013, 22:19 | Сообщение № 8
Группа: Пользователи
Ранг: Прохожий
Сообщений: 9
Репутация: 0 ±
Замечаний: 0% ±

Цитата (_Boroda_)
Такой вариант


спасибо большое, если не трудно, можете мне, недалёкому, объяснить значение каждой строчки. Чтобы в подобных документах выполнять подобные преобразования самому впредь.
Заранее благодарен smile
 
Ответить
Сообщение
Цитата (_Boroda_)
Такой вариант


спасибо большое, если не трудно, можете мне, недалёкому, объяснить значение каждой строчки. Чтобы в подобных документах выполнять подобные преобразования самому впредь.
Заранее благодарен smile

Автор - Gringo
Дата добавления - 28.02.2013 в 22:19
Gringo Дата: Четверг, 28.02.2013, 22:58 | Сообщение № 9
Группа: Пользователи
Ранг: Прохожий
Сообщений: 9
Репутация: 0 ±
Замечаний: 0% ±

.Columns("A:G").AutoFilter Field:=1, Criteria1:=">0", Operator:=xlAnd 'поставить автофильтр и поставить фильтр по столбцу а все больше нуля

вот тут непонятно для чего этот фильтр? и фильтр больше 0, что нам это условие даёт?
И ещё вопрос зачем мы удаляем первую строку и первый столбец?
 
Ответить
Сообщение.Columns("A:G").AutoFilter Field:=1, Criteria1:=">0", Operator:=xlAnd 'поставить автофильтр и поставить фильтр по столбцу а все больше нуля

вот тут непонятно для чего этот фильтр? и фильтр больше 0, что нам это условие даёт?
И ещё вопрос зачем мы удаляем первую строку и первый столбец?

Автор - Gringo
Дата добавления - 28.02.2013 в 22:58
_Boroda_ Дата: Четверг, 28.02.2013, 23:26 | Сообщение № 10
Группа: Админы
Ранг: Местный житель
Сообщений: 16718
Репутация: 6505 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Фильтр "больше 0" выводит нам только те строки, где в столбце А есть цифры.
В первой строке у нас кусок шапки (красный такой), а в первом столбце цифры, которые в Вашем листе 2 отсутствуют. Если хотите оставить, то не удаляйте.


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеФильтр "больше 0" выводит нам только те строки, где в столбце А есть цифры.
В первой строке у нас кусок шапки (красный такой), а в первом столбце цифры, которые в Вашем листе 2 отсутствуют. Если хотите оставить, то не удаляйте.

Автор - _Boroda_
Дата добавления - 28.02.2013 в 23:26
Gringo Дата: Четверг, 28.02.2013, 23:59 | Сообщение № 11
Группа: Пользователи
Ранг: Прохожий
Сообщений: 9
Репутация: 0 ±
Замечаний: 0% ±

теперь ясно smile Если не затруднит, можете посоветовать какую-нибудь литературу по макросам и встроенному языку?
 
Ответить
Сообщениетеперь ясно smile Если не затруднит, можете посоветовать какую-нибудь литературу по макросам и встроенному языку?

Автор - Gringo
Дата добавления - 28.02.2013 в 23:59
Gringo Дата: Пятница, 01.03.2013, 15:08 | Сообщение № 12
Группа: Пользователи
Ранг: Прохожий
Сообщений: 9
Репутация: 0 ±
Замечаний: 0% ±

Цитата (_Boroda_)
библиотека

Спасибо smile

дальше своими силами и знаниями построил такого монстра, чтоб документ довести до ума
[vba]
Код

Private Sub CommandButton1_Click()
'основная замена и удаление лишних строк

Application.ScreenUpdating = 0
sn_ = ActiveSheet.Name
Sheets.Add
With Sheets(sn_)
       .Cells.UnMerge
       .Columns("J:K").Replace What:=" ", Replacement:="", LookAt:=xlWhole
       .Columns("J:K").Copy
       .Columns("C:D").PasteSpecial Paste:=xlPasteAll, SkipBlanks:=True
       .Columns("A:G").AutoFilter Field:=1, Criteria1:=">0", Operator:=xlAnd
       .Columns("A:G").SpecialCells(xlCellTypeVisible).Copy ActiveSheet.Range("A1")
End With
       Range("A1").EntireRow.Delete
       Range("A1").EntireColumn.Delete
       Columns("A:F").EntireColumn.AutoFit
Application.ScreenUpdating = 1

'замена названий

Cells.Replace What:="Расходная Накладная", Replacement:="Приход товара", _
           LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:= _
           False, ReplaceFormat:=False
       ActiveWindow.ScrollColumn = 4
       ActiveWindow.ScrollColumn = 3
       ActiveWindow.ScrollColumn = 2
       ActiveWindow.ScrollColumn = 1
       Cells.Replace What:="РасходнаяНакладная", Replacement:="Приход товара", _
           LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:= _
           False, ReplaceFormat:=False
       Cells.Replace What:="ВозвратнаяНакладная", Replacement:="Возврат товара", _
           LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:= _
           False, ReplaceFormat:=False
       Cells.Replace What:="ПополнениеЛичногоСчета", Replacement:="Оплата безнал" _
           , LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat _
           :=False, ReplaceFormat:=False
              
           'сортировка по возрастанию и удаление столбца
          Columns("A:A").Select
       Range("A1:F30000").Sort Key1:=Range("A1"), Order1:=xlAscending, Header:= _
           xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
           DataOption1:=xlSortNormal
       Columns("F:F").Select
       Selection.Delete Shift:=xlToLeft
       Range("M7").Select
End Sub
[/vba]

как мне задать сортировку, чтобы сортировались не 30000 тысяч записей, а весь столбец F, независимо от его размера?
Документ 60000 строк переваривать таким образом не получилось, только частями.


Сообщение отредактировал Gringo - Пятница, 01.03.2013, 16:01
 
Ответить
Сообщение
Цитата (_Boroda_)
библиотека

Спасибо smile

дальше своими силами и знаниями построил такого монстра, чтоб документ довести до ума
[vba]
Код

Private Sub CommandButton1_Click()
'основная замена и удаление лишних строк

Application.ScreenUpdating = 0
sn_ = ActiveSheet.Name
Sheets.Add
With Sheets(sn_)
       .Cells.UnMerge
       .Columns("J:K").Replace What:=" ", Replacement:="", LookAt:=xlWhole
       .Columns("J:K").Copy
       .Columns("C:D").PasteSpecial Paste:=xlPasteAll, SkipBlanks:=True
       .Columns("A:G").AutoFilter Field:=1, Criteria1:=">0", Operator:=xlAnd
       .Columns("A:G").SpecialCells(xlCellTypeVisible).Copy ActiveSheet.Range("A1")
End With
       Range("A1").EntireRow.Delete
       Range("A1").EntireColumn.Delete
       Columns("A:F").EntireColumn.AutoFit
Application.ScreenUpdating = 1

'замена названий

Cells.Replace What:="Расходная Накладная", Replacement:="Приход товара", _
           LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:= _
           False, ReplaceFormat:=False
       ActiveWindow.ScrollColumn = 4
       ActiveWindow.ScrollColumn = 3
       ActiveWindow.ScrollColumn = 2
       ActiveWindow.ScrollColumn = 1
       Cells.Replace What:="РасходнаяНакладная", Replacement:="Приход товара", _
           LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:= _
           False, ReplaceFormat:=False
       Cells.Replace What:="ВозвратнаяНакладная", Replacement:="Возврат товара", _
           LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:= _
           False, ReplaceFormat:=False
       Cells.Replace What:="ПополнениеЛичногоСчета", Replacement:="Оплата безнал" _
           , LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat _
           :=False, ReplaceFormat:=False
              
           'сортировка по возрастанию и удаление столбца
          Columns("A:A").Select
       Range("A1:F30000").Sort Key1:=Range("A1"), Order1:=xlAscending, Header:= _
           xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
           DataOption1:=xlSortNormal
       Columns("F:F").Select
       Selection.Delete Shift:=xlToLeft
       Range("M7").Select
End Sub
[/vba]

как мне задать сортировку, чтобы сортировались не 30000 тысяч записей, а весь столбец F, независимо от его размера?
Документ 60000 строк переваривать таким образом не получилось, только частями.

Автор - Gringo
Дата добавления - 01.03.2013 в 15:08
RAN Дата: Пятница, 01.03.2013, 15:18 | Сообщение № 13
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
[vba]
Код
Range("A:F").Sort
[/vba]
Не пробовали? smile


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение[vba]
Код
Range("A:F").Sort
[/vba]
Не пробовали? smile

Автор - RAN
Дата добавления - 01.03.2013 в 15:18
Gringo Дата: Пятница, 01.03.2013, 15:26 | Сообщение № 14
Группа: Пользователи
Ранг: Прохожий
Сообщений: 9
Репутация: 0 ±
Замечаний: 0% ±

Спасибо, а я сижу велосипед изобретаю))) Только не ясно мне, почему ручной ввод параметра 60000 он игнорирует, выбрасывая ошибку, а без указания интервала пережёвывает, занимает этот процесс секунд 5-15)


Сообщение отредактировал Gringo - Пятница, 01.03.2013, 15:54
 
Ответить
СообщениеСпасибо, а я сижу велосипед изобретаю))) Только не ясно мне, почему ручной ввод параметра 60000 он игнорирует, выбрасывая ошибку, а без указания интервала пережёвывает, занимает этот процесс секунд 5-15)

Автор - Gringo
Дата добавления - 01.03.2013 в 15:26
  • Страница 1 из 1
  • 1
Поиск:

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