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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.11.2009, 09:52   #1
Артур Иваныч
Форумчанин
 
Регистрация: 30.10.2009
Сообщений: 138
По умолчанию Суммирование НЕ диапазона, а конкретный ячеейк через VBA

Здравствуйте всем!
имеется такой код:
Код:
Private Sub Workbook_Open()
    Dim rFndRng As Range
    Set rFndRng = ActiveSheet.UsedRange.Find("ИТОГО: НИОКР (бюджет затрат)", , xlValues, xlWhole)
    If rFndRng Is Nothing Then MsgBox "Отсутствует", vbInformation, "Нет данных": Exit Sub
    Cells(rFndRng.Row, 5) = "=SUM(R[-???]C:R[-???]C)"
End Sub
как Вы видите, прога находит нужную строку и в пятом столбце этой строки вводит формулу =СУММ(), но я не знаю что мне поставить вместо знаков ???
Мне нужно что-то типо такого условия:
If cells(???,2) Like "*№ ИП*" Then
то есть нам нужно находить выше этой строки(rFndRng) строки, в которых во втором столбце есть "№ ИП" и прибавлять их значения в пятых столбцах и результат выводить сюда:Cells(rFndRng.Row, 5) = "=SUM(R[-???]C:R[-???]C)"
КАК мне организовать цикл?
P.S. обратите внимание на то, что тут идёт суммирование не диапазона, а конкретных ячеек.
Артур Иваныч вне форума Ответить с цитированием
Старый 23.11.2009, 10:10   #2
Артур Иваныч
Форумчанин
 
Регистрация: 30.10.2009
Сообщений: 138
По умолчанию

я тут подумал может переделать так:
Код:
    Dim rFndRng As Range
    Set rFndRng = ActiveSheet.UsedRange.Find("ИТОГО: НИОКР (бюджет затрат)", , xlValues, xlWhole)
    If rFndRng Is Nothing Then MsgBox "Отсутствует", vbInformation, "Нет данных": Exit Sub
    
    Dim i%
    For i = 1 To rFndRng.Row
    If Cells(i, 2) Like "*№ ИП*" Then
    Cells(rFndRng.Row, 5) = CStr(Cells(i, 5))
    End If
    i = i + 1
    Next i
ток не пашет((
Артур Иваныч вне форума Ответить с цитированием
Старый 23.11.2009, 10:28   #3
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

А у Вас искомое значение ("ИТОГО: НИОКР (бюджет затрат)") может встречаться несколько раз? Объясните подробнее, что нужно сделать.
В итоговой ячейке обязательно наличие формулы? или достаточно просто результата?
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 23.11.2009, 10:38   #4
Артур Иваныч
Форумчанин
 
Регистрация: 30.10.2009
Сообщений: 138
По умолчанию

1) встречается 1 раз
2) неважна формула - важен результат, поэтому я выше заменил sum на цикл, но цикл неправильно работает((точнее допереть не могу!
вобщем так:
Мы находим на листе строку ("ИТОГО: НИОКР (бюджет затрат)")
потом ищем выше(!) этой строки строки, у которых во втором столбце имеется №ИП
эти самые строки с № ИП мы в пятом столбце берём их значения и суммируем друг с другом, а результат будет тут ("ИТОГО: НИОКР (бюджет затрат)") тоже в пятом столбце!
вродь подробно объяснил...вот так вот))
Артур Иваныч вне форума Ответить с цитированием
Старый 23.11.2009, 11:00   #5
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Тогда, наверное, так:
Код:
Private Sub Workbook_Open()
    Dim rFndRng As Range, i As Long, s As Double
    Set rFndRng = ActiveSheet.UsedRange.Find("ИТОГО: НИОКР (бюджет затрат)", , xlValues, xlWhole)
    If rFndRng Is Nothing Then
        MsgBox "Отсутствует", vbInformation, "Нет данных": Exit Sub
    End If
    For i = 1 To rFndRng.Row - 1
        If Cells(i, 2) Like "*№ ИП*" Then s = s + Cells(i, 5)
    Next
    Cells(rFndRng.Row, 5) = s
End Sub
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 23.11.2009, 11:15   #6
Артур Иваныч
Форумчанин
 
Регистрация: 30.10.2009
Сообщений: 138
По умолчанию

чёт ошибку выдаёт((

я вот сам сделал так:

Dim rFndRng As Range
Set rFndRng = ActiveSheet.UsedRange.Find("ИТОГО: НИОКР (бюджет затрат)", , xlValues, xlWhole)
If rFndRng Is Nothing Then MsgBox "Отсутствует", vbInformation, "Нет данных": Exit Sub

Dim i%, j%
For i = 10 To rFndRng.Row
If Cells(i, 2) Like "*№ ИП*" Then
'For j = i + 1 To rFndRng.Row
Cells(rFndRng.Row, 5) = CStr(Cells(i, 5))
For j = i + 1 To rFndRng.Row
If Cells(j, 2) Like "*№ ИП*" Then
Cells(rFndRng.Row, 5) = Cells(rFndRng.Row, 5) + CStr(Cells(j, 5))
'"=SUM(R[1]C:R[" & ListBox1.ListCount & "]C)"
End If
Next j
End If
'Cells(rFndRng.Row, 5) = Cells(rFndRng.Row, 5) + 1
Next i

вроде б всё норм, прослеживал через F8 Но в какой-то момент цикл не заканчивается, а продолжается и всё портит...
хотя считает норм, просто в последний момент ступливает....
Артур Иваныч вне форума Ответить с цитированием
Старый 23.11.2009, 11:23   #7
Артур Иваныч
Форумчанин
 
Регистрация: 30.10.2009
Сообщений: 138
По умолчанию

ВСЁ!!! ПОЛУЧИЛОСЬ))
вот:

Код:
    Dim rFndRng As Range
    Set rFndRng = ActiveSheet.UsedRange.Find("ИТОГО: НИОКР (бюджет затрат)", , xlValues, xlWhole)
    If rFndRng Is Nothing Then MsgBox "Отсутствует", vbInformation, "Нет данных": Exit Sub
    Dim i%, j%
        For i = 10 To 11
            If Cells(i, 2) Like "*№ ИП*" Then
            Cells(rFndRng.Row, 5) = CStr(Cells(i, 5))
                For j = i + 1 To rFndRng.Row - 1
                    If Cells(j, 2) Like "*№ ИП*" Then
                        Cells(rFndRng.Row, 5) = Cells(rFndRng.Row, 5) + CStr(Cells(j, 5))
                    End If
                Next j
            End If
        Next i
Артур Иваныч вне форума Ответить с цитированием
Старый 23.11.2009, 11:44   #8
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
ВСЁ!!! ПОЛУЧИЛОСЬ))
Рад за Вас. Но как не понимал, так и не понимаю, что же Вы все-таки делаете этим кодом. Зачем 2 цикла? Зачем CStr(...) и т.д.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 23.11.2009, 11:49   #9
Артур Иваныч
Форумчанин
 
Регистрация: 30.10.2009
Сообщений: 138
По умолчанию

эээ
я просто чайник в вба
но нужно в кратчайшие сроки кое-какую работу сделать
вот и в попыхах с горем попалам, половину НЕ понимая еле-еле делаю!
мне тут на форуме ОХ как помогли, за что низкий поклон!
а свою конечную(!) работу я сюда через недели 3-4 выложу(с липовыми данными естесственно))), полюбуетесь!
Артур Иваныч вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
СУММИРОВАНИЕ ЯЧЕЕК ЧЕРЕЗ ЗАДАННЫЙ ИНТЕРВАЛ provodnikam Microsoft Office Excel 28 18.02.2015 18:20
Как получить в VBA номера строк выделенного диапазона? Chelentano Microsoft Office Excel 10 04.11.2010 14:25
Выбор столбца через комбокс и их суммирование Radnoy Microsoft Office Excel 3 22.11.2009 09:07
Расчет диапазона времени при переходе через сутки Givasi Microsoft Office Excel 4 28.08.2009 15:24
VBA= сравнить 2 диапазона. Jainy_90 Microsoft Office Excel 2 16.05.2009 22:07