Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.59/39: Рейтинг темы: голосов - 39, средняя оценка - 4.59
0 / 0 / 0
Регистрация: 13.03.2011
Сообщений: 6

функция Vba for Excel

23.03.2011, 05:59. Показов 7119. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток.

Опыта работы с VBA практически нет.
Необходимо написать макрос, который будет выполнять следующие действия (во вложении пример):
1.Искать в первой строке заголовка название столбца "payments"(в этом столбце содержаться исходные данные)
2.Создавать соседний столбец например "payments_correct" (в нем будут преобразованные
данные + ";" в начале строки)

Данные должны быть преобразованы следующим образом:
Необходимо изменить тип даты с yyyy.mm.dd на dd.mm.yyyy
(Все Даты, кроме первых в строке начинаются с символа ";" заканчиваются "=".)


Прошу прощения, если непонятно написал. Повторюсь, что опыта работы с VBA нет.
Пробовал использовать текстовые функции (Mid, replace), читал форум, но очень туговато пока.
Буду благодарен любой помощи...
Вложения
Тип файла: xls payments.xls (19.0 Кб, 67 просмотров)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.03.2011, 05:59
Ответы с готовыми решениями:

VBA excel функция Find - принцип поиска
Добрый день, уважаемые форумчане! В очередной раз обращаюсь к Вам за помощью. Имеется следующий код: dim kodG as single kodG...

Excel 2007 VBA. Функция с двумя аргументами не хочет работать
Компилятор ругается, на CulculationCumulativeNormalFunction (dbDelta1, dbNDFd1) говорит что функиция ожидает :=... или через раз просто...

Пользовательская функция на VBA для Excel - как вставить данные на лист?
Привет. Что-то я туплю - у меня функция возвращает массив из двух значений. Но на лист выкладывает одно. Не могу сообразить, как оба...

11
763 / 270 / 57
Регистрация: 13.12.2009
Сообщений: 1,110
23.03.2011, 09:23
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Private Sub CommandButton1_Click()
Dim s As String
i = 2
s = Cells(i, 1)
Cells(1, 2) = "payments_correct"
Do
 
d = Split(s, ";")
For j = 0 To UBound(d)
r = Len(d(j))
f = Format(Mid(d(j), 1, 10), "dd.mm.yyyy")
g = Mid(d(j), 12, r - 10)
h = h + g & " = " & f & ";"
 
Next
Cells(i, 2) = h
i = i + 1
s = Cells(i, 1)
Loop While s <> ""
End Sub
не совсем понял как записать данные -если не так поменяй их порядок в переменной h
1
0 / 0 / 0
Регистрация: 13.03.2011
Сообщений: 6
23.03.2011, 10:03  [ТС]
Большое спасибо за помощь!
Цитата Сообщение от all_angarsk Посмотреть сообщение
h = h + g & " = " & f & ";"
Пробовал менять местами переменные в этой строке.
В столбце payments_correct порядок такой же как и в payments(кроме формата даты):
Пример
payments: yyyy.mm.dd=1111.00;yyyy.mm.dd=2222.00;.. ......
результат
payments_correct: dd.mm.yyyy=1111.00;dd.mm.yyyy=2222.00;.. ......

Вообще 1111.00 и 2222.00 это платежи, т.е. дата=сумма платежа;дата=сумма платежа;.......
0
763 / 270 / 57
Регистрация: 13.12.2009
Сообщений: 1,110
23.03.2011, 16:13
Ну так я и думал из твоего примера.
Если не работает то нужно следить за окончанием записи в строке
payments: yyyy.mm.dd=1111.00;yyyy.mm.dd=2222.00
во всех строках на конце не было ";", только в 5 и 9 строках была не законченные записи. Я убрал и все работает.

Теперь о результате:
программа выдает
payments_correct: dd.mm.yyyy=1111.00;dd.mm.yyyy=2222.00;.. ......
дата = платеж. ничего не нужно менять. я не понимаю.
Уточни как должен выглядель результат?
каким образом запускал программу?
1
0 / 0 / 0
Регистрация: 13.03.2011
Сообщений: 6
24.03.2011, 04:36  [ТС]
Спасибо тебе!
Visual Basic
1
h = h + f & " = " & g & ";"
- Это правильная последовательность (тут разобрались).

Но вот еще что выполняется неправильно:

Пример:

payments:
1;1
2;2;2;2
3;3;3

payments_current:
1;1
1;1;2;2;2;2
1;1;2;2;2;2;3;3;3
т.е. (из примера) я так понимаю, цикл для каждой новой строки продолжает хранить значения предыдущих.

А должно быть так:

payments:
1;1
2;2;2;2
3;3;3

