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

Вход

Регистрация

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

 

= Мир MS Excel/Заполнение столбца значением с заданым шагом - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по Excel » Заполнение столбца значением с заданым шагом (Заполнение столбца значением с заданым шагом)
Заполнение столбца значением с заданым шагом
Alexander Дата: Четверг, 18.10.2012, 08:20 | Сообщение № 1
Группа: Гости
Доброго времени вам дорогие форумчане.
Эксель знаю на пользовательском уровне и в глубину не копал. По работе приходится выполнять разные задачи в экселе и по этой причине я обращаюсь к вам.
суть проблемы.
есть пустой столбец ( сума срок миллион) необходимо проставить число один через каждые 60 строк. как можно это сделать автоматически?

Основная задача СКРЫВАТЬ СТРОКИ С ОПРЕДЕЛЕННЫМ ИНТЕРВАЛОМ - КАЖДЫЕ 29 СТОРОК ОСТАВЛЯЯ 30.

Очень нужна ваша помощь.
понимаю что для гуру задача может быть примитивная, но для чайника невыполнимая.

прошу не отправлять меня на курсы и не советовать поискать на форуме. если есть ответ - напишите
спасибо что потратили время на прочтение данного сообщения
 
Ответить
СообщениеДоброго времени вам дорогие форумчане.
Эксель знаю на пользовательском уровне и в глубину не копал. По работе приходится выполнять разные задачи в экселе и по этой причине я обращаюсь к вам.
суть проблемы.
есть пустой столбец ( сума срок миллион) необходимо проставить число один через каждые 60 строк. как можно это сделать автоматически?

Основная задача СКРЫВАТЬ СТРОКИ С ОПРЕДЕЛЕННЫМ ИНТЕРВАЛОМ - КАЖДЫЕ 29 СТОРОК ОСТАВЛЯЯ 30.

Очень нужна ваша помощь.
понимаю что для гуру задача может быть примитивная, но для чайника невыполнимая.

прошу не отправлять меня на курсы и не советовать поискать на форуме. если есть ответ - напишите
спасибо что потратили время на прочтение данного сообщения

Автор - Alexander
Дата добавления - 18.10.2012 в 08:20
vikttur Дата: Четверг, 18.10.2012, 09:01 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2941
Репутация: 526 ±
Замечаний: 0% ±

Достали посыланиями? smile

=--(ОСТАТ(СТРОКА(1:1);60)=0)

Но для миллиона, наверное, макросом лучше.


Сообщение отредактировал vikttur - Четверг, 18.10.2012, 09:06
 
Ответить
СообщениеДостали посыланиями? smile

=--(ОСТАТ(СТРОКА(1:1);60)=0)

Но для миллиона, наверное, макросом лучше.

Автор - vikttur
Дата добавления - 18.10.2012 в 09:01
Alexander Дата: Четверг, 18.10.2012, 09:15 | Сообщение № 3
Группа: Гости
Ну вот не обучен я макросам.
если быть точным то строк 903000

есть опыт общения в разных форумах- есть такие раздражительные личности выучат одну программу и богами себя считают. Ну не работаю я в экселе просто иногда приходится.
 
Ответить
СообщениеНу вот не обучен я макросам.
если быть точным то строк 903000

есть опыт общения в разных форумах- есть такие раздражительные личности выучат одну программу и богами себя считают. Ну не работаю я в экселе просто иногда приходится.

Автор - Alexander
Дата добавления - 18.10.2012 в 09:15
Hugo Дата: Четверг, 18.10.2012, 10:18 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3255
Репутация: 707 ±
Замечаний: 0% ±

2019
Если иногда уже приходится - то думаю дальше будет только чаще...
На миллион строк я бы делал макросом - создаём массив высотой в этот миллион, циклом ставим номера, выгружаем массив в свободный столбец.
Пара минут написания кода, пара секунд работы.

[vba]
Code
Sub tt()
     Dim arr(1 To 903000, 1 To 1), i&, ii&

     For i = 1 To UBound(arr) Step 60
         ii = ii + 1
         arr(i, 1) = ii
     Next
     Range("A1").Resize(UBound(arr), 1) = arr
