Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Домашняя бухгалтерия - Свои формулы - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Домашняя бухгалтерия - Свои формулы (Функции Function)
Домашняя бухгалтерия - Свои формулы
Ivanius Дата: Вторник, 18.02.2014, 19:43 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 14
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Хочу сам написать для себя полный учет семейного бюджета, начало было положено хорошо,но сегодня столкнулся с серьезной проблемой: хотел написать универсальную функцию -
[vba]
Код
функция (область, что ищем, что записывать)
       переменная1 = область.поиск (что ищем)
       пока переменная1 найдена то
             функция = функция + значение(переменная1.offset( , что записывать))
       конец пока
конец функции
[/vba]
[vba]
Код
Function GetSumm(RangeData As Range, Name, offset As Integer)

Dim foundCell As Range

Set foundCell = RangeData.Find(Name, LookIn:=xlFormula)
           If Not foundCell Is Nothing Then
             GetSumm = foundCell
             Set foundCell = .FindNext(foundCell)
           Else
             GetSumm = -1
           End If
                  
End Function
[/vba]
сделал бы цикл while, дак боюсь, что он бесконечный будет т.к. всегда будет находиться .FindNext(foundCell)
функция пишется для первого листа для диаграммы в которую нужно объедененные данные подставить т.е. суммы
Тему буду развивать по мере поступления вопросов (хочу еще многое добавить)
К сообщению приложен файл: 7011452.xlsm (30.7 Kb)


Сообщение отредактировал Ivanius - Среда, 19.02.2014, 10:51
 
Ответить
СообщениеХочу сам написать для себя полный учет семейного бюджета, начало было положено хорошо,но сегодня столкнулся с серьезной проблемой: хотел написать универсальную функцию -
[vba]
Код
функция (область, что ищем, что записывать)
       переменная1 = область.поиск (что ищем)
       пока переменная1 найдена то
             функция = функция + значение(переменная1.offset( , что записывать))
       конец пока
конец функции
[/vba]
[vba]
Код
Function GetSumm(RangeData As Range, Name, offset As Integer)

Dim foundCell As Range

Set foundCell = RangeData.Find(Name, LookIn:=xlFormula)
           If Not foundCell Is Nothing Then
             GetSumm = foundCell
             Set foundCell = .FindNext(foundCell)
           Else
             GetSumm = -1
           End If
                  
End Function
[/vba]
сделал бы цикл while, дак боюсь, что он бесконечный будет т.к. всегда будет находиться .FindNext(foundCell)
функция пишется для первого листа для диаграммы в которую нужно объедененные данные подставить т.е. суммы
Тему буду развивать по мере поступления вопросов (хочу еще многое добавить)

Автор - Ivanius
Дата добавления - 18.02.2014 в 19:43
alex77755 Дата: Среда, 19.02.2014, 01:04 | Сообщение № 2
Группа: Проверенные
Ранг: Обитатель
Сообщений: 362
Репутация: 64 ±
Замечаний: 0% ±

Бухгалтерия в ексел? Уж лучше микроскопом гвозди заколачивать!
На базах ещё куда ни шло!
Хотя бы на Аксессе
Или DBF
тем более с таким подходом обработки данных!
Построчное считывание значений!
Тормоз будет страшный


Могу помочь в VB6, VBA
Alex77755@mail.ru


Сообщение отредактировал alex77755 - Среда, 19.02.2014, 01:07
 
Ответить
СообщениеБухгалтерия в ексел? Уж лучше микроскопом гвозди заколачивать!
На базах ещё куда ни шло!
Хотя бы на Аксессе
Или DBF
тем более с таким подходом обработки данных!
Построчное считывание значений!
Тормоз будет страшный

Автор - alex77755
Дата добавления - 19.02.2014 в 01:04
Ivanius Дата: Среда, 19.02.2014, 14:52 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 14
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
достаточно простую программку для себя пишу, вот и прошу помощи, есть конкретный вопрос, в чем проблема?
 
Ответить
Сообщениедостаточно простую программку для себя пишу, вот и прошу помощи, есть конкретный вопрос, в чем проблема?

Автор - Ivanius
Дата добавления - 19.02.2014 в 14:52
Ivanius Дата: Четверг, 20.02.2014, 15:05 | Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 14
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
вот так вот получилось:[vba]
Код

Function GetSumm(RangeData As Range, Name, offset As Integer)

Dim firstFind, FoundCell As Range
Dim summ

Set FoundCell = RangeData.Find(Name, LookIn:=xlFormulas, LookAt:=xlPart)

   If Not FoundCell Is Nothing Then
      summ = summ + FoundCell.offset(, 1).Value
      Set firstFind = FoundCell
