Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.03.2014, 20:40   #11
gling
Форумчанин
 
Регистрация: 23.01.2010
Сообщений: 261
По умолчанию

Не разбираясь в макросах на чужих примерах собрал Вам такую штуку. Попробуйте на своих данных. Только приходится в строку 5000 программно вставлять значения, иначе этот "зверь" нормально работать отказывается. Может спецы подскажут почему. На данных в 250 строк не пробовал, не знаю как будет работать.
Вложения
Тип файла: rar Зарплата.rar (25.4 Кб, 13 просмотров)
gling вне форума Ответить с цитированием
Старый 25.03.2014, 20:01   #12
godkiller07
Пользователь
 
Регистрация: 03.03.2014
Сообщений: 22
По умолчанию

Цитата:
Сообщение от gling Посмотреть сообщение
Не разбираясь в макросах на чужих примерах собрал Вам такую штуку. Попробуйте на своих данных. Только приходится в строку 5000 программно вставлять значения, иначе этот "зверь" нормально работать отказывается. Может спецы подскажут почему. На данных в 250 строк не пробовал, не знаю как будет работать.

Спасибо, попробовал, почти получилось, попробую на 100% подогнать к своим данным!
godkiller07 вне форума Ответить с цитированием
Старый 26.03.2014, 06:53   #13
maksim_serg
Форумчанин
 
Аватар для maksim_serg
 
Регистрация: 25.03.2010
Сообщений: 417
По умолчанию

Цитата:
Сообщение от gling Посмотреть сообщение
Только приходится в строку 5000 программно вставлять значения, иначе этот "зверь" нормально работать отказывается. Может спецы подскажут почему.
Разберите эту строку:
Код:
a = Sheets("Лист1").Range("D7:AF" & Cells(Rows.Count, 1).End(xlUp).Row).Value
переменной "а" пристваиваем значение массива ячеек на Листе1 по адрессу D7:AF & последняя заполненная ячейка на листе, откуда вызывался макрос. Так как макрос вызывается с третьего листа, то последняя заполненная ячейка на Листе3 = 1. Значит адресс ячеек D7:AF1, и соответственно Ubound(a)=7.
Код:
For i = 1 To UBound(a)
.......
i=i+1
....
в массиве "a" нет элемента с индексом а(8, что-то). По просту говоря, "зверь" не понимает где ему взять восьмую лапу, когда ему дали всего семь.
Как вариант:
Код:
a = Sheets("Лист1").Range("D7:AF" & Sheets("Лист1").Cells(Rows.Count, 29).End(xlUp).Row).Value
где 29, номер столбца с фамилиями.


Если мы вставляем на третий лист данные в строку 5000, то
"переменной "а" пристваиваем значение массива ячеек на Листе1 по адрессу D7:AF & последняя заполненная ячейка на листе, откуда вызывался макрос. Так как макрос вызывается с третьего листа, то последняя заполненная ячейка на Листе3 = 5000. Значит адресс ячеек D7:AF5000, и соответственно Ubound(a)=5000. ". Зверь работает долго, перебирая не нужные "ноги". Ошибки не получается, так при i=5000 , If... i=i+1... end if, не выполняется.

Последний раз редактировалось maksim_serg; 26.03.2014 в 07:05.
maksim_serg вне форума Ответить с цитированием
Старый 26.03.2014, 07:17   #14
maksim_serg
Форумчанин
 
Аватар для maksim_serg
 
Регистрация: 25.03.2010
Сообщений: 417
По умолчанию

во вторых все вышесказанное работает, только если число человеков (ну или "да") четное (при условии что под таблицей нет ни каких записей)

как вариант:
Код:
Dim index as boolean
Sheets("Лист3").Select
    For i = 1 To UBound(a)
        If a(i, 1) = "да" Then
                If index = 0 Then
                    index = 1
                    
                    Cells(rw1, 1) = a(i, 26)
                   ................................................
                    Cells(rw1 + 21, 2) = "âûïëàòû"
                    
                    rw1 = rw1 + 24
                Else
                    index = 0
                    
                    Cells(rw2, 3) = a(i, 26)
                    .................................................
                    Cells(rw2 + 21, 4) = "âûïëàòû"
                    
                    rw2 = rw2 + 24
                End If
        End If
    Next