payments_current:
1;1
2;2;2;2
3;3;3
0
763 / 270 / 57
Регистрация: 13.12.2009
Сообщений: 1,110
24.03.2011, 09:01
у меня этого не наблюдалось, принял меры.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Private Sub CommandButton1_Click()
Dim s As String
i = 2
s = Cells(i, 1)
Cells(1, 2) = "payments_correct"
Do
 
d = Split(s, ";")
For j = 0 To UBound(d)
r = Len(d(j))
f = Format(Mid(d(j), 1, 10), "dd.mm.yyyy")
g = Mid(d(j), 12, r - 10)
h = h + g & " = " & f & ";"
 
Next
Cells(i, 2) = h
h = ""
i = i + 1
s = "": d = ""
s = Cells(i, 1)
Loop While s <> ""
End Sub
1
0 / 0 / 0
Регистрация: 13.03.2011
Сообщений: 6
24.03.2011, 11:03  [ТС]
Красота. Спасибо огромное.
У меня вот такая функция получилась (параллельно делал, чтоб углубить знания):

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Function Platezh(Stroka) As String
     Dim myAr As Variant
     Dim i As Integer
     Dim Up As Integer, Down As Integer
     Dim res As String
   
      Const p2 As String = ";"
      myAr = Split(Stroka, p2)
 
      Up = UBound(myAr)
      Down = LBound(myAr)
 
     Dim tFind As String, tReplace As String
 
     res = Stroka
     For i = Down To Up
                tFind = Left(myAr(i), 10)
                tReplace = Right(tFind, 2) & "." & Mid(tFind, 6, 2) & "." & Left(tFind, 4)
                ' заменяем
                res = Replace(res, tFind, tReplace, 1, 1)
     Next i
     'Выводим результат
     If Len(Stroka) = 0 Then
          Platezh = ""
     Else
          Platezh = res
     End If
                 