End Sub
[/vba]
Но Вы должны как минимум знать, что такое макрос, как его использовать, как чуть подогнать под задачу...
И диапазон (эти 903000) можно определить кодом, чтоб обработать именно всё, что нужно. Но для этого нужно видеть пример файла, его структуру (не нужно все строки smile )


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеЕсли иногда уже приходится - то думаю дальше будет только чаще...
На миллион строк я бы делал макросом - создаём массив высотой в этот миллион, циклом ставим номера, выгружаем массив в свободный столбец.
Пара минут написания кода, пара секунд работы.

[vba]
Code
Sub tt()
     Dim arr(1 To 903000, 1 To 1), i&, ii&

     For i = 1 To UBound(arr) Step 60
         ii = ii + 1
         arr(i, 1) = ii
     Next
     Range("A1").Resize(UBound(arr), 1) = arr
End Sub
[/vba]
Но Вы должны как минимум знать, что такое макрос, как его использовать, как чуть подогнать под задачу...
И диапазон (эти 903000) можно определить кодом, чтоб обработать именно всё, что нужно. Но для этого нужно видеть пример файла, его структуру (не нужно все строки smile )

Автор - Hugo
Дата добавления - 18.10.2012 в 10:18
Alexander Дата: Четверг, 18.10.2012, 10:39 | Сообщение № 5
Группа: Гости
ну вот об чем я и говорю, знающему человеку нужны секунды - не опытному дни. Я в автокаде тоже сложные задачи решаю а тут дуб дубом. столкнулся с проблемой и решить не могу сам. Основная проблема в том что есть огромный фаил ascii из него ( я полагаю там порядка 8 миллионов строк) так вот нужно от туда данные с шагом выдернуть. если интересно могу написать как я гемороюсь что бы данную операцию проделать. ( с учетом что в эксель можно только миллион строк воткнуть)
теперь по теме вопроса. Все работает за что огромное спасибо.
маленькое уточнение. мне не нужно увеличивать следующее число на 1. я удалил +1 в строке ii = ii + 1 и теперь макрос проставляет только 0
 
Ответить
Сообщениену вот об чем я и говорю, знающему человеку нужны секунды - не опытному дни. Я в автокаде тоже сложные задачи решаю а тут дуб дубом. столкнулся с проблемой и решить не могу сам. Основная проблема в том что есть огромный фаил ascii из него ( я полагаю там порядка 8 миллионов строк) так вот нужно от туда данные с шагом выдернуть. если интересно могу написать как я гемороюсь что бы данную операцию проделать. ( с учетом что в эксель можно только миллион строк воткнуть)
теперь по теме вопроса. Все работает за что огромное спасибо.
маленькое уточнение. мне не нужно увеличивать следующее число на 1. я удалил +1 в строке ii = ii + 1 и теперь макрос проставляет только 0

Автор - Alexander
Дата добавления - 18.10.2012 в 10:39
Serge_007 Дата: Четверг, 18.10.2012, 10:59 | Сообщение № 6
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Quote (Alexander)
я в автокаде сложные задачи решаю
В автокаде тоже есть VBA (как и в Excel)

Quote (Alexander)
в эксель можно только миллион строк воткнуть
Но Вам же не нужны все восемь миллионов?
Из них Вам реально нужны менее 140 тысяч


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
Quote (Alexander)
я в автокаде сложные задачи решаю
В автокаде тоже есть VBA (как и в Excel)

Quote (Alexander)
в эксель можно только миллион строк воткнуть
Но Вам же не нужны все восемь миллионов?
Из них Вам реально нужны менее 140 тысяч

Автор - Serge_007
Дата добавления - 18.10.2012 в 10:59
Hugo Дата: Четверг, 18.10.2012, 11:22 | Сообщение № 7
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3255
Репутация: 707 ±
Замечаний: 0% ±

2019
Можно макросом выбирать в массив только нужные строки непосредственно из текстового файла, затем массив выгрузить на лист (можно и сразу на лист, но т.к. всего будет ~140000 - через массив будет быстрее).


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеМожно макросом выбирать в массив только нужные строки непосредственно из текстового файла, затем массив выгрузить на лист (можно и сразу на лист, но т.к. всего будет ~140000 - через массив будет быстрее).

