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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.08.2018, 09:26   #1
Oleg34
Пользователь
 
Регистрация: 09.09.2011
Сообщений: 48
По умолчанию Посчитать заполненные ячейки на нескольких Листах по условию

Здравствуйте! В модуле Книги есть подсчет проставленных значений в ячейках. Это [C5:C13] и [C15:C23], в зависимости в каком диапазоне больше проставлено, выбирается смена (два диапазона это две смены: А или Б). В модуле Листа "ИТОГИ" я пытаюсь, пройдя по всем Листам (это 31 по количеству рабочих дней в месяце) подсчитать сколько дней отработала та или другая смена. Но, считает все дни одной сменой.
код модуля Книги
Код:
  'определение работающей смены  
Dim A_Smena As Long
Dim B_Smena As Long  
    A_Smena = 0
    B_Smena = 0
    For i = 5 To 13
        If Cells(i, 3) = "a" Then  'перебираю ячейки смены смены Б
            B_Smena = B_Smena + 1
        End If
    Next i
    For j = 15 To 23
        If Cells(j, 3) = "a" Then  'перебираю ячейки смены смены А
            A_Smena = A_Smena + 1
        End If
    Next j
       If A_Smena > B_Smena Then
         Range("C27") = "А"
        Else
         Range("C27") = "Б"
    End If
А это код модуля Листа "ИТОГИ"
Код:
 'подсчет рабочих смен в книге
    Dim smA As Integer 'накопительный счетчик для смены А
    Dim smB As Integer 'накопительный счетчик для смены Б
    Dim sM As Integer  '
    smA = 0
    smB = 0
    For sM = 2 To 32 'начиная со Листа(2) до Листа(32)
     Sheets(sM).Activate
        If Range("C27").Text = "A" Then
             smA = smA + 1
             Else
               smB = smB + 1
        End If
      Next sM
    MsgBox smB & " смен Б " & smA & " ,смен А"
Oleg34 вне форума Ответить с цитированием
Старый 12.08.2018, 09:32   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

в таких случаях обычно принято выкладывать небольшой файлик Excel, в котором представленны необходимые данные и результаты. Тогда открыть, посмотреть и помочь немного проще, чем самому создавать файл-пример.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.08.2018, 10:06   #3
Oleg34
Пользователь
 
Регистрация: 09.09.2011
Сообщений: 48
По умолчанию

Вот сам файл
Вложения
Тип файла: zip Расчет выработки смен_21.zip (165.3 Кб, 11 просмотров)
Oleg34 вне форума Ответить с цитированием
Старый 12.08.2018, 11:43   #4
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Вы уверенны, что условия А это кирилица а не латиной написано?
Код:
Sub a()
'подсчет рабочих смен в книге
    Dim smA As Integer 'накопительный счетчик для смены А
    Dim smB As Integer 'накопительный счетчик для смены Б
    Dim sM As Integer  '
    smA = 0
    smB = 0
    For sM = 2 To 32 'начиная со Листа(2) до Листа(32)
        If Sheets(sM).Range("C27") = "A" Or Sheets(sM).Range("C27") = "А" Then
             smA = smA + 1
             Else
               smB = smB + 1
        End If
      Next sM
    MsgBox smB & " смен Б ;" & smA & " ,смен А"
End Sub
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 12.08.2018, 13:58   #5
Oleg34
Пользователь
 
Регистрация: 09.09.2011
Сообщений: 48
По умолчанию

Да вроде переправлял)), сначала было латиницей.
Oleg34 вне форума Ответить с цитированием
Старый 12.08.2018, 14:51   #6
Oleg34
Пользователь
 
Регистрация: 09.09.2011
Сообщений: 48
По умолчанию

Считает верно, но пустые [C27], в которых еще ничего нет считает за "Б". То есть получается, что по условию "если в ячейке [C27] есть символ"А", то добавляем в счетчик smA, а если иначе то в счетчик smB" и все остальные символы, то есть пустые значения она автоматом включает в smB. Я построил такую конструкцию:
Код:
Dim smA As Integer 
    Dim smB As Integer 
    Dim sM As Integer  
    smA = 0
    smB = 0
    For sM = 2 To 32 
     Sheets(sM).Activate
        If Sheets(sM).Range("C27") = "А;" Or Sheets(sM).Range("C27") = "A" Then
             smA = smA + 1
             ElseIf Sheets(sM).Range("C27") = "Б;" Then
             smB = smB + 1
             Else
             If IsEmpty(Sheets(sM).Range("C27")) = True Then ' добавил условие на пустую ячейку
                smA = smA
                smB = smB
             End If
        End If
      Next sM
    MsgBox smB & " смен Б," & Chr(13) & smA & "смен А"
Сейчас все подсчитывает, но может можно попроще сделать?
Oleg34 вне форума Ответить с цитированием
Старый 12.08.2018, 15:08   #7
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Два условия на А я написал для проверки, если же вы уверенны что в с27 будет русская А, то оставьте только это условие.Удалите ветку условия isEmpty, она, ненужная вообще. Почему добавили ";" после буквы в условие?
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 12.08.2018, 16:06   #8
Oleg34
Пользователь
 
Регистрация: 09.09.2011
Сообщений: 48
По умолчанию

; набирал в браузере, из Excel копировалась кирилица кракозябрами, видимо зацепил просто клавишу. А ветку добавил, проверку на пустые ячейки. Почему то считает если пусто, то "Б" и в переменной у меня на выходе было 28 "Б" при 3 "А", хотя по факту 4 "Б"
Oleg34 вне форума Ответить с цитированием
Старый 12.08.2018, 20:17   #9
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Цитата:
Сообщение от Oleg34 Посмотреть сообщение
переменной у меня на выходе было 28 "Б" при 3 "А", хотя по факту 4 "Б"
В вашем файле
Цитата:
1:Б
2:А
3:А
4:Б
5:Б
6:А
7:А
8:Б
9:Б
10:Б
11:Б
12:Б
13:Б
14:Б
15:Б
16:Б
17:Б
18:Б
19:Б
20:Б
21:Б
22:Б
23:Б
24:Б
25:Б
26:Б
27:Б
28:Б
29:Б
30:Б
31:Б
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Суммировать заполненные ячейки по условию Bomba2018 Microsoft Office Excel 7 20.06.2018 10:01
Из нескольких файлов нужно слить все заполненные строки в итоговую таблицу на один лист Nataliana Microsoft Office Excel 1 04.12.2012 12:11
Найти последние заполненные, правые ячейки в таблице, с условием VictorM Microsoft Office Excel 3 11.01.2011 11:51
сортировка на нескольких листах Rider-12 Microsoft Office Excel 4 19.06.2010 14:29
Одинаковые действия на нескольких листах ruavia3 Microsoft Office Excel 6 10.04.2009 14:32