Или так:
Код:
a = Sheets("Лист1").Range("D7:AF" & Sheets("Лист1").Cells(Rows.Count, 29).End(xlUp).Row+1).Value

Последний раз редактировалось maksim_serg; 26.03.2014 в 07:20.
maksim_serg вне форума Ответить с цитированием
Старый 26.03.2014, 07:32   #15
gling
Форумчанин
 
Регистрация: 23.01.2010
Сообщений: 261
По умолчанию

maksim_serg спасибо за разъяснение и работает с исправлением очень быстро. Еще раз спасибо.
gling вне форума Ответить с цитированием
Старый 26.03.2014, 07:36   #16
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

в А1 с какой 1-й строки взять данные.
Вложения
Тип файла: rar Пример.rar (12.7 Кб, 8 просмотров)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 26.03.2014, 08:28   #17
godkiller07
Пользователь
 
Регистрация: 03.03.2014
Сообщений: 22
По умолчанию

Цитата:
Сообщение от gling Посмотреть сообщение
maksim_serg спасибо за разъяснение и работает с исправлением очень быстро. Еще раз спасибо.
А можно всё выше сказанное в программе увидеть?)
godkiller07 вне форума Ответить с цитированием
Старый 26.03.2014, 12:24   #18
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

не смотрел решения на макросах и сколько там пришлось написать...
в предложенном выше варианте во всех! ячейках ОДНА ФОРМУЛА:
Код:
=ИНДЕКС(Лист1!R1:R9999;R1C+2*(СТРОКА()>24);RC1+СТРОКА()-24*(СТРОКА()>24))
ее длина 73 символа.

в первоначальном варианте формула была вообще длиной в 40 символов
Код:
=ИНДЕКС(Лист1!R1:R9999;R1C;RC1+СТРОКА())
и для двух нижних групп ее надобыло исправить, например, на
Код:
=ИНДЕКС(Лист1!R1:R9999;R25C;RC1+СТРОКА())
скопировать строку 1 в строку 25, вписать 1-ю ячейку формулу =R1C+2
и угадать числа в 1-й колонке)) (4-е первых я тогда написал)

итак, в левую верхнюю ячейку вместо 6, пишите 10 - увидите заполненными след.4 листка.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 26.03.2014, 12:31   #19
gling
Форумчанин
 
Регистрация: 23.01.2010
Сообщений: 261
По умолчанию

godkiller07 А почему нет?
IgorGO Интересное решение, попробую разобраться. Первая попытка вчера, закончилась неудачей.
Вложения
Тип файла: rar Зарплата.rar (24.6 Кб, 7 просмотров)

Последний раз редактировалось gling; 26.03.2014 в 12:41.
gling вне форума Ответить с цитированием
Старый 26.03.2014, 13:52   #20
maksim_serg
Форумчанин
 
Аватар для maksim_serg
 
Регистрация: 25.03.2010
Сообщений: 417
По умолчанию

Цитата:
Сообщение от gling Посмотреть сообщение
godkiller07 А почему нет?
godkiller07, добавьте в таблицу пятого Пупкина и посмотрите, что получилось. Как я писал, Ваш макрос красиво работает только если число Пупкиных четное.
maksim_serg вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
табель учета использования рабочего времени и расчета заработной платы подскажите пожалуйста alexng Lazarus, Free Pascal, CodeTyphon 2 28.02.2014 10:30
Система учёта заработной платы. holy_androny Фриланс 0 16.05.2012 12:08
SQL запрос(динамика заработной платы) QWERTY-A SQL, базы данных 4 08.12.2011 23:03
задача в Excel по таблице расчета заработной платы за год Яблочко Помощь студентам 1 20.10.2011 08:25
Расчетные листы заработной платы wmatik Microsoft Office Excel 17 06.05.2011 13:02