Автор - Hugo
Дата добавления - 18.10.2012 в 11:22
Pelena Дата: Четверг, 18.10.2012, 11:45 | Сообщение № 8
Группа: Админы
Ранг: Местный житель
Сообщений: 19197
Репутация: 4423 ±
Замечаний: ±

Excel 365 & Mac Excel
Игорь, а можно вопрос, так сказать, в плане расширения кругозора: зачем объявлять двумерный массив с одним столбцом?


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеИгорь, а можно вопрос, так сказать, в плане расширения кругозора: зачем объявлять двумерный массив с одним столбцом?

Автор - Pelena
Дата добавления - 18.10.2012 в 11:45
Hugo Дата: Четверг, 18.10.2012, 12:27 | Сообщение № 9
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3255
Репутация: 707 ±
Замечаний: 0% ±

2019
Потому что у каждой ячейки есть ДВЕ координаты.
Если объявить одномерный - его придётся перед выгрузкой транспонировать, что лишнее действие.
А с миллионом оно скорее всего и не получится (может в 2010 эту проблему решили, не знаю...).
Поэтому проще объявить двумерный, заполнить двумерный, выгрузить двумерный. Сколько столбцов - не важно.


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеПотому что у каждой ячейки есть ДВЕ координаты.
Если объявить одномерный - его придётся перед выгрузкой транспонировать, что лишнее действие.
А с миллионом оно скорее всего и не получится (может в 2010 эту проблему решили, не знаю...).
Поэтому проще объявить двумерный, заполнить двумерный, выгрузить двумерный. Сколько столбцов - не важно.

Автор - Hugo
Дата добавления - 18.10.2012 в 12:27
Alexander Дата: Четверг, 18.10.2012, 12:27 | Сообщение № 10
Группа: Гости
Serge_007, - да действительно все 8 не нужны но единственная программа которая открыла фаил ascii это просмоторщик в тотал командоре без возможности редактирования.

Hugo, - эта реально можно сделать? у меня ascii фаил весит 700 мб. если возможно из него выдрать значения с шагом Х на прямую в эксель это вообще будет супер

в данный момент я делаю так - в тотал командоре разбиваю фаил по 25 мб потом открываю части и копирую в эксель . а потом уже с помощью предложенного макроса скрываю не нужные мне строки.
 
Ответить
СообщениеSerge_007, - да действительно все 8 не нужны но единственная программа которая открыла фаил ascii это просмоторщик в тотал командоре без возможности редактирования.

Hugo, - эта реально можно сделать? у меня ascii фаил весит 700 мб. если возможно из него выдрать значения с шагом Х на прямую в эксель это вообще будет супер

в данный момент я делаю так - в тотал командоре разбиваю фаил по 25 мб потом открываю части и копирую в эксель . а потом уже с помощью предложенного макроса скрываю не нужные мне строки.

Автор - Alexander
Дата добавления - 18.10.2012 в 12:27
Pelena Дата: Четверг, 18.10.2012, 12:29 | Сообщение № 11
Группа: Админы
Ранг: Местный житель
Сообщений: 19197
Репутация: 4423 ±
Замечаний: ±

Excel 365 & Mac Excel
Quote (Hugo)
Если объявить одномерный - его придётся перед выгрузкой транспонировать

Поняла, спасибо


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
Сообщение
Quote (Hugo)
Если объявить одномерный - его придётся перед выгрузкой транспонировать

Поняла, спасибо

Автор - Pelena
Дата добавления - 18.10.2012 в 12:29
Hugo Дата: Четверг, 18.10.2012, 12:36 | Сообщение № 12
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3255
Репутация: 707 ±
Замечаний: 0% ±

2019
700 мб не обрабатывал, 20-30 было.
Думаю что и 700 можно прочитать.
Дайте небольшой кусок файла - отрежьте тоталом ~100 кб текста, ЗААРХИВИРУЙТЕ и покажите (если личное/секретное - шлите на почту или давайте 20 строк изменённых в блокноте данных).
Я смогу скорее всего вечером глянуть - но думаю другие сделают раньше, там ничего сложного нет.


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
Сообщение700 мб не обрабатывал, 20-30 было.
Думаю что и 700 можно прочитать.
Дайте небольшой кусок файла - отрежьте тоталом ~100 кб текста, ЗААРХИВИРУЙТЕ и покажите (если личное/секретное - шлите на почту или давайте 20 строк изменённых в блокноте данных).
Я смогу скорее всего вечером глянуть - но думаю другие сделают раньше, там ничего сложного нет.