finding:
       Set FoundCell = RangeData.Find(Name, after:=Range(FoundCell.Address), LookIn:=xlFormulas, LookAt:=xlPart)
       If (Not FoundCell.Address = firstFind.Address) And (Not FoundCell Is Nothing) Then
         summ = summ + FoundCell.offset(, 1).Value
         GoTo finding
         Else
         GoTo endi
       End If
endi:
   Else
       GetSumm = -1
   End If
    GetSumm = summ
End Function
[/vba]
 
Ответить
Сообщениевот так вот получилось:[vba]
Код

Function GetSumm(RangeData As Range, Name, offset As Integer)

Dim firstFind, FoundCell As Range
Dim summ

Set FoundCell = RangeData.Find(Name, LookIn:=xlFormulas, LookAt:=xlPart)

   If Not FoundCell Is Nothing Then
      summ = summ + FoundCell.offset(, 1).Value
      Set firstFind = FoundCell
finding:
       Set FoundCell = RangeData.Find(Name, after:=Range(FoundCell.Address), LookIn:=xlFormulas, LookAt:=xlPart)
       If (Not FoundCell.Address = firstFind.Address) And (Not FoundCell Is Nothing) Then
         summ = summ + FoundCell.offset(, 1).Value
         GoTo finding
         Else
         GoTo endi
       End If
endi:
   Else
       GetSumm = -1
   End If
    GetSumm = summ
End Function
[/vba]

Автор - Ivanius
Дата добавления - 20.02.2014 в 15:05
alex77755 Дата: Четверг, 20.02.2014, 16:47 | Сообщение № 5
Группа: Проверенные
Ранг: Обитатель
Сообщений: 362
Репутация: 64 ±
Замечаний: 0% ±

Goto, Goto не красиво.
Пример без Goto. Здесь добавляются значения в список. Поменяй на суммирование

[vba]
Код
Dim C ' номер колонки со списком
C = 1 ' если надо поменять
ListBox1.Clear
With Worksheets("Работы")
Set RN0 = Range(.Cells(1, C), .Cells(.Cells(.Rows.Count, C).End(xlUp).Row, C))
End With
With RN0
     Set RNG = .Find(What:=TextBox1.Value, LookIn:=xlValues, LookAt:=xlPart)
         If Not RNG Is Nothing Then
             Адрес = RNG.Address
             Do
                 ListBox1.AddItem RNG
                Set RNG = .FindNext(RNG)
             Loop While Адрес <> RNG.Address
         End If
End With
[/vba]


Могу помочь в VB6, VBA
Alex77755@mail.ru
 
Ответить
СообщениеGoto, Goto не красиво.
Пример без Goto. Здесь добавляются значения в список. Поменяй на суммирование

[vba]
Код
Dim C ' номер колонки со списком
C = 1 ' если надо поменять
ListBox1.Clear
With Worksheets("Работы")
Set RN0 = Range(.Cells(1, C), .Cells(.Cells(.Rows.Count, C).End(xlUp).Row, C))
End With
With RN0
     Set RNG = .Find(What:=TextBox1.Value, LookIn:=xlValues, LookAt:=xlPart)
         If Not RNG Is Nothing Then
             Адрес = RNG.Address
             Do
                 ListBox1.AddItem RNG
                Set RNG = .FindNext(RNG)
             Loop While Адрес <> RNG.Address
         End If
End With
[/vba]

Автор - alex77755
Дата добавления - 20.02.2014 в 16:47
Ivanius Дата: Четверг, 20.02.2014, 17:31 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 14
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
проблема в том что в моем екселе не работает : э
[vba]
Код
.FindNext - пробовал (только через простой файнд с указанием адреса)
и если через цикл не работает exit do, тоже проверял
[/vba]
Далее я то пишу функцию и мне ЯВНО (т.е. какие-то либо номера) нельзя указывать только переменные взятые из входящих данных в функцию а именно - RangeData - т.е. указывается область поиска, name - что искать тоже может быть область, ну и оффсет это данные которые будут считываться и братся относительно найденного.
Ну меня пока на самом деле все устраивает, знаю что не красиво, я вообще программист на delphi и мне некоторые моменты не понятны, точнее то что выше не работает у меня...
вот так вот в итоге получилось, ничего лишнего и достаточно просто:
[vba]
Код
Function GetSumm(RangeData As Range, Name, offset As Integer)

Dim firstFind, FoundCell As Range

Set FoundCell = RangeData.Find(Name, LookIn:=xlFormulas, LookAt:=xlPart)

   If Not FoundCell Is Nothing Then
      GetSumm = GetSumm + FoundCell.offset(, offset).Value
      Set firstFind = FoundCell
