Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: Формула с числами. Добавлено: 15.07.08 10:25  

Автор вопроса:  KiZ
Вопрос такой: В первой ячейке A1 находится число. Во второй ячейке A2 тоже число. Как сделать так, чтобы в третьей была ФОРМУЛА числа, через сумму двух чисел.
Т.е. 18, 20
=18+20 и притом отображалось 38, но по формуле именно =18 + 20.
Вот как я сделал, но это не работает, если если числа не целые(( почему-то не хочет распозновать точку, а в строке Stringall присваивает запятую, как разделитель.
Как это исправить?


For l = 1 To m
    Str1 = Cells(l + 1, 1)
    Str2 = Cells(l + 1, 2)
    StringAll = "=" & Str1 & "+" & Str2
'в следующей строке выдает ошибку, если числа не целые
    Cells(l + 1, 3) = StringAll
    Next l
    

Ответить

  Ответы Всего ответов: 15  

Номер ответа: 1
Автор ответа:
 KiZ



Вопросов: 27
Ответов: 68
 Профиль | | #1 Добавлено: 15.07.08 11:02
Что-то я плохо подумал)) оказалось все просто:



Sub lom()
    m = 3
    For l = 1 To m
    Str1 = Cells(l + 1, 1)
    Str2 = Cells(l + 1, 2)
    Str1 = Replace(Str1, ",", ".";)
    Str2 = Replace(Str2, ",", ".";)
    StringAll = "=" & Str1 & "+" & Str2
    Cells(l + 1, 3) = StringAll
    Next l
End Sub

Ответить

Номер ответа: 2
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #2
Добавлено: 15.07.08 13:17
Плохо подумал, да. На некоторых виндах десятичным разделителем является запятая, и этот код работать тоже не будет =)

Ответить

Номер ответа: 3
Автор ответа:
 KiZ



Вопросов: 27
Ответов: 68
 Профиль | | #3 Добавлено: 15.07.08 13:40
мдя. это я действительно плохо подумал) блин и как же быть? можно программно поставить разделителем десятичной части точку?

Ответить

Номер ответа: 4
Автор ответа:
 J. Smith



ICQ: ненавижу 

Вопросов: 40
Ответов: 477
 Web-сайт: Не хочу ломать голову, если её уже сломал кто-то другой.
 Профиль | | #4
Добавлено: 15.07.08 13:47
Разделитель кажись устанавливается в настройках 'Панель управления' - 'Дата, время, язык и региональные стандарты', Следовательно он есть в реестре.

Ответить

Номер ответа: 5
Автор ответа:
 KiZ



Вопросов: 27
Ответов: 68
 Профиль | | #5 Добавлено: 15.07.08 15:01
Да это понятно. Только с реестром программно я не работал не разу) и боюсь))
Ну если вдруг на другом компе будет, то ведь можно типо сообщения написать: "Внимание! Проследите, чтобы разделителем была точка!" )))
ну а там Да/Нет. Если нет, то выход.... ну или как-то так...

Ответить

Номер ответа: 6
Автор ответа:
 Jasmin



Вопросов: 23
Ответов: 417
 Профиль | | #6 Добавлено: 15.07.08 15:11
Попробуй вот так:
DateDelimiter = Mid$(Format(Date, "General Date";), 3, 1)
TimeDelimiter = Mid$(Format(0.5, "Long Time";), 3, 1)
DecimalDelimiter = Mid$(Format(1.1, "General Number";), 2, 1)

Ответить

Номер ответа: 7
Автор ответа:
 Jasmin



Вопросов: 23
Ответов: 417
 Профиль | | #7 Добавлено: 15.07.08 15:14
А еще можно так:
  A = Application.International(xlDateSeparator)
  MsgBox "The date separator is " & A
  A = Application.International(xlTimeSeparator)
  MsgBox "The time separator is " & A
  A = Application.International(xlDecimalSeparator)
  MsgBox "The decimal separator is " & A

Очень удобно. :-) Сделал проверку, заменил на что нужно и сообщение не нужно. :-)

Ответить

Номер ответа: 8
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #8
Добавлено: 16.07.08 01:16
Кто-то делал еще проще. Кажется ЮЮ.
Вроде так:
delimiter = Format$(",";)

щас не могу проверить - нет ВБ. на форуме было месяц назад.

Ответить

Номер ответа: 9
Автор ответа:
 Jasmin



Вопросов: 23
Ответов: 417
 Профиль | | #9 Добавлено: 16.07.08 06:06
Согласна, но это получается как переменная. А я читаю системные настройки разделителей. :-)

Ответить

Номер ответа: 10
Автор ответа:
 KiZ



Вопросов: 27
Ответов: 68
 Профиль | | #10 Добавлено: 16.07.08 10:11
Как я понимаю, Jasmin предложила узнать разделитель.. а можно ли его как-нить подправить/поставить другой из макроса?

Ответить

Номер ответа: 11
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #11
Добавлено: 16.07.08 10:36
А зачем? =) Ну замени в своих ячейках твой разделитель на системный.

Ответить

Номер ответа: 12
Автор ответа:
 Jasmin



Вопросов: 23
Ответов: 417
 Профиль | | #12 Добавлено: 16.07.08 12:13
Где-то я видела, что можно. Не помню где. :-( Но точно помню, что было написано, что это считается "дурным тоном". Лучше обрабатывать у себя, чем менять системно.

Ответить

Номер ответа: 13
Автор ответа:
 J. Smith



ICQ: ненавижу 

Вопросов: 40
Ответов: 477
 Web-сайт: Не хочу ломать голову, если её уже сломал кто-то другой.
 Профиль | | #13
Добавлено: 16.07.08 12:40
это считается "дурным тоном"

Наверное так и есть, но например я не знаток правил хорошего тона и точно изменил бы настройки если они мне не нравятся.
В дробях принята запятая, так пусть и будет запятая, помоему это правильно.

Ответить

Номер ответа: 14
Автор ответа:
 Jasmin



Вопросов: 23
Ответов: 417
 Профиль | | #14 Добавлено: 16.07.08 13:48
Я тоже не знаток. Но там наверно имели ввиду ситуацию, когда в начале программы поменяли разделитель, отработали и закрылись. А разделитель так и остался поменянным. И другие проги ориентируясь именно на системные настройки "вдруг" перестают работать. Поэтому (лично я) предпочитаю обрабатывать в программе, чем менять настройки. :-) Особенно на тех компах, где не знаешь, какой будет стоят разделитель. Меньше мороки и подгонки.

Ответить

Номер ответа: 15
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #15
Добавлено: 16.07.08 13:52
Jasmin права. Системные настройки должны менять системные программы. А мы должны обрабатывать все самостоятельно, на то мы и программисты.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам