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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 23.12.2008, 02:58   #1
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию Сложить переменные

Не могу сложить переменные(без ячеек)
Код:
К(1) = 10
К(2) = 15
К(3) = 35
К(4) = 2
...........
К(Х) = М

Нужно сделать:

У(1) = К(1)
У(2) = К(1) + К(2)
У(3) = К(1) + К(2) + К(3)
У(4) = К(1) + К(2) + К(3) + К(4)
..........................................
Как это одной записью организовать?
valerij вне форума
Старый 23.12.2008, 03:26   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Код:
Sub Arrays()
    Dim y(), k()
    k = Array(10, 15, 35, 2, 26, 20, 12, 8)    ' заполняем массив
    ' можно было бы заполнить массив и таким способом:  К(1) = 10: К(2) = 15: К(3) = 35: К(4) = 2 ...
    
    ReDim y(LBound(k) To UBound(k))    ' устанавливаем размерность массива Y равной размерности массива K

    For i = LBound(k) To UBound(k)
        If i = LBound(k) Then y(i) = k(i) Else y(i) = y(i - 1) + k(i)    ' заполняем массив Y
    Next

    For i = LBound(y) To UBound(y) ' выводим содержимое массивов на экран
    msg = msg & "Элемент " & i & "         в массиве K  равен  " & k(i) & vbTab & " ,       в массиве Y  равен  " & y(i) & vbNewLine
    Next
    MsgBox msg, vbInformation, "Результат заполнения массивов"
End Sub
EducatedFool вне форума
Старый 23.12.2008, 03:32   #3
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Есть и другой способ:

Код:
Option Base 1
Dim k()

Sub ДругойСпособ()
    k = Array(10, 15, 35, 2, 26, 20, 12, 8)    ' заполняем массив
    ' можно было бы заполнить массив и таким способом:  К(1) = 10: К(2) = 15: К(3) = 35: К(4) = 2 ...

    For i = LBound(k) To UBound(k)    ' выводим результаты на экран
        msg = msg & "Элемент " & i & "         в массиве K  равен  " & k(i) & vbTab & " ,       результат вычисления Y  равен  " & y(i) & vbNewLine
    Next
    MsgBox msg, vbInformation
End Sub

Function y(ByVal N As Integer)
    y = 0: For i = 1 To N: y = y + k(i): Next
End Function

Цитата:
Как это одной записью организовать?
Например, так:
Function y(ByVal N As Integer): y = 0: For i = 1 To N: y = y + k(i): Next: End Function
EducatedFool вне форума
Старый 23.12.2008, 03:40   #4
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Есть и другой способ:Function y(ByVal N As Integer): y = 0: For i = 1 To N: y = y + k(i): Next: End Function
Так У не массив, мне потом, как:
Код:
For k = 7 To 37
    Sheets(15).Cells(k, 5) = у(k)
Next k

Последний раз редактировалось valerij; 23.12.2008 в 03:46.
valerij вне форума
Старый 23.12.2008, 03:51   #5
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Валера, ты, похоже, сам запутался...

запись типа К(1) = 10: К(2) = 15: К(3) = 35: К(4) = 2 мало совместима с записью For k = 7 To 37
Лучше объясни, чего ты пытаешься добиться.

Вот такой код будет работать:
Код:
Dim k(1 To 4)

Sub test()
    k(1) = 10: k(2) = 15: k(3) = 35: k(4) = 2

    For N = 1 To 4
        Worksheets(1).Cells(N, 1) = k(N)
        Worksheets(1).Cells(N, 2) = y(N)
    Next N
End Sub

Function y(ByVal N As Integer): y = 0: For i = 1 To N: y = y + k(i): Next: End Function

Кстати, запись Y(n) может применяться как для получения значения n-ного элемента массива Y,
так и для получения результата вычисления функции Y (где n - параметр этой функции)
EducatedFool вне форума
Старый 23.12.2008, 03:58   #6
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Валера, ты, похоже, сам запутался...
Игорь, запутался не то слово!
Мне на 15 листе в одну колонку от 7 до 37 яч нужно получить данные
с листов 1 по 13. в них в яч. Н44 и с шагом 51 до Н1574 данные.
Их нужно сложить с накоплением.
т. е. Лист 15 Ф7 = сумме Н44 по всем 13 листам, в Ф8 = сумме Н44 по всем 13 листам + Н95 по всем 13 листам ....

С применением промеж. яч. нет проблем, а без яч.?

Последний раз редактировалось valerij; 23.12.2008 в 04:05.
valerij вне форума
Старый 23.12.2008, 04:14   #7
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Попробуй такой код:
Код:
Sub test()
    Dim sh As Worksheet: Set sh = ThisWorkbook.Worksheets(15)

    For i = 7 To 37
        cv = 0
        For List = 1 To 13
            For s = 0 To i - 7    ' перебираем нужное количество ячеек
                cv = cv + Worksheets(List).Cells(44 + 51 * s, 8)
            Next s
        Next List
        sh.Cells(i, 6) = cv    ' пишем значение в столбец F
    Next i
End Sub

Или такой (то же самое, только чуть быстрее)
Код:
Sub test2()
on error resume next
    Dim sh As Worksheet: Set sh = ThisWorkbook.Worksheets(15)

    For i = 7 To 37
        cv = 0
        For List = 1 To 13
                cv = cv + Worksheets(List).Cells(44 + 51 * (i - 7), 8)
        Next List
        sh.Cells(i, 6) = IIf(i > 7, sh.Cells(i - 1, 6) + cv, cv) ' пишем значение в столбец F
    Next i
End Sub