Автор - Hugo
Дата добавления - 18.10.2012 в 12:36
RAN Дата: Четверг, 18.10.2012, 12:37 | Сообщение № 13
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Попробуйте
[vba]
Code
Sub qq()
Dim a, aa
a = Array(1, 2, 3)
[a1].Resize(, 3) = a
[e1].Resize(3) = a
aa = Application.Transpose(a)
[g1].Resize(3) = aa
Stop
End Sub
[/vba]

и еще - Application.Transpose имеет ограничение размера (вроде 65536, не помню точно)


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеПопробуйте
[vba]
Code
Sub qq()
Dim a, aa
a = Array(1, 2, 3)
[a1].Resize(, 3) = a
[e1].Resize(3) = a
aa = Application.Transpose(a)
[g1].Resize(3) = aa
Stop
End Sub
[/vba]

и еще - Application.Transpose имеет ограничение размера (вроде 65536, не помню точно)

Автор - RAN
Дата добавления - 18.10.2012 в 12:37
Alexander Дата: Четверг, 18.10.2012, 12:43 | Сообщение № 14
Группа: Гости
простите а как положить сюда файлик?
 
Ответить
Сообщениепростите а как положить сюда файлик?

Автор - Alexander
Дата добавления - 18.10.2012 в 12:43
Hugo Дата: Четверг, 18.10.2012, 12:47 | Сообщение № 15
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3255
Репутация: 707 ±
Замечаний: 0% ±

2019
Хотя вот попробуйте - вариант не быстрый, но рабочий:

[vba]
Code

Option Explicit

Sub readtxt()
     Dim i&, ii&, x$, strFilePath$, objTS
     Application.ScreenUpdating = False

     strFilePath = "C:\test.txt"
     Set objTS = CreateObject("Scripting.FileSystemObject").OpenTextFile(strFilePath, 1)

     Do Until objTS.AtEndOfStream
         x = objTS.Readline
         i = i + 1
         If i Mod 8 = 0 Then
             Application.StatusBar = "Read line " & i
             ii = ii + 1
             Cells(ii, 1) = x
         End If
     Loop

     objTS.Close
     Set objTS = Nothing
     Application.StatusBar = False
     Application.ScreenUpdating = True
End Sub
[/vba]


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеХотя вот попробуйте - вариант не быстрый, но рабочий:

[vba]
Code

Option Explicit

Sub readtxt()
     Dim i&, ii&, x$, strFilePath$, objTS
     Application.ScreenUpdating = False

     strFilePath = "C:\test.txt"
     Set objTS = CreateObject("Scripting.FileSystemObject").OpenTextFile(strFilePath, 1)

     Do Until objTS.AtEndOfStream
         x = objTS.Readline
         i = i + 1
         If i Mod 8 = 0 Then
             Application.StatusBar = "Read line " & i
             ii = ii + 1
             Cells(ii, 1) = x
         End If
     Loop

     objTS.Close
     Set objTS = Nothing
     Application.StatusBar = False
     Application.ScreenUpdating = True
End Sub
[/vba]

Автор - Hugo
Дата добавления - 18.10.2012 в 12:47
Hugo Дата: Четверг, 18.10.2012, 12:52 | Сообщение № 16
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3255
Репутация: 707 ±
Замечаний: 0% ±

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


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеЧтоб положить файлик - нужно зарегистрироваться.
Но Вы можете воспользоваться любым файлообменником.
Другое дело, что не с любого файлообменника мы (например лично я) можем в рабочее время качать.

Автор - Hugo
Дата добавления - 18.10.2012 в 12:52
Alexander Дата: Четверг, 18.10.2012, 12:57 | Сообщение № 17
Группа: Пользователи
Ранг: Новичок
Сообщений: 29
Репутация: 0 ±
Замечаний: 0% ±

Hugo, простите а не могу понять где в макросе указывается шаг

еще попутно вопрос если я имею в ячейке текст следующего формата

55681242.39,505598694.85,-25.47
можно ли его разбеть по ячейкам с учетом разделения запятой? средствами экселя. я в таких случаях копирую ч блакнот потом вставляю в эксель и использую мастер вставки


Сообщение отредактировал Alexander - Четверг, 18.10.2012, 13:47
 
Ответить
СообщениеHugo, простите а не могу понять где в макросе указывается шаг

еще попутно вопрос если я имею в ячейке текст следующего формата

55681242.39,505598694.85,-25.47
можно ли его разбеть по ячейкам с учетом разделения запятой? средствами экселя. я в таких случаях копирую ч блакнот потом вставляю в эксель и использую мастер вставки

Автор - Alexander
Дата добавления - 18.10.2012 в 12:57
Hugo Дата: Четверг, 18.10.2012, 13:07 | Сообщение № 18
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3255
Репутация: 707 ±
Замечаний: 0% ±

2019
Шаг:
[vba]
Code
If i Mod 8 = 0 Then
[/vba]Т.е. берём каждую 8-ю строку.
Ну и можно сразу бить по запятым (берём перве 3 части):
[vba]
Code
Range(Cells(ii, 1), Cells(ii, 3)) = Split(x, ",")
[/vba]и формат попутно преобразовывать, но это уже чуть сложнее.


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеШаг:
[vba]
Code
If i Mod 8 = 0 Then
[/vba]Т.е. берём каждую 8-ю строку.
Ну и можно сразу бить по запятым (берём перве 3 части):
[vba]
Code
Range(Cells(ii, 1), Cells(ii, 3)) = Split(x, ",")
[/vba]и формат попутно преобразовывать, но это уже чуть сложнее.

Автор - Hugo
Дата добавления - 18.10.2012 в 13:07
Alexander Дата: Четверг, 18.10.2012, 13:10 | Сообщение № 19
Группа: Пользователи
Ранг: Новичок
Сообщений: 29
Репутация: 0 ±
Замечаний: 0% ±

Hugo, строку

Range(Cells(ii, 1), Cells(ii, 3)) = Split(x, ",")

куда нужно вставить в макросе?

что вы имеете в виду под словом преобразовывать формат?

_____________________________________________________

ура макрос скушал фаил весом 700 мв - супер вообще спасибо огромное. реально помогли


Сообщение отредактировал Alexander - Четверг, 18.10.2012, 13:19
 
Ответить
СообщениеHugo, строку

Range(Cells(ii, 1), Cells(ii, 3)) = Split(x, ",")

куда нужно вставить в макросе?

что вы имеете в виду под словом преобразовывать формат?

_____________________________________________________

ура макрос скушал фаил весом 700 мв - супер вообще спасибо огромное. реально помогли

Автор - Alexander
Дата добавления - 18.10.2012 в 13:10
Hugo Дата: Четверг, 18.10.2012, 13:18 | Сообщение № 20
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3255
Репутация: 707 ±
Замечаний: 0% ±

2019
Строку
[vba]
Code
Range(Cells(ii, 1), Cells(ii, 3)) = Split(x, ",")
[/vba]вместо строки
[vba]
Code
Cells(ii, 1) = x
[/vba]
Формат - это чтоб Эксель видел числа как числа, а не как текст. Ну и там ещё разделители нужно уточнить - может быть в Экселе десятичный тоже запятая, а не точка. Это как у кого...
Хотя формат можно и потом преобразовать - выделяем по одному столбцы целиком и данные-текст по столбцам-готово.


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеСтроку
[vba]
Code
Range(Cells(ii, 1), Cells(ii, 3)) = Split(x, ",")
[/vba]вместо строки
[vba]
Code
Cells(ii, 1) = x
[/vba]
Формат - это чтоб Эксель видел числа как числа, а не как текст. Ну и там ещё разделители нужно уточнить - может быть в Экселе десятичный тоже запятая, а не точка. Это как у кого...
Хотя формат можно и потом преобразовать - выделяем по одному столбцы целиком и данные-текст по столбцам-готово.

Автор - Hugo
Дата добавления - 18.10.2012 в 13:18
Мир MS Excel » Вопросы и решения » Вопросы по Excel » Заполнение столбца значением с заданым шагом (Заполнение столбца значением с заданым шагом)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

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