finding:
       Set FoundCell = RangeData.Find(Name, after:=Range(FoundCell.Address), LookIn:=xlFormulas, LookAt:=xlPart)
       If (Not FoundCell.Address = firstFind.Address) And (Not FoundCell Is Nothing) Then
         GetSumm = GetSumm + FoundCell.offset(, offset).Value
         GoTo finding
         Else
         GoTo endi
       End If
endi:
   Else
       GetSumm = -1
   End If
End Function
[/vba]


Сообщение отредактировал Ivanius - Четверг, 20.02.2014, 17:32
 
Ответить
Сообщениепроблема в том что в моем екселе не работает : э
[vba]
Код
.FindNext - пробовал (только через простой файнд с указанием адреса)
и если через цикл не работает exit do, тоже проверял
[/vba]
Далее я то пишу функцию и мне ЯВНО (т.е. какие-то либо номера) нельзя указывать только переменные взятые из входящих данных в функцию а именно - RangeData - т.е. указывается область поиска, name - что искать тоже может быть область, ну и оффсет это данные которые будут считываться и братся относительно найденного.
Ну меня пока на самом деле все устраивает, знаю что не красиво, я вообще программист на delphi и мне некоторые моменты не понятны, точнее то что выше не работает у меня...
вот так вот в итоге получилось, ничего лишнего и достаточно просто:
[vba]
Код
Function GetSumm(RangeData As Range, Name, offset As Integer)

Dim firstFind, FoundCell As Range

Set FoundCell = RangeData.Find(Name, LookIn:=xlFormulas, LookAt:=xlPart)

   If Not FoundCell Is Nothing Then
      GetSumm = GetSumm + FoundCell.offset(, offset).Value
      Set firstFind = FoundCell
finding:
       Set FoundCell = RangeData.Find(Name, after:=Range(FoundCell.Address), LookIn:=xlFormulas, LookAt:=xlPart)
       If (Not FoundCell.Address = firstFind.Address) And (Not FoundCell Is Nothing) Then
         GetSumm = GetSumm + FoundCell.offset(, offset).Value
         GoTo finding
         Else
         GoTo endi
       End If
endi:
   Else
       GetSumm = -1
   End If
End Function
[/vba]

Автор - Ivanius
Дата добавления - 20.02.2014 в 17:31
Stormy Дата: Пятница, 21.02.2014, 21:14 | Сообщение № 7
Группа: Проверенные
Ранг: Обитатель
Сообщений: 357
Репутация: 12 ±
Замечаний: 0% ±

Excel 2010
Ivanius,
Дело конечно-же Ваше, но почему все так сложно?

Почему не одна таблица/форма Приход/Расход с одним столбцом в котором можно выбрать пункт приход или расход. Суммировать или отнимать от остатка. Сделать одну таблицу где выбирая промежуток дат с и по можно просмотреть как все по отдельности так на опред. день. Дальше хоть диаграмму, хоть график чертите.


Место для рекламы.
 
Ответить
СообщениеIvanius,
Дело конечно-же Ваше, но почему все так сложно?

Почему не одна таблица/форма Приход/Расход с одним столбцом в котором можно выбрать пункт приход или расход. Суммировать или отнимать от остатка. Сделать одну таблицу где выбирая промежуток дат с и по можно просмотреть как все по отдельности так на опред. день. Дальше хоть диаграмму, хоть график чертите.

Автор - Stormy
Дата добавления - 21.02.2014 в 21:14
Ivanius Дата: Понедельник, 24.02.2014, 16:50 | Сообщение № 8
Группа: Пользователи
Ранг: Новичок
Сообщений: 14
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Stormy, ооо спасибо за совет, сейчас совмещу табличку, уже начал усложнять систему и увидел сложности реализации, а многого в ВБА просто не знаю.
 
Ответить
СообщениеStormy, ооо спасибо за совет, сейчас совмещу табличку, уже начал усложнять систему и увидел сложности реализации, а многого в ВБА просто не знаю.

Автор - Ivanius
Дата добавления - 24.02.2014 в 16:50
Stormy Дата: Понедельник, 24.02.2014, 17:54 | Сообщение № 9
Группа: Проверенные
Ранг: Обитатель
Сообщений: 357
Репутация: 12 ±
Замечаний: 0% ±

Excel 2010
Ivanius,
Дык, дело не в сложности таблицы, дело в том как ее вести. Для Вашей задачи и не нужны спец-функции, стандартных больше чем достаточно. Опять таки, это все мое мнение.


Место для рекламы.
 
Ответить
СообщениеIvanius,
Дык, дело не в сложности таблицы, дело в том как ее вести. Для Вашей задачи и не нужны спец-функции, стандартных больше чем достаточно. Опять таки, это все мое мнение.

Автор - Stormy
Дата добавления - 24.02.2014 в 17:54
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Домашняя бухгалтерия - Свои формулы (Функции Function)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!