powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Эксель и макросы
15 сообщений из 15, страница 1 из 1
Эксель и макросы
    #33893146
Whisper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Очень нужно узнать реально ли в экселе при помощи макросов сделать следующую операцию:
Есть журнал. В нем есть графа даты, графа номера, графа имени и название.
Нужно, чтобы выводились (или в новом документе или в новом окне) данные вписанные месяц назад. Т.е. 30 дней. Реально ли это сделать при помощи макросов и если да, то как?
...
Рейтинг: 0 / 0
Эксель и макросы
    #33893197
Valll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это можно сделать и без макросов - с помощью структуры документа.
...
Рейтинг: 0 / 0
Эксель и макросы
    #33893601
mg@
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mg@
Гость
конечно, можно.
самый простой способ - тупо перебрать все строчки, и там, где дата укладывается в диапазон прошлого месяца - выводить на отдельный лист (или в отдельную книгу), который можно создать самим же макросом.

типа так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
sub CreateReport ()
dim WS as Worksheet
dim WS1 as worksheet
set WS = ActiveSheet 'это тот лист, на котором лежит реестр
Worksheets.Add
set WS1 = Activesheet
rownum= 2 
'D1 и D2 - это даты границ пред.месяца

D1 = DateSerial( 2006 , 6 , 30 )
D2 = DateSerial( 2006 , 8 , 1 )

for I =  2  to WS.Range("A65536").End(xlUp).Row
  if WS.Cells(I, 1 ).Value > D1 and WS.Cells(I, 1 ).Value < D2 then 'предположим, что дата в колонке 1
    WS1.Cells(rownum, 1 ).Value = WS.Cells(I, 1 ).Value
    WS1.Cells(rownum, 2 ).Value = WS.Cells(I, 2 ).Value
    WS1.Cells(rownum, 3 ).Value = WS.Cells(I, 3 ).Value
    WS1.Cells(rownum, 4 ).Value = WS.Cells(I, 4 ).Value
    rownum=rownum+ 1 
  end if
next

end sub

естественно возможны варианты - типа копировать через буфер обмена всю строку целиком

А можно сделать еще проще, и без всяких макросов: отсортировать по полю дата, и выкопировать те строки, которые удовлетворяют нужному условию - их оч. легко выделить из списка визуально ;-)
...
Рейтинг: 0 / 0
Эксель и макросы
    #33896110
Whisper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за помощь! Сейчас попробую. А вообще на счет сортировки - я уже думал, просто надо чтоб минимум действий и времени тем более что журнал большой, а комп - слабенький. Плюс сортировка там должна быть по другому столбцу. Я просто думал что если скриптом сделать, то потом можно скинуть на панель управления в виде кнопки. И чтоб было вообще все просто. Т.е. пользователь жмет кнопку на панели, включается макрос, и создается лист в котором вписаны результаты.
Такое сложно сделать? Нет, ну как макрос в кнопку приделать - знаю. Мне просто нужен сам макрос.
Заранее спасибо.
...
Рейтинг: 0 / 0
Эксель и макросы
    #33896118
Whisper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И еще. У тебя в макросе нужно именно задавать координаты месяца. Т.Е. перед каждым использованием макроса надо менять диапазон? Реально ли его автоматичиским сделать? Как нить типа Datenow-30 http://www.sql.ru/forum/images/happy.gif И еще вопрос как через буфер сделать?
На самом деле задача очень даже простая и вариантов решения много. Плюс я нашел часть скрипта, для определения даты и удаления страницы. мож его хоть как-то изменить и тогда что-нить выйдет? Просто в программировании профан. Но в принципе действия все понимаю, а вот сам написать не могу ничего путного =(
Вот тот макрос:
' Function DelSheetByDate
' Удаляет рабочий лист sSheetName в активной рабочей книге,
' если дата dDelDate уже наступила
' В случае успеха возвращает True, иначе - False

Public Function DelSheetByDate(sSheetName As String, _
dDelDate As Date) As Boolean
On Error GoTo errHandle

DelSheetByDate = False
' Проверка даты
If dDelDate <= Date Then
' Не выводить подтверждение на удаление
Application.DisplayAlerts = False
ActiveWorkbook.Worksheets(sSheetName).Delete
DelSheetByDate = True
Application.DisplayAlerts = True
End If

Exit Function
errHandle:
MsgBox Err.Description, vbCritical, "Ошибка №" & Err.Number
End Function
...
Рейтинг: 0 / 0
Эксель и макросы
    #33900810
Whisper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так что, кто-нить может помочь?
Ну или хотябы наисать макрос копирования результатов на следующую страницу и автоматического отсчета 30 дней
...
Рейтинг: 0 / 0
Эксель и макросы
    #33901150
Evrodiller
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
WhisperТак что, кто-нить может помочь?
Ну или хотябы наисать макрос копирования результатов на следующую страницу и автоматического отсчета 30 дней
Я сам не профи, но попробую тебе помочь. Скинь свою таблицу сюда
...
Рейтинг: 0 / 0
Эксель и макросы
    #33904246
Whisper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Evrodiller WhisperТак что, кто-нить может помочь?
Ну или хотябы наисать макрос копирования результатов на следующую страницу и автоматического отсчета 30 дней
Я сам не профи, но попробую тебе помочь. Скинь свою таблицу сюда

Не могу скинуть. Ну а смысл обычный - 4-5 граф, одна из которых (первая) - даты типа ddmmyy. Вот и все. остальные - текстовые.
...
Рейтинг: 0 / 0
Эксель и макросы
    #33904248
Whisper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Evrodiller WhisperТак что, кто-нить может помочь?
Ну или хотябы наисать макрос копирования результатов на следующую страницу и автоматического отсчета 30 дней
Я сам не профи, но попробую тебе помочь. Скинь свою таблицу сюда

Не могу скинуть. Ну а смысл обычный - 4-5 граф, одна из которых (первая) - даты типа ddmmyy. Вот и все. остальные - текстовые.
...
Рейтинг: 0 / 0
Эксель и макросы
    #33914417
Whisper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в принципе пример приведенный выше:

sub CreateReport ()
dim WS as Worksheet
dim WS1 as worksheet
set WS = ActiveSheet 'это тот лист, на котором лежит реестр
Worksheets.Add
set WS1 = Activesheet
rownum=2
'D1 и D2 - это даты границ пред.месяца

D1 = DateSerial(2006,6,30)
D2 = DateSerial(2006,8,1)

for I = 2 to WS.Range("A65536").End(xlUp).Row
if WS.Cells(I,1).Value > D1 and WS.Cells(I,1).Value < D2 then 'предположим, что дата в колонке 1
WS1.Cells(rownum,1).Value = WS.Cells(I,1).Value
WS1.Cells(rownum,2).Value = WS.Cells(I,2).Value
WS1.Cells(rownum,3).Value = WS.Cells(I,3).Value
WS1.Cells(rownum,4).Value = WS.Cells(I,4).Value
rownum=rownum+1
end if
next

end sub

Очень дажен неплох. Надо только придумать автоматический отсчет даты. Чтоб не вписывать каждый раз диапазон
...
Рейтинг: 0 / 0
Эксель и макросы
    #33915186
Whisper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А если попробовать что-нибудь типа такого, работать будет?

Public Shared Sub Main()

Dim window As Integer = 10
Dim freq As Integer = 60 * 60 * 30 // месяц;
Dim d1 As DateTime = DateTime.Now
Dim d2 As DateTime = d1.AddMonth((1*freq))
...
Рейтинг: 0 / 0
Эксель и макросы
    #33920416
mg@
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mg@
Гость
WhisperА если попробовать что-нибудь типа такого, работать будет?

Public Shared Sub Main()

Dim window As Integer = 10
Dim freq As Integer = 60 * 60 * 30 // месяц;
Dim d1 As DateTime = DateTime.Now
Dim d2 As DateTime = d1.AddMonth((1*freq))
Уважаемый Whisper!
зачем придумывать то, что уже реализовано?
я если честно так и не понял, зачем из реестра выбирать данные, которые от текущей даты отстоят на месяц...
но вычислить дату можно так:

DateLM = DateSerial(Year(Date),Month(Date)-1,Day(Date))

правда могут быть проблемы, если 31 октября вычислять 8)

на кнопку повесить просто: запиши макрос через сервис-запись макроса (или как там еще), прилепи его на кнопку, а потом внутрь этого записанного макроса (между директивами Sub и End sub) вставь то, что тебе нужно. вот макрос будет работать на кнопке.

А чтобы нормально получалось программировать - попробуй описать последовательность действий обычным русским языком - перевести потом в код будет проще. искать решения более узких задач проще, чем широких 8)

ну и книжек купи по екселю и макросам - невредно совсем будет их почитать.
...
Рейтинг: 0 / 0
Эксель и макросы
    #33920449
mg@
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mg@
Гость
да, чтобы код заработал правильно, нужно изменить условие отбора записей в макросе, который я написал: дата в проверяемой строке должна быть равна DateLM

з.ы. лучше не пользуйся теми заготовками, смысл которых понять не можешь хотябы приблизительно. выйдет боком в самом неожиданном месте.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Эксель и макросы
    #38039415
Ксения306
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день. В таблице есть столбец "Состояние дела" значение ячеек повторяются (На рассмотрении, отказ, выплачено, ожидание документов, письмо страхователю) Помогите написать макрос, чтобы каждая повторяющая ячейка, была выделена своим цветом
...
Рейтинг: 0 / 0
Эксель и макросы
    #38039458
PlanB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ксения306, сама постановка задачи - хуже некуда.

тут вообще от макросов очень далеко. пользуйтесь встроенными средствами excel - условное форматирование и/или автофильтр
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Эксель и макросы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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