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

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

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

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

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

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

Как обойтись без цикла?
Значение в С29 = последнему значению, в столбце С > 0.
Ввод данных в ст. В(синим)
Вложения
Тип файла: rar 1 (2).rar (8.3 Кб, 10 просмотров)
valerij вне форума Ответить с цитированием
Старый 08.08.2010, 00:20   #2
KL (XL)
Форумчанин
 
Аватар для KL (XL)
 
Регистрация: 04.08.2009
Сообщений: 112
По умолчанию

для <>0
[C29]=ПРОСМОТР(9E+307;1/C3:C28;C3:C28)

для >0
[C29]=ПРОСМОТР(2;1/(C3:C28>0);C3:C28)

только события временно отключите перед вводом формулы, а потом включите.
KL [MVP - Microsoft Office Excel]
CPU: Intel Core 2, 2.17GHz | RAM: 3.25GB (4GB) | GPU: nVidia Quadro FX 2500M
OS: Windows 7 Ultimate x64 EN | MSO: 2010 Professional Plus x86 EN

Последний раз редактировалось KL (XL); 08.08.2010 в 00:28.
KL (XL) вне форума Ответить с цитированием
Старый 08.08.2010, 00:22   #3
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от KL (XL) Посмотреть сообщение
[C29]перед вводом формулы,.
Без формул, там макрос в листе
valerij вне форума Ответить с цитированием
Старый 08.08.2010, 00:46   #4
KL (XL)
Форумчанин
 
Аватар для KL (XL)
 
Регистрация: 04.08.2009
Сообщений: 112
По умолчанию

Без формулы будет цикл Можно формулой, но в макросе:

PHP код:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    
Dim rng As RangeAs Range
    
    On Error Resume Next
    Set rng 
Intersect(Target, [B3:B28])
    
On Error GoTo 0
    
If rng Is Nothing Then Exit Sub
    
    Application
.EnableEvents False
    
For Each c In rng
        c
.Offset(, 1) = IIf(00, [B2] - [B29])
    
Next
    
[C29] = [LOOKUP(9E307,1/C3:C28,C3:C28)]
    
Application.EnableEvents True
End Sub 
KL [MVP - Microsoft Office Excel]
CPU: Intel Core 2, 2.17GHz | RAM: 3.25GB (4GB) | GPU: nVidia Quadro FX 2500M
OS: Windows 7 Ultimate x64 EN | MSO: 2010 Professional Plus x86 EN
KL (XL) вне форума Ответить с цитированием
Старый 08.08.2010, 00:56   #5
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от KL (XL) Посмотреть сообщение
Без формулы будет цикл
ОК!
Только, забыл добавить, что если весь диап. [В3:В28] = 0, то С29 = В2.
Наковырял сам так
Код:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Application.EnableEvents = False
    For Each x In Target
        Cells(x.Row, 3) = Cells(2, 2) - Cells(29, 2)
        If Cells(x.Row, 2) = 0 Then Cells(x.Row, 3) = 0
    Next
    With Range("C29")
        .FormulaR1C1 = "=LOOKUP(9E+307,1/R[-26]C:R[-1]C,R[-26]C:R[-1]C)"
            .Value = .Value
        If .FormulaR1C1 = "#N/A" Then [C29] = Cells(2, 2)
    End With
    Application.EnableEvents = True
End Sub
KL (XL)
Как в твоем макросе это сделать?
СПАСИБО!!
valerij вне форума Ответить с цитированием
Старый 08.08.2010, 01:07   #6
KL (XL)
Форумчанин
 
Аватар для KL (XL)
 
Регистрация: 04.08.2009
Сообщений: 112
По умолчанию

Код:
Private Sub Worksheet_Change(ByVal Target As Excel.Range) 
    Dim rng As Range, c As Range 
     
    On Error Resume Next 
    Set rng = Intersect(Target, [B3:B28]) 
    On Error GoTo 0 
    If rng Is Nothing Then Exit Sub 
     
    Application.EnableEvents = False 
    For Each c In rng 
        c.Offset(, 1) = IIf(c = 0, 0, [B2] - [B29]) 
    Next 
    [C29] = [IF(SUM(B3:B28),LOOKUP(9E307,1/C3:C28,C3:C28),B2)] 
    Application.EnableEvents = True 
End Sub
KL [MVP - Microsoft Office Excel]
CPU: Intel Core 2, 2.17GHz | RAM: 3.25GB (4GB) | GPU: nVidia Quadro FX 2500M
OS: Windows 7 Ultimate x64 EN | MSO: 2010 Professional Plus x86 EN

Последний раз редактировалось KL (XL); 08.08.2010 в 01:10.
KL (XL) вне форума Ответить с цитированием
Старый 08.08.2010, 01:16   #7
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от KL (XL) Посмотреть сообщение
[CODE]
Спасибо, все класс!!!!!!
(\__/)
(='.'=)
E[:]|||[:]З
(")_(")
valerij вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рассчитать и вывести значение kipish_lp Microsoft Office Excel 9 08.06.2010 05:17
блок-схемы (использовать цикл с параметром, предусловием и постусловием) uradik2 Помощь студентам 3 23.03.2010 08:21
использовать цикл (и условный оператор, если надо) Еля Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 16.11.2009 23:22
использовать цикл (и условный оператор, если надо) Еля Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 27.10.2009 08:59