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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.07.2009, 23:00   #11
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
А что ЭТО такое?
Часть формулы, или кусок макроса?
Формула, слаживает с 30 книг с Листов №2- имя листа, ячейки Н5
valerij вне форума Ответить с цитированием
Старый 17.07.2009, 06:15   #12
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Предыдущее Ваше упрощение я бы сделал так:
Код:
Sub Main()
    Dim листы As Integer, i As Integer, j As Integer, ttL As Long
    ttL = 0: j = 15
    a = Array(33, 34, 61, 62, 63, 89, 90, 117, 118, 145, 146, 147, 173, 174, 201, 202, 229, 230, 231, 257, 258, 285, 286, 313, 314, 315, 341, 342, 369, 370)
    For листы = 5 To 9
        With Sheets(листы)
            For i = LBound(a) To UBound(a)
                .Cells(j, "H") = Sheets(1).Cells(a(i), "E").Offset(ttL): j = j + 21
            Next
        End With
    Next
End Sub
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 17.07.2009, 19:01   #13
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

А тут, упростить??? (по другому не смог)
Код:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim x As Byte, y As Byte, z As Byte, с As Byte
Application.EnableEvents = False
    With [C5:H16].Application
        For x = 5 To 16
            Cells(x, 8) = .Sum(Range(Cells(x, 3), Cells(x, 7)))
        Next
    End With
    
    With [C26:E35].Application
        For y = 26 To 35
            Cells(y, 6) = .Sum(Range(Cells(y, 3), Cells(y, 5)))
        Next
    End With
    
    With [f41:h47].Application
        For z = 41 To 47
            Cells(z, 9) = .Sum(Range(Cells(z, 6), Cells(z, 8)))
        Next
    End With
    
    With [c54:h65].Application
        For c = 54 To 65
            Cells(c, 9) = .Sum(Range(Cells(c, 3), Cells(c, 8)))
        Next
    End With
    
Application.EnableEvents = True
End Sub
Вот интересно, почему, вставляю - дергается экран???
Application.ScreenUpdating = False
valerij вне форума Ответить с цитированием
Старый 17.07.2009, 19:05   #14
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Валера, а зачем вот эти строки?
Код:
With [C5:H16].Application
    With [C26:E35].Application
Может, в них скрыт какой-то тайный смысл?

PS: Ты первый, кто додумался до такой конструкции...
EducatedFool вне форума Ответить с цитированием
Старый 17.07.2009, 19:38   #15
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Валера, а зачем вот эти строки?.
Игорь, я думал, что так я защищаю др. яч. от случайного ввода, т. к. только в этих диапазонах вводятся с клавы числа, а че НЕТ?

Про защиту яч. я знаю, но лист защитить не могу, нужен
Да, убрал и все ОК, ну ваще, класс я придумал, пацтулом!!
Код:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim x As Byte, y As Byte, z As Byte, с As Byte
Application.EnableEvents = False
    With Application
        For x = 5 To 16
            Cells(x, 8) = .Sum(Range(Cells(x, 3), Cells(x, 7)))
        Next
        For y = 26 To 35
            Cells(y, 6) = .Sum(Range(Cells(y, 3), Cells(y, 5)))
        Next
        For z = 41 To 47
            Cells(z, 9) = .Sum(Range(Cells(z, 6), Cells(z, 8)))
        Next
        For c = 54 To 65
            Cells(c, 9) = .Sum(Range(Cells(c, 3), Cells(c, 8)))
        Next
    End With
    
Application.EnableEvents = True
End Sub

Последний раз редактировалось valerij; 17.07.2009 в 20:07.
valerij вне форума Ответить с цитированием
Старый 17.07.2009, 21:08   #16
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

Можно еще чуть упростить
Код:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    Dim x As Byte
    With Application
        .EnableEvents = False
        For x = 5 To 65
            Select Case x
            Case 5 To 16: Cells(x, 8) = .Sum(Range(Cells(x, 3), Cells(x, 7)))
            Case 26 To 35: Cells(x, 6) = .Sum(Range(Cells(x, 3), Cells(x, 5)))
            Case 41 To 47: Cells(x, 9) = .Sum(Range(Cells(x, 6), Cells(x, 8)))
            Case 54 To 65: Cells(x, 9) = .Sum(Range(Cells(x, 3), Cells(x, 8)))
            End Select
        Next
        .EnableEvents = True
    End With
End Sub
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru
The_Prist вне форума Ответить с цитированием
Старый 17.07.2009, 21:53   #17
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от The_Prist Посмотреть сообщение
Можно еще чуть упростить]
Ага, !!!!, тока, может я чета путаю, но де то я читал, типа: избегайте применять Select Case, правда почему, не объяснили
valerij вне форума Ответить с цитированием
Старый 17.07.2009, 21:58   #18
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

Избегать Select Case надо только в том случае, если Вам значение после первой проверки, необходимо проверить дальше. Select Case такой возможности не дает - при первом совпадении условия данный оператор заканчивает свою обработку и переходит на End Select. В Вашем случае Select Case вполне подходит.
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru
The_Prist вне форума Ответить с цитированием
Старый 17.07.2009, 22:13   #19
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от The_Prist Посмотреть сообщение
В Вашем случае Select Case вполне подходит.
Спасибо!!!!!
---------------
| ^^пиво^^ \\|""\\_,_
|___________||___|__|)
(@)(@)""*|(@)(@)**(@)
valerij вне форума Ответить с цитированием
Старый 01.03.2011, 22:43   #20
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Добрый Вечер
Давненько не тревожил, но, получаю ошибку, не могу разобраться, надеюсь на Вашу поддержку.
Ошибка возникает красным, почему не мугу сложить?
Код:
Sub zxc()
    Dim Левый#(1 To 2, 1 To 1), iPrices#(1 To 2, 1 To 1), iRow&, iLL As Byte
    Application.EnableEvents = False
            For iLL = 1 To 1
    iPrices(1, 1) = 3.32
    iPrices(2, 1) = 2.73
    
    Левый(1, 1) = 0.65 * 0.3
    Левый(2, 1) = 0.45 * 0.3
        For iRow = 3 To 1323 Step 44
                With Sheets(iLL)
                    .Cells(iRow, 5).Resize(31).Value = iPrices
                    .Cells(iRow, 14).Resize(31).Value = iPrices + Левый
                End With
             Next
                Erase iPrices
        Next
            Application.EnableEvents = True
End Sub
valerij вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите упростить простой макрос frantic150 Microsoft Office Excel 2 23.06.2009 04:55
проверьте плз код!можно ли его оптимизировать или упростить? -ushёl- Помощь студентам 10 23.04.2009 21:07
Вот! Тот макрос, который заставил обратится меня на этот форум! Дмитрий Фукс Microsoft Office Excel 6 10.04.2009 10:29
Запереть макрос можно? zander Microsoft Office Excel 1 15.02.2009 15:40