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

Вход

Регистрация

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

 

= Мир MS Excel/Количество ячеек в столбце таблицы, в зависимости от шрифта - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Количество ячеек в столбце таблицы, в зависимости от шрифта (Макросы/Sub)
Количество ячеек в столбце таблицы, в зависимости от шрифта
iraci Дата: Четверг, 21.09.2017, 20:44 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 19
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Здравствуйте! Поставленная задача, как мне кажется, решается только с помощью макросов. В строке итогов таблицы должны отобразиться значения, которые содержатся в примере. Не прошу решать всю задачу за меня, подскажите пожалуйста, как в VBA обратиться к отдельным ячейкам нужного столбца таблицы, а там поди смогу организовать цикл, в котором пройдусь по столбцу и подсчитаю интересующие меня значения. Заранее спасибо!
[img][/img]
К сообщению приложен файл: 7937005.xlsx (10.0 Kb)
 
Ответить
СообщениеЗдравствуйте! Поставленная задача, как мне кажется, решается только с помощью макросов. В строке итогов таблицы должны отобразиться значения, которые содержатся в примере. Не прошу решать всю задачу за меня, подскажите пожалуйста, как в VBA обратиться к отдельным ячейкам нужного столбца таблицы, а там поди смогу организовать цикл, в котором пройдусь по столбцу и подсчитаю интересующие меня значения. Заранее спасибо!
[img][/img]

Автор - iraci
Дата добавления - 21.09.2017 в 20:44
buchlotnik Дата: Четверг, 21.09.2017, 21:42 | Сообщение № 2
Группа: Заблокированные
Ранг: Участник клуба
Сообщений: 3442
Репутация: 929 ±
Замечаний: 20% ±

2010, 2013, 2016 RUS / ENG
а можете логику объяснить этого выделения? может условного форматирования достаточно?
 
Ответить
Сообщениеа можете логику объяснить этого выделения? может условного форматирования достаточно?

Автор - buchlotnik
Дата добавления - 21.09.2017 в 21:42
iraci Дата: Четверг, 21.09.2017, 22:07 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 19
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Выделение жирным шрифтом и "маскировка" бледным происходят посредством макроса. Логика в данном случае не имеет никакого значения и она столь заковыриста, что для ее изложения нужно описывать практически всю предметную область, что вряд ли интересно, но точно довольно трудоемко. Макрос выделил нужные ячейки в таблице, а теперь нужно посчитать количество этих выделенных ячеек в каждом столбце. Вот здесь я и застряла, поскольку не нашла примера, как в макросе можно обратиться к конкретной строке конкретного столбца встроенной таблицы :( С макросами знакома недавно, может мою задачу можно решить иначе, чем я предполагаю. Но как? %)


Сообщение отредактировал iraci - Четверг, 21.09.2017, 22:11
 
Ответить
СообщениеВыделение жирным шрифтом и "маскировка" бледным происходят посредством макроса. Логика в данном случае не имеет никакого значения и она столь заковыриста, что для ее изложения нужно описывать практически всю предметную область, что вряд ли интересно, но точно довольно трудоемко. Макрос выделил нужные ячейки в таблице, а теперь нужно посчитать количество этих выделенных ячеек в каждом столбце. Вот здесь я и застряла, поскольку не нашла примера, как в макросе можно обратиться к конкретной строке конкретного столбца встроенной таблицы :( С макросами знакома недавно, может мою задачу можно решить иначе, чем я предполагаю. Но как? %)

Автор - iraci
Дата добавления - 21.09.2017 в 22:07
_Igor_61 Дата: Четверг, 21.09.2017, 22:21 | Сообщение № 4
Группа: Проверенные
Ранг: Ветеран
Сообщений: 504
Репутация: 90 ±
Замечаний: 0% ±

Excel 2007
Здравствуйте! А макрос же по каким-то условиям эти ячейки выделил? Так может и подсчет можно вести по этим же условиям, а не по цвету?
 
Ответить
СообщениеЗдравствуйте! А макрос же по каким-то условиям эти ячейки выделил? Так может и подсчет можно вести по этим же условиям, а не по цвету?

Автор - _Igor_61
Дата добавления - 21.09.2017 в 22:21
iraci Дата: Пятница, 22.09.2017, 04:15 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 19
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Я думала об этом, но это получится "в Абашево через Колпашево" - бессмысленное многократное усложнение код макроса. Макрос "обрабатывает" одну строку и со своей специализированной задачей справляется. Здесь же нужно проработать столбец. Две разные задачи, да и использовать их придется по отдельности: добавляется в таблицу строка - ее "обслуживает" один макрос, после всех внесенных обновлений и дополнений запускается второй, который подводит итог, подсчитывая количество интересующих его значений.
 
Ответить
СообщениеЯ думала об этом, но это получится "в Абашево через Колпашево" - бессмысленное многократное усложнение код макроса. Макрос "обрабатывает" одну строку и со своей специализированной задачей справляется. Здесь же нужно проработать столбец. Две разные задачи, да и использовать их придется по отдельности: добавляется в таблицу строка - ее "обслуживает" один макрос, после всех внесенных обновлений и дополнений запускается второй, который подводит итог, подсчитывая количество интересующих его значений.

Автор - iraci
Дата добавления - 22.09.2017 в 04:15
Shurf Дата: Пятница, 22.09.2017, 05:06 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 40
Репутация: 8 ±
Замечаний: 0% ±

Excel 2010
iraci, Незнаю насколько оптимально, но как вариант:

[vba]
Код
Sub Макрос2()
Application.ScreenUpdating = False
lcol = Cells(1, 1).End(xlToRight).Column
    For i = 1 To lcol
     Set Rng = Range("Таблица14[" & Cells(1, i) & "]") 'Имя таблицы меняем на своё
     Set Itog = Range("Таблица14[[#Totals],[" & Cells(1, i) & "]]")
     j = 0
        For Each cl In Rng
         If cl.Font.Bold = True Then j = j + 1
        Next
     Itog.Value = j
     Next
Application.ScreenUpdating = True
End Sub
[/vba]

Цитата
бессмысленное многократное усложнение код макроса.

Как сказать, рациональнее прикрутить счётчик к макросу который обрабатывает ваши диапазоны, чем циклом перебирать весь диапазон заново.
К сообщению приложен файл: _7937005.xlsm (19.5 Kb)


Сообщение отредактировал Shurf - Пятница, 22.09.2017, 05:13
 
Ответить
Сообщениеiraci, Незнаю насколько оптимально, но как вариант:

[vba]
Код
Sub Макрос2()
Application.ScreenUpdating = False
lcol = Cells(1, 1).End(xlToRight).Column
    For i = 1 To lcol
     Set Rng = Range("Таблица14[" & Cells(1, i) & "]") 'Имя таблицы меняем на своё
     Set Itog = Range("Таблица14[[#Totals],[" & Cells(1, i) & "]]")
     j = 0
        For Each cl In Rng
         If cl.Font.Bold = True Then j = j + 1
        Next
     Itog.Value = j
     Next
Application.ScreenUpdating = True
End Sub
[/vba]

Цитата
бессмысленное многократное усложнение код макроса.

Как сказать, рациональнее прикрутить счётчик к макросу который обрабатывает ваши диапазоны, чем циклом перебирать весь диапазон заново.

Автор - Shurf
Дата добавления - 22.09.2017 в 05:06
iraci Дата: Пятница, 22.09.2017, 05:08 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 19
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Спасибо, вникаю...
 
Ответить
СообщениеСпасибо, вникаю...

Автор - iraci
Дата добавления - 22.09.2017 в 05:08
buchlotnik Дата: Пятница, 22.09.2017, 07:26 | Сообщение № 8
Группа: Заблокированные
Ранг: Участник клуба
Сообщений: 3442
Репутация: 929 ±
Замечаний: 20% ±

2010, 2013, 2016 RUS / ENG
Цитата
многократное усложнение код макроса
который мы похоже никогда не увидим
 
Ответить
Сообщение
Цитата
многократное усложнение код макроса
который мы похоже никогда не увидим

Автор - buchlotnik
Дата добавления - 22.09.2017 в 07:26
iraci Дата: Пятница, 22.09.2017, 09:19 | Сообщение № 9
Группа: Пользователи
Ранг: Новичок
Сообщений: 19
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Да мне не жалко)) только код привязан к реальному файлу, не примеру (файл нельзя выложить). В файле на данный момент два макроса, выполняющие свои задачи. Первый выполняет некоторые преобразования и рассчитывает нужные даты:
[vba]
Код

Sub Преобразование_ДР_Расчет_дат()
' Работает в пределах одной строки. Сочетание клавиш: Ctrl+ф

Dim Month_ As Integer
Dim Year_ As Integer
Dim DatDR As Date
Dim DatNew As Date

' преобразуем д/р в последний день месяца рождения
' чтобы рассчитать кол-во полных лет и мес на 01 число
DatDR = Cells(ActiveCell.Row, ActiveCell.Column).Value
Month_ = Month(DatDR)
Year_ = Year(DatDR)
If Month_ = 12 Then
  Month_ = 1
  Year_ = Year_ + 1
Else
  Month_ = Month_ + 1
End If

DatNew = DateSerial(Year_, Month_, 1)
DatNew = DateAdd("d", -1, DatNew)
Cells(ActiveCell.Row, ActiveCell.Column + 1).Value = DatNew

'вставка в ячейки с датой возрастов
Cells(ActiveCell.Row, ActiveCell.Column + 3).Value = DateAdd("yyyy", 3, DatDR)
Cells(ActiveCell.Row, ActiveCell.Column + 4).Value = DateAdd("yyyy", 10, DatDR)
Cells(ActiveCell.Row, ActiveCell.Column + 5).Value = DateAdd("yyyy", 18, DatDR)
Cells(ActiveCell.Row, ActiveCell.Column + 8).Value = DateAdd("yyyy", 20, DatDR)
Cells(ActiveCell.Row, ActiveCell.Column + 10).Value = DateAdd("yyyy", 23, DatDR)

Call Диапазоны ' Module2

End Sub
[/vba]

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

Sub Диапазоны()()

Dim Full_Month As Integer
Dim Full_Year As Integer
Dim DatDR_Change As Date
Dim DatDR As Date

DatDR_Change = Cells(ActiveCell.Row, ActiveCell.Column + 1).Value
Full_Month = DateDiff("m", DatDR_Change, Cells(1, 1).Value)
Full_Year = DateDiff("yyyy", DatDR_Change, Cells(1, 1).Value)
Full_Month = Full_Month - 12 * Full_Year - 1

'Диапазон <= 3
If Full_Year < 3 Or (Full_Year = 3 And Full_Month < 1) Then
  Cells(ActiveCell.Row, ActiveCell.Column + 3).Font.ColorIndex = 1
  Cells(ActiveCell.Row, ActiveCell.Column + 3).Font.Bold = True
Else:
  Cells(ActiveCell.Row, ActiveCell.Column + 3).Font.ColorIndex = 40
  Cells(ActiveCell.Row, ActiveCell.Column + 3).Font.Bold = False
End If

'Диапазон > 3 и < 10
If ((Full_Year > 3) Or (Full_Year = 3 And Full_Month > 0)) And (Full_Year < 10 Or (Full_Year = 10 And Full_Month < 0)) Then
  Cells(ActiveCell.Row, ActiveCell.Column + 4).Font.ColorIndex = 1
  Cells(ActiveCell.Row, ActiveCell.Column + 4).Font.Bold = True
Else:
  Cells(ActiveCell.Row, ActiveCell.Column + 4).Font.ColorIndex = 40
  Cells(ActiveCell.Row, ActiveCell.Column + 4).Font.Bold = False
End If

'Диапазон >= 10 и <= 18
If (Full_Year > 10 Or (Full_Year = 10 And Full_Month > (-1))) And (Full_Year < 18 Or (Full_Year = 18 And Full_Month < 1)) Then
  Cells(ActiveCell.Row, ActiveCell.Column + 5).Font.ColorIndex = 1
  Cells(ActiveCell.Row, ActiveCell.Column + 5).Font.Bold = True
Else:
  Cells(ActiveCell.Row, ActiveCell.Column + 5).Font.ColorIndex = 40
  Cells(ActiveCell.Row, ActiveCell.Column + 5).Font.Bold = False
End If

'Диапазон > 18  <= 20
If Cells(ActiveCell.Row, ActiveCell.Column + 9).Value <> "" And (((Full_Year > 18) Or (Full_Year = 18 And Full_Month > 0)) And (Full_Year < 20 Or (Full_Year = 20 And Full_Month < 1))) Then
  Cells(ActiveCell.Row, ActiveCell.Column + 8).Font.ColorIndex = 1
Else: Cells(ActiveCell.Row, ActiveCell.Column + 8).Font.ColorIndex = 40
End If

'Диапазон > 18  <= 23
If Cells(ActiveCell.Row, ActiveCell.Column + 11).Value <> "" And (((Full_Year > 18) Or (Full_Year = 18 And Full_Month > 0)) And (Full_Year < 23 Or (Full_Year = 23 And Full_Month < 1))) Then
  Cells(ActiveCell.Row, ActiveCell.Column + 10).Font.ColorIndex = 1
Else: Cells(ActiveCell.Row, ActiveCell.Column + 10).Font.ColorIndex = 40
End If

End Sub
[/vba]

а мне нужен еще третий макрос, который в нужном столбце подсчитал бы количество интересующих меня дат, выделенных жирным черным шрифтом
:)
 
Ответить
СообщениеДа мне не жалко)) только код привязан к реальному файлу, не примеру (файл нельзя выложить). В файле на данный момент два макроса, выполняющие свои задачи. Первый выполняет некоторые преобразования и рассчитывает нужные даты:
[vba]
Код

Sub Преобразование_ДР_Расчет_дат()
' Работает в пределах одной строки. Сочетание клавиш: Ctrl+ф

Dim Month_ As Integer
Dim Year_ As Integer
Dim DatDR As Date
Dim DatNew As Date

' преобразуем д/р в последний день месяца рождения
' чтобы рассчитать кол-во полных лет и мес на 01 число
DatDR = Cells(ActiveCell.Row, ActiveCell.Column).Value
Month_ = Month(DatDR)
Year_ = Year(DatDR)
If Month_ = 12 Then
  Month_ = 1
  Year_ = Year_ + 1
Else
  Month_ = Month_ + 1
End If

DatNew = DateSerial(Year_, Month_, 1)
DatNew = DateAdd("d", -1, DatNew)
Cells(ActiveCell.Row, ActiveCell.Column + 1).Value = DatNew

'вставка в ячейки с датой возрастов
Cells(ActiveCell.Row, ActiveCell.Column + 3).Value = DateAdd("yyyy", 3, DatDR)
Cells(ActiveCell.Row, ActiveCell.Column + 4).Value = DateAdd("yyyy", 10, DatDR)
Cells(ActiveCell.Row, ActiveCell.Column + 5).Value = DateAdd("yyyy", 18, DatDR)
Cells(ActiveCell.Row, ActiveCell.Column + 8).Value = DateAdd("yyyy", 20, DatDR)
Cells(ActiveCell.Row, ActiveCell.Column + 10).Value = DateAdd("yyyy", 23, DatDR)

Call Диапазоны ' Module2

End Sub
[/vba]

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

Sub Диапазоны()()

Dim Full_Month As Integer
Dim Full_Year As Integer
Dim DatDR_Change As Date
Dim DatDR As Date

DatDR_Change = Cells(ActiveCell.Row, ActiveCell.Column + 1).Value
Full_Month = DateDiff("m", DatDR_Change, Cells(1, 1).Value)
Full_Year = DateDiff("yyyy", DatDR_Change, Cells(1, 1).Value)
Full_Month = Full_Month - 12 * Full_Year - 1

'Диапазон <= 3
If Full_Year < 3 Or (Full_Year = 3 And Full_Month < 1) Then
  Cells(ActiveCell.Row, ActiveCell.Column + 3).Font.ColorIndex = 1
  Cells(ActiveCell.Row, ActiveCell.Column + 3).Font.Bold = True
Else:
  Cells(ActiveCell.Row, ActiveCell.Column + 3).Font.ColorIndex = 40
  Cells(ActiveCell.Row, ActiveCell.Column + 3).Font.Bold = False
End If

'Диапазон > 3 и < 10
If ((Full_Year > 3) Or (Full_Year = 3 And Full_Month > 0)) And (Full_Year < 10 Or (Full_Year = 10 And Full_Month < 0)) Then
  Cells(ActiveCell.Row, ActiveCell.Column + 4).Font.ColorIndex = 1
  Cells(ActiveCell.Row, ActiveCell.Column + 4).Font.Bold = True
Else:
  Cells(ActiveCell.Row, ActiveCell.Column + 4).Font.ColorIndex = 40
  Cells(ActiveCell.Row, ActiveCell.Column + 4).Font.Bold = False
End If

'Диапазон >= 10 и <= 18
If (Full_Year > 10 Or (Full_Year = 10 And Full_Month > (-1))) And (Full_Year < 18 Or (Full_Year = 18 And Full_Month < 1)) Then
  Cells(ActiveCell.Row, ActiveCell.Column + 5).Font.ColorIndex = 1
  Cells(ActiveCell.Row, ActiveCell.Column + 5).Font.Bold = True
Else:
  Cells(ActiveCell.Row, ActiveCell.Column + 5).Font.ColorIndex = 40
  Cells(ActiveCell.Row, ActiveCell.Column + 5).Font.Bold = False
End If

'Диапазон > 18  <= 20
If Cells(ActiveCell.Row, ActiveCell.Column + 9).Value <> "" And (((Full_Year > 18) Or (Full_Year = 18 And Full_Month > 0)) And (Full_Year < 20 Or (Full_Year = 20 And Full_Month < 1))) Then
  Cells(ActiveCell.Row, ActiveCell.Column + 8).Font.ColorIndex = 1
Else: Cells(ActiveCell.Row, ActiveCell.Column + 8).Font.ColorIndex = 40
End If

'Диапазон > 18  <= 23
If Cells(ActiveCell.Row, ActiveCell.Column + 11).Value <> "" And (((Full_Year > 18) Or (Full_Year = 18 And Full_Month > 0)) And (Full_Year < 23 Or (Full_Year = 23 And Full_Month < 1))) Then
  Cells(ActiveCell.Row, ActiveCell.Column + 10).Font.ColorIndex = 1
Else: Cells(ActiveCell.Row, ActiveCell.Column + 10).Font.ColorIndex = 40
End If

End Sub
[/vba]

а мне нужен еще третий макрос, который в нужном столбце подсчитал бы количество интересующих меня дат, выделенных жирным черным шрифтом
:)

Автор - iraci
Дата добавления - 22.09.2017 в 09:19
iraci Дата: Пятница, 22.09.2017, 09:20 | Сообщение № 10
Группа: Пользователи
Ранг: Новичок
Сообщений: 19
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
ой, что это у меня получилось? как тут корректно вставить код макроса %) Простите за ужасный вид кода, попытаюсь разобраться, почему так получилось((


Сообщение отредактировал iraci - Пятница, 22.09.2017, 09:21
 
Ответить
Сообщениеой, что это у меня получилось? как тут корректно вставить код макроса %) Простите за ужасный вид кода, попытаюсь разобраться, почему так получилось((

Автор - iraci
Дата добавления - 22.09.2017 в 09:20
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Количество ячеек в столбце таблицы, в зависимости от шрифта (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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