Вставка формулы в ячейку

Программирование на Visual Basic for Applications
Wasup!
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 120
Зарегистрирован: 21.06.2005 (Вт) 11:09

Вставка формулы в ячейку

Сообщение Wasup! » 04.05.2006 (Чт) 10:29

Из текстового файла читаются числа, которым нужно поменять знак и сложить. Но не просто сложить, а еще и показать из каких чисел получается сумма.
Например в текстовом файле числа:
Код: Выделить всё
         
  a       b
-123.45  678.90
то в формуле ячейки должно получиться =123.45+-678.90

Для получения этой формулы, приходится делать много действий:
Загружаю текстовый файл в книгу Excel, как файл фиксированной ширины.
Далее, чтобы поменять знак нужно числа из строкового представления преобразовать в числовое и умножить на -1. Причем если на компьютере разделитель целой/дробной частей числа
не точка, то перед преобразованием нужно эту точку заменить на системный разделитель.
Добавляется функция:
Код: Выделить всё
Public Function Cdbl2(Number As Variant) As Double
Dim tmpstr                 As String
Dim DecimalSeparator    As String

DecimalSeparator = Format(0, ".")
tmpstr = Trim(CStr(Number))
tmpstr = Replace(tmpstr, ".", DecimalSeparator)
Cdbl2 = CDbl(tmpstr)

End Function


Потом умножаю полученное число на -1, меняю знак. А потом результат перевожу обратно в строку, чтобы собрать формулу.
Получается так:

Cells(1, 3) = "=" & str(Cdbl2(Cells(1, 1)) * -1) & "+" & str(CDbl(Cells(1, 2)) * -1)

Достаточно сложный процесс, можно ли его как-то упростить?

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 04.05.2006 (Чт) 11:05

:shock: Это, по-твоему, сложный процесс?!
Для чего его нужно упрощать? Процессор грузит, места на диске для файла с макросом не хватает, или что?
Быть... или не быть. Вот. В чём вопрос?

Wasup!
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 120
Зарегистрирован: 21.06.2005 (Вт) 11:09

Сообщение Wasup! » 04.05.2006 (Чт) 11:29

Ну может этот процесс можно реализовать, как-то более компактно или просто. Меня несколько смутило, то что для получения простенькой формулы пришлось делать кучу преобразований, вводить дополнительную функцию. Поэтому подумал, вдруг что-то не так делаю.

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 04.05.2006 (Чт) 13:52

Ну, преобразования не сильно более сложные, чем сама формула. Не знаю, можно ли тут что-то оптимизировать (может быть, не переводить в процессе из строки в число, а потом обратно из числа в строку, а сразу все действия выполнять со строкой), но я бы на твоем месте просто не заморачивался - здесь нет никакой проблемы.
Быть... или не быть. Вот. В чём вопрос?

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 04.05.2006 (Чт) 14:03

Код: Выделить всё
Cells(1, 3) = "=" & Replace(-CStr(Cells(1, 1)) & "+" & -CStr(Cells(1, 2)), Format(0, "."), ".")

Кстати, спасибо за Format(0, ".") :)


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 60

    TopList