Последний раз редактировалось EducatedFool; 23.12.2008 в 04:16.
EducatedFool вне форума
Старый 23.12.2008, 04:19   #8
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Попробуй такой код:
Игорь спасибо. Днем попробую. Отпишусь.
Пошел спать
valerij вне форума
Старый 23.12.2008, 16:26   #9
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Игорь, понравилось..
Вот Вся Задача.
Вывод данных(шаг 51) в Лист 15 по колонкам D to I

Код:
D7 = Сумма F41 (c Листов 1 то 13)
D8 = Сумма F41 + F92 (c Листов 1 то 13)
D9 = Сумма F41 + F92 + F143 (c Листов 1 то 13)
---------------------------------------------------------------
D37 = Сумма F41 + F92 + F143 + ..... + F1571 (c Листов 1 то 13)


E7 = Сумма F41 (c Листов 1 то 13)
E8 = Сумма F92 (c Листов 1 то 13)
E9 = Сумма F143 (c Листов 1 то 13)
------------------------------------
E37 = Сумма F1571 (c Листов 1 то 13)


F7 = Сумма H44 (c Листов 1 то 8) + Сумма H41 (c Листов 9 то 13)
F8 = Сумма H44 + H95 (c Листов 1 то 8) + (Сумма H41 + Сумма H92 c Листов 9 то 13)
F9 = Сумма H44 + H95 + H146 (c Листов 1 то 8) + (Сумма H41 + Сумма H92 + Сумма H143 c Листов 9 то 13)
----------------------------------------------------------------------------------------------------------------------------
F37 = Сумма H44 + H95 + H146 + ..... + H1574 (c Листов 1 то 8) + (Сумма H41 + Сумма H92 + ... + Сумма H1571 c Листов 9 то 13)


G7 = Сумма H44 (c Листов 1 то 8) + Сумма H41 (c Листов 9 то 13)
G8 = Сумма H95 (c Листов 1 то 8) + (Сумма H92 c Листов 9 то 13)
G9 = Сумма H146 (c Листов 1 то 8) + (Сумма H143 c Листов 9 то 13)
-------------------------------------------------------------------
G37 = Сумма H1574 (c Листов 1 то 8) + (Сумма H1571 c Листов 9 то 13)


H7 = Сумма I44 (c Листов 1 то 8) + Сумма I42 (c Листов 9 то 13)
H8 = Сумма I44 + I95 (c Листов 1 то 8) + (Сумма I42 + Сумма I93 c Листов 9 то 13)
H9 = Сумма I44 + I95 + I146 (c Листов 1 то 8) + (Сумма I42 + Сумма I93 + Сумма I144 c Листов 9 то 13)
----------------------------------------------------------------------------------------------------------------------------
H37 = Сумма I44 + I95 + I146 + ..... + I1574 (c Листов 1 то 8) + (Сумма I42 + Сумма I93 + ... + Сумма I1572 c Листов 9 то 13)


I7 = Сумма I44 (c Листов 1 то 8) + Сумма I42 (c Листов 9 то 13)
I8 = Сумма I95 (c Листов 1 то 8) + (Сумма I93 c Листов 9 то 13)
I9 = Сумма I146 (c Листов 1 то 8) + (Сумма I144 c Листов 9 то 13)
--------------------------------------------------------------------
I37 = Сумма I1574 (c Листов 1 то 8) + (Сумма I1572 c Листов 9 то 13)
valerij вне форума
Старый 23.12.2008, 17:03   #10
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Пробуй:

Код:
Sub ЗаполнениеЛиста15()
    Dim sh As Worksheet: Set sh = ThisWorkbook.Worksheets(15)
    sh.Range("d7:i37").ClearContents    ' очистка от прежних данных

    For i = 7 To 37
        cv = СуммаЯчеек(1, 13, "f" & CStr(41 + 51 * (i - 7)))
        If i > 7 Then sh.Cells(i, 4) = sh.Cells(i - 1, 4) + cv Else sh.Cells(i, 4) = cv    ' пишем значение в столбец D
        sh.Cells(i, 5) = cv    ' пишем значение в столбец E

        cv = СуммаЯчеек(1, 8, "h" & CStr(44 + 51 * (i - 7))) + СуммаЯчеек(9, 13, "h" & CStr(41 + 51 * (i - 7)))
        If i > 7 Then sh.Cells(i, 6) = sh.Cells(i - 1, 6) + cv Else sh.Cells(i, 6) = cv    ' пишем значение в столбец F
        sh.Cells(i, 7) = cv    ' пишем значение в столбец G

        cv = СуммаЯчеек(1, 8, "i" & CStr(44 + 51 * (i - 7))) + СуммаЯчеек(9, 13, "i" & CStr(42 + 51 * (i - 7)))
        If i > 7 Then sh.Cells(i, 8) = sh.Cells(i - 1, 8) + cv Else sh.Cells(i, 8) = cv    ' пишем значение в столбец H
        sh.Cells(i, 9) = cv    ' пишем значение в столбец I
    Next i
End Sub

Function СуммаЯчеек(ByVal ПервыйЛист As Integer, ByVal ПоследнийЛист As Integer, ByVal ra As String) As Single
    СуммаЯчеек = 0
    For List = ПервыйЛист To ПоследнийЛист
        v = Worksheets(List).Range(ra).Value: If IsNumeric(v) Then СуммаЯчеек = СуммаЯчеек + Val(v)
    Next List
End Function
EducatedFool вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сложить матрицу... Zibiv Помощь студентам 7 19.05.2009 15:51
Как сложить текстовые значения? Сергей Яковлевич Microsoft Office Excel 7 10.06.2008 16:57
сложить 2 числа vanDJ Microsoft Office Access 3 20.12.2007 08:57
как сложить 2 числа andrey4623 Общие вопросы C/C++ 9 13.12.2007 17:42
Как сложить 2 значения из разных БД по ключу Nitti БД в Delphi 1 04.05.2007 12:58