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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.02.2013, 16:39   #1
Kirja23
Пользователь
 
Регистрация: 05.10.2012
Сообщений: 21
По умолчанию сократить код

Всем привет,

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

Код:
Sub x1()

    Dim rowDate As Long
    Dim rowTotal As Long
    Dim sum As Double
    Dim emptyCellCount As Long
        
    rowDate = 2
    sum = 0
    
    Do Until (Sheets("лист1").Cells(rowDate, 1).Value = "")
    
        If (Sheets("лист1").Cells(rowDate, 5).Value <> "") Then
            
             rowTotal = 3
             emptyCellCount = 0
             Do Until (emptyCellCount = 10) 'stop after 10 empty cell => end of sheet
             
                If (Sheets("лист1").Cells(rowDate, 2).Value <> "" _
                And Sheets("общий").Cells(rowTotal, 4).Value = Sheets("лист1").Cells(rowDate, 2).Value _
                And Sheets("общий").Cells(rowTotal, 11).Value <> "") Then
                
                   sum = sum + (Sheets("лист1").Cells(rowDate, 5).Value / Sheets("общий").Cells(rowTotal, 11).Value) / 60
                   
                   Exit Do 'Performance
                
                End If
                
                rowTotal = rowTotal + 1
                
                If (Sheets("общий").Cells(rowTotal, 4).Value = "") Then
                    emptyCellCount = emptyCellCount + 1
                Else
                    emptyCellCount = 0
                End If
             
             Loop
            
        End If
            
        rowDate = rowDate + 1
        
    Loop
    
    Sheets("результат").Cells(30, 3) = sum
    
End Sub

Sub x2()

    Dim rowDate As Long
    Dim rowTotal As Long
    Dim sum As Double
    Dim emptyCellCount As Long
        
    rowDate = 2
    sum = 0
    
    Do Until (Sheets("лист2").Cells(rowDate, 1).Value = "")
    
        If (Sheets("лист2").Cells(rowDate, 5).Value <> "") Then
            
             rowTotal = 3
             emptyCellCount = 0
             Do Until (emptyCellCount = 10) 'stop after 10 empty cell => end of sheet
             
                If (Sheets("лист2").Cells(rowDate, 2).Value <> "" _
                And Sheets("общий").Cells(rowTotal, 4).Value = Sheets("лист2").Cells(rowDate, 2).Value _
                And Sheets("общий").Cells(rowTotal, 11).Value <> "") Then
                
                   sum = sum + (Sheets("лист2").Cells(rowDate, 5).Value / Sheets("общий").Cells(rowTotal, 11).Value) / 60
                   
                   Exit Do 'Performance
                
                End If
                
                rowTotal = rowTotal + 1
                
                If (Sheets("общий").Cells(rowTotal, 4).Value = "") Then
                    emptyCellCount = emptyCellCount + 1
                Else
                    emptyCellCount = 0
                End If
             
             Loop
            
        End If
            
        rowDate = rowDate + 1
        
    Loop
    
    Sheets("результат").Cells(31, 3) = sum
    
End Sub

Sub x3()

    Dim rowDate As Long
    Dim rowTotal As Long
    Dim sum As Double
    Dim emptyCellCount As Long
        
    rowDate = 2
    sum = 0
    
    Do Until (Sheets("лист3").Cells(rowDate, 1).Value = "")
    
        If (Sheets("лист3").Cells(rowDate, 5).Value <> "") Then
            
             rowTotal = 3
             emptyCellCount = 0
             Do Until (emptyCellCount = 10) 'stop after 10 empty cell => end of sheet
             
                If (Sheets("лист3").Cells(rowDate, 2).Value <> "" _
                And Sheets("общий").Cells(rowTotal, 4).Value = Sheets("лист3").Cells(rowDate, 2).Value _
                And Sheets("общий").Cells(rowTotal, 11).Value <> "") Then
                
                   sum = sum + (Sheets("лист3").Cells(rowDate, 5).Value / Sheets("общий").Cells(rowTotal, 11).Value) / 60
                   
                   Exit Do 'Performance
                
                End If
                
                rowTotal = rowTotal + 1
                
                If (Sheets("общий").Cells(rowTotal, 4).Value = "") Then
                    emptyCellCount = emptyCellCount + 1
                Else
                    emptyCellCount = 0
                End If
             
             Loop
            
        End If
            
        rowDate = rowDate + 1
        
    Loop
    
    Sheets("результат").Cells(32, 3) = sum
    
End Sub
заранее очень благодарен!
Kirja23 вне форума Ответить с цитированием
Старый 20.02.2013, 22:34   #2
Skif-F
Форумчанин
 
Регистрация: 24.03.2010
Сообщений: 349
По умолчанию

Создайте процедуру:
Sub xx(ИмяЛиста as String, НомерСтроки as Long)
Вставьте в неё содержимое любой из Ваших процедур, заменив строки "лист1"..."лист3" на ИмяЛиста, и
Sheets("результат").Cells(32, 3) = sum
на
Sheets("результат").Cells(НомерСтро ки , 3) = sum

А на будущее: не забывайте вставлять файл с примером.

P.S. Вышеуказанные процедуры сократятся до:
Sub x1()
xx "лист1", 30
End Sub
Нет нерешаемых задач - есть недостаток времени и данных!
Skif-F вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сократить код kostan3 Паскаль, Turbo Pascal, PascalABC.NET 2 17.02.2013 17:24
Как сократить код Вадим12091965 Microsoft Office Excel 6 28.10.2012 11:04
как можно сократить код sergio280888 БД в Delphi 0 17.04.2011 17:09
Сократить код shapiro Помощь студентам 0 14.04.2010 17:38
Как можно сократить код jocry Общие вопросы Delphi 2 20.01.2009 08:35