Новости:

Теперь на форум можно залогиниться / зарегистрироваться с помощью ВКонтакте. Уже существующие пользователи могут связать свою учетную запись с аккаунтом ВКонтакте одним кликом в профиле пользователя http://forum.msexcel.ru/index.php?action=profile;area=account

Главное меню

Перенос больших объемов информации в Excel

Автор MD, 11.10.2012, 11:56

« назад - далее »

MD

Добрый день!
Не могли бы Вы подсказать как поставить автоматическое заполнение соседних столбцов при заполнении первого? (или перемещение на следующие страницы книги)
То есть имеется список в блокноте большой длинны несколько миллионов строк. Сам же фаил весит 10 мб Обычный ctrl+c ctrl+v не помогает т. к. количество строк ограничено.
Суть вопроса как уместить длинный список в одном Excel файле.

С уважением MD
С уважением MD

alex77755

Могу помочь VB6, VBA
Alex77755@mail.ru

MD

Существует ли готовый макрос для этой ситуации? Или необходимо его создать вручную?
С уважением MD

Serge 007

Цитата: MD от 11.10.2012, 11:56
...список в блокноте большой длинны несколько миллионов строк...
Суть вопроса как уместить длинный список в одном Excel файле.
Никак. В Excel тупо меньше строк. Даже в 2013

ЗЫ На аватаре не Детектив Монк (MD) случаем? :)
Бесплатная помощь: www.excelworld.ru
Платная помощь: sergeyizotov@excelworld.ru
Ю-money: 41001419691823 | WMR:126292472390

Poltava

ув. Serge 007 а здесь Технические характеристики и ограничения Microsoft Excel 2003 написано что количество строк ограничено в пределах одного листа, а количество листов объемом памяти следовательно напрашивается вывод (3000000/65536=46 листов в книге а для 2007 так вообще 3 листа там ведь больше миллиона строк можно на листе) и это при том если использовать только один столбец так что по моему в теории это возможно но как потом с этим работать не особо понятно. Как по мне это задача для базы данных но если очень нужно именно в екселе то нужен пример файла в блокноте и результирующего файла в екселе ну или хотя бы пример того как должно выглядеть
Не пытайтесь спорить с дебилом. Иначе вы опуститесь до его уровня. Где он задавит вас своим опытом.

kuklp

Попробуйте:
Public Sub www()
   Dim a, i&, n&, m&, x&
   a = Split(CreateObject("Scripting.FileSystemObject").OpenTextFile("H:\Temp\Ваш_путь.txt", 1).ReadAll, vbNewLine)
   n = ActiveSheet.Rows.Count: m = ((UBound(a) + 1) \ n) + 1
   ReDim b(1 To n, 1 To m): m = 0
   For i = 0 To UBound(a)
       m = m + 1
       If i Mod n = 0 Then x = x + 1: m = 1
       b(m, x) = a(i)
   Next
   [a1].Resize(UBound(b), UBound(b, 2)) = b
End Sub

Я, как всегда, чертовски адекватен... Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771

MD

Нет я вовсе не детектив ;)

В качестве примера прикладываю текстовый фаил. Необходимо отредактировать макрос так, чтобы текст достигнув 50 строки продолжил "выкладоваться" на 4 столбце от предыдущего или переносился на следующий лист. Как вы поняли текст должен подвергаться редактированию до того как он попадает в excel.

P.S. Я не сильно подкован в данном вопросе поэтому прошу не судить строго.
С уважением MD

Serge 007

Цитата: Poltava от 12.10.2012, 11:07
...как потом с этим работать не особо понятно...
Ну да, я из этого и исходил. Предположил что всё-таки надо сохранить данные в виде БД, а не "каши" :)
Бесплатная помощь: www.excelworld.ru
Платная помощь: sergeyizotov@excelworld.ru
Ю-money: 41001419691823 | WMR:126292472390

kuklp

Вы писали:
Цитата: MD от 12.10.2012, 12:01как поставить автоматическое заполнение соседних столбцов при заполнении первого?
теперь:
Цитата: MD от 12.10.2012, 12:01достигнув 50 строки продолжил "выкладоваться" на 4 столбце от предыдущего
Почему на 4 столбце? В примере их семь.
Цитата: MD от 12.10.2012, 12:01Как вы поняли текст должен подвергаться редактированию до того как он попадает в excel.
С чего мы должны это понять? Где у Вас хоть словом упомянуто об этом? Да и представляю себе редакцию на несколько миллионов строк... А потом у Вас появятся еще какие-то условия и надо будет опять все переделывать?
Под Ваш пример:
Public Sub www()
    Dim a, i&, n&, m&, x&, b
    Application.ScreenUpdating = 0
    a = Split(CreateObject("Scripting.FileSystemObject").OpenTextFile("H:\Пример.txt", 1).ReadAll, vbLf)
    n = 50: m = ((UBound(a) + 1) \ n) + 1
    For i = 0 To UBound(a)
        m = m + 1
        If i Mod n = 0 Then x = IIf(x = 0, x + 1, x + 7): m = 1
        b = Split(a(i), ";")
        Cells(m, x).Resize(, UBound(b) + 1) = b
    Next
    Application.ScreenUpdating = -1
End Sub
Я, как всегда, чертовски адекватен... Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771

MD

Спасибо огромное за помощь!!! Стараюсь разобраться!
С уважением MD

Hugo121

За кадром остался основной вопрос - зачем это всё?

Может быть достаточно использовать в коде Сергея

a = Split(CreateObject("Scripting.FileSystemObject").OpenTextFile("H:\Пример.txt", 1).ReadAll, vbLf)

    For i = 0 To UBound(a)

и начинать получать результат?
webmoney: E265281470651 Z422237915069

MD

Друзья, никак не получается разобраться :-[
Может ли кто то представить готовый excel фаил?
Заранее спасибо!
С уважением MD

kuklp

Оба файла д.б. в одной папке.
Я, как всегда, чертовски адекватен... Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771

MD

С трудом прошу о помощи еще раз.
Мой чудо файл слишком велик даже для одного листа!
Не могли бы Вы мне предоставить excel файл, в котором при вставке, текст, доходя до самой последней строки оправлялся не на соседние столбцы, а прямо на следующие листы одной книги?
Буду признателен!

С уважением MD

kuklp

Public Sub www()
    Dim a, i&, n&, m&, x&, b, sh As Worksheet
    Application.ScreenUpdating = 0
    Set sh = ActiveSheet
    a = Split(CreateObject("Scripting.FileSystemObject").OpenTextFile(ThisWorkbook.Path & "\Пример.txt", 1).ReadAll, vbLf)
    n = ActiveSheet.Rows.Count ': m = ((UBound(a) + 1) \ n) + 1
    For i = 0 To UBound(a)
        m = m + 1
        If i Mod n = 0 Then x = IIf(x = 0, x + 1, x + 7): m = 1
        If x > 245 Then
            Set sh = Worksheets.Add(after:=Sheets(Sheets.Count))
            x = 1
        End If
        b = Split(a(i), ";")
        sh.Cells(m, x).Resize(, UBound(b) + 1) = b
    Next
    Application.ScreenUpdating = -1
End Sub
Я, как всегда, чертовски адекватен... Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771