End Function
0
1 / 1 / 0
Регистрация: 18.04.2011
Сообщений: 11
18.04.2011, 23:25
НАРОД ПОМОГИТЕ ПОЖАЛУЙСТА Лабораторная работа «Циклы в VBA в EXCELE»
4. Напишите программу для вычисления N! Результат вывести в окно msgbox.
5. Напишите программу для вычисления суммы ряда следующего вида: 1+ ½+1/3+1/4+…..Вычисления закончить тогда, когда очередной член ряда станет меньше 0,001. Результат вывести в окно msgbox.
6. Напишите программу для ввода суммы заказа (с помощью функции Inputbox), внесения введенного значения в ячейку таблицы и вычисления суммы комиссионных (10% от заказа) Результат вычисления комиссионных поместите в соседнюю ячейку таблицы, рядом с суммой. Процесс должен выполняться циклически.
БУДУ ОЧЕНЬ ПРИЗНАТЕЛЕН, я совсем в этом не рублю, а завтра уже сдавать...(((
0
763 / 270 / 57
Регистрация: 13.12.2009
Сообщений: 1,110
19.04.2011, 05:10
зад №4
Visual Basic
1
2
3
4
5
6
7
Dim n As Integer, i As Integer
 
For i = 1 To 10
n = n + 2
Next
MsgBox n
End Sub
Добавлено через 39 минут
зад № 5
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private Sub CommandButton1_Click()
Dim n As Single, i As Integer, r As Single
Cells(1, 2) = "i"
Cells(1, 3) = "r"
Cells(1, 4) = "n"
i = 1: r = 1
Do While r > 0.001
r = 1 / i
n = n + r
Cells(i + 1, 2) = i
Cells(i + 1, 3) = r
Cells(i + 1, 4) = n
i = i + 1
Loop
End Sub
Добавлено через 1 час 8 минут
задан 6

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Private Sub CommandButton1_Click()
'прога заполняет табл последовательно
'для последующих вводов нужно нажать кнопку и таблица продолжит заполняться
'
'
 
Dim i As Integer, n As Integer, k As String, w As Single
Cells(1, 1) = "№ п.п"
Cells(1, 2) = "Сумма заказа"
Cells(i + 1, 3) = "Коммисия"
n = Val(InputBox("Введите количество заказов"))
k = Cells(2, 1)
If k = "" Then
m = 1
Else
Do While k <> ""
 
k = Cells(m + 2, 1)
m = m + 1
Loop
End If
For i = m To n + m - 1
Cells(i + 1, 1) = i
w = Val(InputBox("Введите сумму заказа"))
Cells(i + 1, 2) = w
Cells(i + 1, 3) = w * 0.1
Next
 
End Sub
0
1 / 1 / 0
Регистрация: 18.04.2011
Сообщений: 11
25.04.2011, 22:40
Помогите пожалуйста очень нужно сделать до четверга...а я в этом не рублю, мне хотя бо разобраться как это делать, заранее огромное спасибо тому кто поможет!!!(((

1. Создайте в произвольном месте Вашей рабочей книги таблицу:
X Y

2. Переменной X дайте значения в диапазоне от –10 до 10.
3. Для вычисления значения Y напишите пользовательскую функцию, реализующую следующий алгоритм:
x, x<-5
Y= x(в квадрате), -5<=x<=5
x(в кубе) x>5

Для написания функции используйте оператор If … Then … Else.
4. Создайте ещё одну пользовательскую функцию, вычисляющую размер комиссионных в зависимости от суммы заказа по правилу:
Сумма заказа, руб. Комиссионные, %
От 0 до 9999 10%
От 10000 до 19999 20%
От 20000 до 29999 30%
Свыше 30000 40%
Проверьте работу функции.
5. Придумайте свою пользовательскую функцию, использующую условный оператор.
Подготовьте отчет о проделанной работе.
1
763 / 270 / 57
Регистрация: 13.12.2009
Сообщений: 1,110
26.04.2011, 08:59
1-3
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Private Sub CommandButton1_Click()
Dim r As Range, i As Integer, y As Integer, x As Integer
Cells(2, 2) = "X"
Cells(2, 3) = "Y"
 
x = -10
For i = 1 To 21
Cells(i + 2, 2) = x
Cells(i + 2, 3) = kv(x)
x = x + 1
Next
End Sub
Function kv(x)
If x < -5 Then
kv = x
ElseIf x >= -5 And x <= 5 Then
kv = x * x
Else
kv = x * x * x
End If
 
End Function
4.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Private Sub CommandButton1_Click()
 
Dim r As String, i As Integer, y As Integer, x As Long
Cells(2, 2) = "Сумма заказа, руб"
Cells(2, 3) = "Комиссионные, %"
i = 1
r = Cells(2, 2)
Do While r <> ""
 r = Cells(i + 2, 2)
i = i + 1
Loop
x = Val(InputBox("Введите сумму заказа в рублях"))
Cells(i + 1, 2) = x
Cells(i + 1, 3) = wr(x)
 
 
End Sub
Function wr(x)
If x < 10000 Then
wr = x * 0.1
ElseIf x > 9999 And x < 20000 Then
wr = x * 0.2
ElseIf x > 19999 And x < 30000 Then
wr = x * 0.3
Else
wr = x * 0.4
End If
 
End Function
5.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Private Sub CommandButton1_Click()
 
Dim r As String, i As Integer, y As Integer, x As Long
Cells(2, 2) = "Сумма кредита, руб"
Cells(2, 3) = "Комиссионные, %"
i = 1
r = Cells(2, 2)
Do While r <> ""
 r = Cells(i + 2, 2)
i = i + 1
Loop
x = Val(InputBox("Введите сумму кредита в рублях"))
y = Val(InputBox("На сколько лет"))
Cells(i + 1, 2) = x
Cells(i + 1, 3) = wr(x, y)
 
End Sub
Function wr(x, y)
 
If x < 10000 And y < 0.5 Then
wr = x * 0.15
ElseIf x > 9999 And x < 20000 And y < 1 Then
wr = x * 0.12
ElseIf x > 19999 And x < 30000 And y < 2 Then
wr = x * 0.1
Else
wr = x * 0.08
End If
 
End Function
0
1 / 1 / 0
Регистрация: 18.04.2011
Сообщений: 11
06.05.2011, 00:08
Помогите пжл сделать задание у меня ничего не получается...(через функцию и условие как то надо по - моему)
1)Подсчитать по отдельности сумму положительных и сумму отрицательных чисел n введенных.
2)С клавиатуры вводятся произвольные числа подсчитать их кол - во,цикл должен завершить свою работу при вводе числа 9999.
3)Вывести в ячейки первого столбца числа Фибоначчи(1,1,2,3,5,8).Завершить вычисление когда очередной член данного ряда станет больше 30.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.05.2011, 00:08
Помогаю со студенческими работами здесь

Vba excel windows и vba excel Mac Os - Макинтош корявит шрифт
Всем привет, столкнулся с такой ситуацией. Макросы написаны на Excel 2016 Windows. Когда файл открывается и сохраняется на маке, весь...

Есть ли в VBA функция переводящая номер столбца в его буквенный эквивалент в Excel
Есть ли в VBA функция переводящая номер столбца в его буквенный эквивалент в Excel'е? Т.е. мне предположим надо вывести в msgbox...

VBA парсер выдает ошибку vba excel Run-time error '-2147319783 (80028019) и "microsoft ожидает пока другое приложение за
Добрый день, делаю свой первый парсер. Выдает ошибку vba excel Run-time error '-2147319783 (80028019) . одну категорию по каждому товару...

Функциия excel в функции excel на vba
С помощью мастера записи матросов получил следующую функцию ActiveCell.FormulaR1C1 = &quot;=IFERROR...

Функция в VBA Excel для закрепления области
Доброго времени суток, подскажите, пожалуйста, как программным способом в Excel закрепить область? Второй день читаю help и никак не могу...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru