VBA / excel-VBA - добавить два значения с разделителем точек - PullRequest
0 голосов
/ 05 мая 2011

Я новичок в VBA и мне нужно добавить два значения, используя VBA в Excel.Я получаю импортированные значения с разделителем точек, и если я пытаюсь добавить их, точка игнорируется.

Итак:

1.12
1.34

должно привести к 2,46, но я получаю 246

Код:

Do Until (Cells(iRow, 1) = 100)
  addValue = Cells(iRow, 2).Value
  dValue = dValue + addValue
  iRow = iRow + 1
  MsgBox (dValue)
Loop

Спасибо за 101 подсказку ...

Вот обновленный код:

Dim iRow As Integer
Dim addValue As Double
Dim dValue As Double

iRow = 2

Do Until (Cells(iRow, 1) = 100)
addValue = Cells(iRow, 8) 
Debug.Print "Row"; iRow; " is "; addValue 
modValue = Replace(addValue, ".", ",")
MsgBox (addValue)
newVal = Cells(iRow, 8).Value

dValue = dValue + newVal
iRow = iRow + 1

Loop
MsgBox (dValue)

В основном у меня естьгорит таких значений:

100    header
200    1.12
200    1.34
200    1.54 
100    header

...

Я хочу сложить 200 соответствующих значений 1.12, 1.34, 1.54.Значения отображаются как 112, 134 и 154.

Спасибо

Ответы [ 3 ]

0 голосов
/ 05 мая 2011

Я думаю, у вас есть забавное форматирование чисел, примененное к значениям в Excel. Выделите диапазон и нажмите Ctrl-Shift-`(или отформатируйте ячейки как« Общие »в меню форматирования). Бьюсь об заклад, эти цифры на самом деле 112 и 134.

0 голосов
/ 19 июля 2012

Правильно ... Проблема заключается в форматировании, и в Excel настаивают на том, чтобы описать (скажем) «4/7» как «четвертое июля», а не как четыре-седьмые *.Или действительно, как текстовая «Четыре слеша семь».

Я не знаю, какой странный формат был выбран в этих «десятичных» ячейках, но у вас есть две работы:

  1. Измените числовой формат этих ячеек на «общий», чтобы вы могли видеть, что на самом деле в них, а не то, что Excel хочет представить;
  2. Измените код для использования свойства 'Value2' диапазона, который дает необработанные данные вместо отформатированной интерпретации 'value' - newVal = Cells (iRow, 8) .Value2

Я бы также рекомендовал объявить NewVal как Double.Это приведет к преобразованию типа в число с плавающей точкой, что гораздо лучше, чем позволить «варианту» решить, каким типом он должен быть, основываясь на форматировании информации в диапазоне.

Я бы лучше предупредилВы, что эта задача (1) работает примерно половину времени с данными, импортированными из баз данных Oracle, а числа, скопированные из электронных таблиц, происходящих из Франции (где запятая используется в качестве десятичной точки), лучше подходят для семиотического анализа, разработанного FrenchДеконструктивистские философы , а не статистический анализ и арифметический расчет.


* Вы сможете (или не сможете) воспроизвести эту ошибку через некоторое время , в зависимости от локали вашего компьютера.И это большой урок сегодняшнего дня: проблема усугубляется, когда она прерывистая, непредсказуемая или непоследовательно воспроизводимая.

0 голосов
/ 05 мая 2011

Не могли бы вы поставить эту строку после addValue =, пожалуйста?

Debug.Print "Row"; iRow; " is "; addValue

Неожиданно, я подозреваю, что 1.12 на самом деле не двойник.

Кроме того, вы объявили свои переменные? Ничего особенного, но что-то вроде

Dim iRow As Integer
Dim addValue As Double
Dim dValue As Double

Наконец, вы можете рассмотреть возможность размещения MsgBox после цикла, вместо того, чтобы давать промежуточный итог каждому; итерация.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...