Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

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

Здравствуйте! В модуле Книги есть подсчет проставленных значений в ячейках. Это [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, 10:32   #2
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 24,048
Репутация: 5228
По умолчанию

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

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

skype: aleksandr.gryb
По умолчанию

Вы уверенны, что условия А это кирилица а не латиной написано?
Код:

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

__________________
Mailto: media.project@ukr.net
Aleksandr H. вне форума   Ответить с цитированием
Старый 12.08.2018, 14:58   #5
Oleg34
Пользователь
 
Регистрация: 09.09.2011
Сообщений: 46
Репутация: 10
По умолчанию

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

Считает верно, но пустые [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, 16:08   #7
Aleksandr H.
2 the Nation Glory
Профессионал
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Адрес: Wild West Ukraine
Сообщений: 2,400
Репутация: 874

skype: aleksandr.gryb
По умолчанию

Два условия на А я написал для проверки, если же вы уверенны что в с27 будет русская А, то оставьте только это условие.Удалите ветку условия isEmpty, она, ненужная вообще. Почему добавили ";" после буквы в условие?
__________________
Mailto: media.project@ukr.net
Aleksandr H. вне форума   Ответить с цитированием
Старый 12.08.2018, 17:06   #8
Oleg34
Пользователь
 
Регистрация: 09.09.2011
Сообщений: 46
Репутация: 10
По умолчанию

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

skype: aleksandr.gryb
По умолчанию

Цитата:
Сообщение от 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:Б
__________________
Mailto: media.project@ukr.net
Aleksandr H. вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


03:14.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru