Запятая вместо точки в excel vba

A_Qz

31 / 8 / 4

Регистрация: 21.01.2018

Сообщений: 53

1

Excel

Замена запятой на точку

09.12.2018, 11:23. Показов 20227. Ответов 4

Метки нет (Все метки)


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

Совсем маленький «зацеп». Несколько лет назад все работало как положено. А сегодня перестало.
Точку на запятую меняет. Все в порядке. По тексту:

Visual Basic
1
2
3
4
        sB = Application.ActiveWorkbook.ActiveSheet.Cells(iI, iJ).Value
        If sB = "" Or sB = " " Then sB = "0"
        sB = Replace(sB, ",", ".", , , 1)
        Application.ActiveWorkbook.Worksheets(1).Cells(iI, iJ) = Val(sB)

А вот обратно:

Visual Basic
1
2
3
4
        sB = Str(Application.ActiveWorkbook.ActiveSheet.Cells(iI, iJ).Value)
        If sB = "" Or sB = " " Then sB = "0"
        sB = Replace(sB, ".", ",", , , 1)
        Application.ActiveWorkbook.Worksheets(1).Cells(iI, iJ) = sB

запятая остается. Только содержимое ячейки переводит в текстовый формат, но запятая без изменении. Пробовал предварительно форматировать в текстовый, но ничего. Создается впечатление, где-то в VBA крепко зашита автозамена точки на запятую. Спасибо за объяснение.



1



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

09.12.2018, 11:23

4

1813 / 1135 / 346

Регистрация: 11.07.2014

Сообщений: 4,002

09.12.2018, 17:33

2

Лучший ответ Сообщение было отмечено A_Qz как решение

Решение

A_Qz, видимо в настройках экселя Пуск — Настройка — Дополнительно стоит галка Использовать системные разделители, а в винде разделитель запятая. Либо исправить в винде, либо здесь убрать галку и в Разделитель … поставить точку.



1



A_Qz

31 / 8 / 4

Регистрация: 21.01.2018

Сообщений: 53

09.12.2018, 21:51

 [ТС]

3

Спасибо за подсказку, убрал галку — «Использовать системные разделители». Win не трогал. Меняет запятую на точку, но только, если в Excel разделитель — запятая, то для того, чтобы была поставлена точка, ячейку обязательно предварительно нужно перевести в текстовый формат:

VB.NET
1
2
        Cells(iI, iJ).Select
        Selection.NumberFormat = "@"



0



Burk

1813 / 1135 / 346

Регистрация: 11.07.2014

Сообщений: 4,002

10.12.2018, 05:40

4

A_Qz,

Цитата
Сообщение от A_Qz
Посмотреть сообщение

Excel разделитель — запятая, то для того, чтобы была поставлена точка, ячейку обязательно предварительно нужно перевести в текстовый формат:

Так надо поставить разделитель — точку и всё работает, привожу макросы, на которых проверял

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Sub From()
'Dim sB As String
        sB = Application.ActiveWorkbook.ActiveSheet.Cells(1, 1).Value
        If sB = "" Or sB = " " Then sB = "0"
        sB = Replace(sB, ",", ".", , , 1)
        Worksheets(1).Cells(1, 1) = Val(sB)
End Sub
 
Sub From2()
        sB = Str(Application.ActiveWorkbook.ActiveSheet.Cells(1, 1).Value)
        If sB = "" Or sB = " " Then sB = "0"
        sB = Replace(sB, ".", ",", , , 1)
        Application.ActiveWorkbook.Worksheets(1).Cells(1, 1) = Val(sB)
End Sub

Добавлено через 24 минуты
A_Qz, что-то ошибся (точка на запятую), плохо проверил, а вот так вроде работает

Visual Basic
1
2
3
4
5
6
7
Sub From2()
        Dim sB As String
        sB = Application.ActiveWorkbook.ActiveSheet.Cells(1, 1).Value
        If sB = "" Or sB = " " Then sB = "0"
        sB = Replace(sB, ".", ",", , , 1)
        Application.ActiveWorkbook.Worksheets(1).Cells(1, 1) = sB
End Sub



0



A_Qz

31 / 8 / 4

Регистрация: 21.01.2018

Сообщений: 53

10.12.2018, 18:40

 [ТС]

5

Это все понятно. Но мне нужно было, что бы при разделителе — запятая, сохранялась после замены точка. С тем, что бы я мог этот файл экспортировать в другие программы, где разделитель — точка. Ход действий был такой: убрал галку «Использовать системные разделители» и поправил код

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
          Cells.Select
          Selection.NumberFormat = "@"
          For iI = 1 To iR
            For iJ = 1 To iC
              sB = CStr(Workbooks.Application.Selection.Cells(iI, iJ))
              sB = Replace(sB, ",", ".", 1, -1, 1)
              Workbooks.Application.Selection.Cells(iI, iJ) = sB
            Next iJ
          Next iI
        End If
        Selection.NumberFormat = "General"
        Cells(1, 1).Select

В этом коде все работает так, как мне надо. sB была определена как String ранее.
При смене точки на запятую код такой:

VB.NET
1
2
3
4
5
6
7
8
9
          Cells.Select
          Selection.NumberFormat = "General"
          For iI = 1 To iR
            For iJ = 1 To iC
              sB = Workbooks.Application.Selection.Cells(iI, iJ)
              If sB = "" Or sB = " " Then Workbooks.Application.Selection.Cells(iI, iJ) = "0"
              Workbooks.Application.Selection.Cells(iI, iJ) = Workbooks.Application.Selection.Cells(iI, iJ).Value
            Next iJ
          Next iI

Спасибо ещё раз.



0



This seems to be a continuation to my answer to your previous question, but if so I think you misunderstood what I meant. I’ve taken your code and amended it with my suggestion, but I’ve not tested it:

Public Sub VirgulaPunct()
Dim oRow As Range
Dim cell As Range
Dim i As Long, j As Long
Dim MyString As String
Dim aux As String

    Application.ScreenUpdating = False

    For i = Selection(Selection.Count).Row To Selection.Cells(1, 1).Row Step -1

        For j = Selection(Selection.Count).Column To Selection.Cells(1, 1).Column Step -1
            MyString = Cells(i, j).Value
            MyString = Replace(MyString, ",", ";+;", 1)
            MyString = Replace(MyString, ".", ",", 1)
            MyString = Replace(MyString, ";+;", ".", 1)
            Cells(i, j).Value = MyString
        Next j
    Next i
    Application.ScreenUpdating = True
End Sub

So as I said in my previous answer, I do 3 calls to Replace, but I do them for the whole string rather than per character in the string.

For future reference, it would probably be better if you updated your original question rather than to create a new one and then you could leave a comment for me under my answer and I’d seen that you have done so.

 

при замене на экране все нормально, макросом — просто убирает точки, запятые не вставляет.  
формат стоит текстовый, но пробовал и с другими.  
нашел два способа:    
1 поставить впереди апостроф — потом все меняет, но слишком муторно.  

  2 более красиво :) ставлю автозамену точки на запятую..  
 потом меняю макросом в нужном диапазоне.. точку на точку — получается запятая :)  

  как еще?

 

Меняем числа в текстовом формате с не тем разделителем дробной части на числовой формат? Или я не так понял?

 

да! правда и я мог не так понять .. :)

 

вот файл.  

  поменяйте мне точки на запятые

 

Ctrl+H, «.» на «,». Лист NEW.

 

а первый мой пост читали?  

  макросом мне надо!

 

{quote}{login=слэн}{date=27.05.2008 03:25}{thema=}{post}вот файл.  

  поменяйте мне точки на запятые{/post}{/quote}В результате должны получится числа или должен остаться текст?  
И решение зависит от используемого разделителя дробной части.  
Поменять на запятую потому что запятая Application.DecimalSeparator?

 
 

нужно макросом и с наибольшей скоростью ибо данных может быть много

 

На первый вопрос, содержащий «или», ответ «да» непонятен.  
Может так пойдет?  
   Selection.Replace What:=».», Replacement:=Application.DecimalSeparator, LookAt:=xlPart, _  
       SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _  
       ReplaceFormat:=False

 

на самом деле ответ совершенно верен :)  

  уж из текста числа я сделаю..  

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

 

{quote}{login=Лузер™}{date=27.05.2008 04:03}{thema=}{post}На первый вопрос, содержащий «или», ответ «да» непонятен.  
Может так пойдет?  
   Selection.Replace What:=».», Replacement:=Application.DecimalSeparator, LookAt:=xlPart, _  
       SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _  
       ReplaceFormat:=False{/post}{/quote}  

  врят ли — но щас попробуююю

 

снимаю шляпу — работает.  

  теперь объясните разницу..    
пожалста-а-а

 

Вариант:  
‘Sub Макрос1()  
   With Range(«A1:D2»)  
       .Replace What:=»,», Replacement:=».», LookAt:=xlPart  
   End With  
End Sub

 

{quote}{login=слэн}{date=27.05.2008 04:18}{thema=}{post}снимаю шляпу — работает.  

  теперь объясните разницу..    
пожалста-а-а{/post}{/quote}А фиг его знает. Я точно знаю, что DecimalSeparator в VBA «.»  
Думаю, что VBA меняет точку на точку, имея в виду DecimalSeparator, а эксель меняет вбашный DecimalSeparator на свой.  
Плюс этого кода в независимости от региональных настроек юзера.

 

да, возможно.  

  еще раз спасибо

 

ZVI

Пользователь

Сообщений: 4328
Регистрация: 23.12.2012

—  
Application.DecimalSeparator всегда возвращает тот разделитель, который прописан в Сервис – Параметры – Международные – Разделитель целой и дробной части, даже если выбран флажок «Использовать системные разделители».  

  А символ десятичного разделителя чисел Excel зависит еще и от того, использованы ли системные разделители через меню: Сервис – Параметры – Международные — Использовать системные разделители.  

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

  Например:  
— системный десятичный знак – запятая;  
— в меню: Сервис – Параметры – Международные – Разделитель целой и дробной части указана точка, и при этом установлен флаг «Использовать системные разделители».  

  При этом Application.DecimalSeparator выдаст точку, а Excel-ю для числовых ячеек нужна запятая.  

  Чтобы не зависеть от подобных накладок я использую такую функцию:  

  ‘ Символ десятичного разделителя  
Function DecSep() As String  
With Application  
If .UseSystemSeparators Then  
DecSep = Mid$(CStr(0.1), 2, 1)  
Else  
DecSep = .International(xlDecimalSeparator)  
End If  
End With  
End Function  

  —  
ZVI

 

zvi, больше интересовала другая особенность:  

  при непосредственном указании             Range(Cells(2, 4), Cells(i, 7)).Replace What:=».», Replacement:=»,», LookAt:=xlPart, _  

  точки убираются, но запятые не появляются  

  при             Range(Cells(2, 4), Cells(i, 7)).Replace What:=».», Replacement:=Application.DecimalSeparator, LookAt:=xlPart, _  

    все нормально, точки меняются на запятые

 

{quote}{login=ZVI}{date=28.05.2008 01:37}{thema=Re:}{post}—  
Application.DecimalSeparator всегда возвращает тот разделитель, который прописан в Сервис – Параметры – Международные – Разделитель целой и дробной части, даже если выбран флажок «Использовать системные разделители».  

  А символ десятичного разделителя чисел Excel зависит еще и от того, использованы ли системные разделители через меню: Сервис – Параметры – Международные — Использовать системные разделители.  

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

  Например:  
— системный десятичный знак – запятая;  
— в меню: Сервис – Параметры – Международные – Разделитель целой и дробной части указана точка, и при этом установлен флаг «Использовать системные разделители».  

  При этом Application.DecimalSeparator выдаст точку, а Excel-ю для числовых ячеек нужна запятая.  

  Чтобы не зависеть от подобных накладок я использую такую функцию:  

  ‘ Символ десятичного разделителя  
Function DecSep() As String  
With Application  
If .UseSystemSeparators Then  
DecSep = Mid$(CStr(0.1), 2, 1)  
Else  
DecSep = .International(xlDecimalSeparator)  
End If  
End With  
End Function  

  —  
ZVI{/post}{/quote}Да. По поводу DecimalSeparator  
я ошибался.  
Сейчас провел небольшие изыскания и выяснил, что  
1. VBA всегда использует системный DecimalSeparator, хотя в коде употребляется только точка. Это понятно, т.к. запятая испоьзуется для других известных целей.  
2. Конструкция Application.International(xlDecimalSeparator) всегда корректно возвращает DecimalSeparator используемый в экселе, вне зависимости стоит галка UseSystemSeparators или нет  
3. Конструкция Mid$(CStr(0.1), 2, 1)  
всегда возвращает системый DecimalSeparator    
В приложении пример для опытов с услов. форматированием точка — красный, запятая — желтый.  
А также в модуле 2 нарытая аццкая функция для возврата системного DecimalSeparator :)  
2 слэн. Теперь думаю так: у Вас DecimalSeparator стоял точкой потому и прошло :)  
Можно тупо менять точку на точку, при этом ячейка переписывается заново, но уже с DecimalSeparator в понимании VBA  
Что характерно: Код типа Cells.Replace What:=».», Replacement:=Application.International(xlDecimalSeparator), LookAt:=xlPart, SearchOrder _  
       :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False  
работает, но корежит числа делая их текстом с «правильным» разделителем.  
Резьюм: меняем что-то на точку.

 
 

ZVI

Пользователь

Сообщений: 4328
Регистрация: 23.12.2012

{quote}{login=слэн}{date=28.05.2008 09:47}{thema=}{post}zvi, больше интересовала другая особенность:  

  при непосредственном указании             Range(Cells(2, 4), Cells(i, 7)).Replace What:=».», Replacement:=»,», LookAt:=xlPart, _  

  точки убираются, но запятые не появляются  

  при             Range(Cells(2, 4), Cells(i, 7)).Replace What:=».», Replacement:=Application.DecimalSeparator, LookAt:=xlPart, _  

    все нормально, точки меняются на запятые{/post}{/quote}  
—  
Метод .Replace хоть и со странностями, но с ним то все понятно.  

  Функция DecSep() мною была приведена в развитие темы, так как звучало «и с наибольшей скоростью ибо данных может быть много». С этой функцией замена текстовых ячеек на числовые работает в 2-3 раза быстрее, чем Replace. На моем компе — примерно в 2.9 раза быстрее.  

  Для того, чтобы сравнить эффективность 2-х методов замены прилагаю файл небольшой тест-системы с подробными комментариями.  
—  
ZVI

 

ZVI, безусловно, Вы нам уже не раз доказывали, что считать массив, обработать, записать гораздо быстрее, чем непосредственная обработка экселем.  
У меня показывает преимущество метода 2 в 1.89 раза.  
Но, с учетом моего предыдущего поста, я решил проэксперементировать и закоментировал следующий код  
‘    ds = DecSep()  
‘    For Each v In x  
‘      i = InStr(1, v, «.», 0)  
‘      If i > 0 Then Mid$(v, i, 1) = ds  
‘    Next  
Т.е. реально осталось:  
   x = .Value  
   .NumberFormat = «General»  
   .Value = x  
Работает, даже если поставить разделитель дробной части «%» :)  
Можно даже так:  
   .NumberFormat = «General»  
   .Value = .Value  
Но все это работает в отношении текста с точкой.

 

ZVI, простите, но я нашел у Вас ошибку.  
Mid$(v, i, 1) = ds меняет символ только для переменной v  
массив х остается без изменений. Т.е. работает так:  
x = .Value  
.NumberFormat = «General»  
.Value = x  
А «фор ич в ин х» пустая трата времени.  
Попробуйте с    
TestString = «1,5518»  
и    
i = InStr(1, v, «,», 0)  
В результате получаем числа, но такие: 15518. Без разделителя.

 

Придумал метод 3  
Идея такая:    
Пусть TestString = «1,5518», т.е. у нас некий текст с разделителем «запятая»  
Запоминаем текущие настройки .UseSystemSeparators и .DecimalSeparator  
меняем .DecimalSeparator на запятую или тот разделитель, который был в TestString    
копируем пустую ячейку, вставляем значения со сложением.  
Возвращаем настройки на место.  
Скорость приятно удивляет даже без оптимизации кода (см. файл)  
Поправил метод 2 немного.

 

ZVI

Пользователь

Сообщений: 4328
Регистрация: 23.12.2012

{quote}{login=Лузер™}{date=29.05.2008 09:21}{thema=}{post}ZVI, простите, но я нашел у Вас ошибку.  
Mid$(v, i, 1) = ds меняет символ только для переменной v  
массив х остается без изменений. Т.е. работает так:  
x = .Value  
.NumberFormat = «General»  
.Value = x  
А «фор ич в ин х» пустая трата времени.  
Попробуйте с    
TestString = «1,5518»  
и    
i = InStr(1, v, «,», 0)  
В результате получаем числа, но такие: 15518. Без разделителя.{/post}{/quote}  
—  
Да, Вы абсолютно правы!  
Действительно, у меня получился частный случай с лишним For Next.  

  Ваша идея с манипуляцией .UseSystemSeparators и .DecimalSeparator замечательная!  
Но только и она пока, к сожалению, является частным случаем, т.к. не работает, если системный разделитель запятая — выдает 15518.  
Возможно, нужно манипулировать системым разделителем вместо Excel-ного.  

  Смогу подключиться к проблеме уже на выходных.  
—  
ZVI

 

Она не совсем не работает. Я эксперементировал с запятой и получил работающий код. На радостях выложил. Продолжил эксперименты с разделителем «%» — не работает. Вернулся к запятой, снова не работает.  
Но работает с любым разделителем, если операцию спец вставки выполнять вручную. Даже записав их макрорекордером, я получаю 15518. Хотя еще один раз у меня сработал код, но отследить и повторить не удалось. :(

 

{quote}{login=Лузер™}{date=30.05.2008 10:24}{thema=}{post}Она не совсем не работает. Я эксперементировал с запятой и получил работающий код. На радостях выложил. Продолжил эксперименты с разделителем «%» — не работает. Вернулся к запятой, снова не работает.  
Но работает с любым разделителем, если операцию спец вставки выполнять вручную. Даже записав их макрорекордером, я получаю 15518. Хотя еще один раз у меня сработал код, но отследить и повторить не удалось. :({/post}{/quote}  

  вот-вот :)  

  но ваш первый код работает(у меня) без проблем.(это с replace и decimalseparator)  

  вообще мне нужно было:  
разархивировать файл  
получившийся текстовый файл загрузить в иксель(я загружаю с установкой столбцов в тесктовый формат, хотя тут и можно поиграть с сепаратором)  
вырезать из этого массива нужные данные(по двум параметрам)  
заменить точку на запятую  
преобразовать в числовой формат  
вставить в таблицу  

  файлов может быть до 1000  
строк в каждом до 20000  

  в конечной таблице строк до 800 000  

  сейчас работаю с 60 000 строк основной таблицы — для этого требуется обработать около 40 файлов — на генерацию таблицы уходит 27сек

 

Если есть возможность занести значения в эксель как текст с точкой (если установленный разделитель запятая то любые цифры разделённые точкой воспринимаются общим форматом как текст)  
для активного листа  
Sub USNumbers()  
  Application.ScreenUpdating = False  
  Application.Calculation = xlCalculationManual  
  Dim cell As Range  
  On Error Resume Next  
  For Each cell In ActiveSheet.Cells.SpecialCells(xlConstants, xlTextValues)  
     On Error Resume Next  
     cell.Value = Val(cell.Value)  
     On Error GoTo 0  
  Next cell  
  Application.Calculation = xlCalculationAutomatic  
  Application.ScreenUpdating = True  
End Sub  

  ‘функция вал работает только с us-строками  
‘aeyrwbz свид, тьфу cdbl работает с региональными стандартами, то бишь запятой

 

ZVI

Пользователь

Сообщений: 4328
Регистрация: 23.12.2012

{quote}{login=dl}{date=02.06.2008 08:40}{thema=val  и cdbl}{post}Если есть возможность занести значения в эксель как текст с точкой (если установленный разделитель запятая то любые цифры разделённые точкой воспринимаются общим форматом как текст)  
для активного листа  
Sub USNumbers()  
  Application.ScreenUpdating = False  
  Application.Calculation = xlCalculationManual  
  Dim cell As Range  
  On Error Resume Next  
  For Each cell In ActiveSheet.Cells.SpecialCells(xlConstants, xlTextValues)  
     On Error Resume Next  
     cell.Value = Val(cell.Value)  
     On Error GoTo 0  
  Next cell  
  Application.Calculation = xlCalculationAutomatic  
  Application.ScreenUpdating = True  
End Sub  

  ‘функция вал работает только с us-строками  
‘aeyrwbz свид, тьфу cdbl работает с региональными стандартами, то бишь запятой{/post}{/quote}  
—  
Верно, но это в 4 раза медленнее, чем модифицированный Лузером™ вариант 2.  
С учетом уточненой Слэном задачи (наверное, уже и выполненной), эффективнее, пожалуй, было бы считать весь текстовый файл в переменную, произвести в этой переменной замену точки на запятую, и затем с помощью .TextToColumns скопировать в ячейки как числа.  
Или, не мудрствуя, использовать исходный вариант 2 без For Next, так как речь идет о преобразовании точки в запятую, а не наоборот  
—  
ZVI

 

слэн

Гость

#30

05.06.2008 14:51:16

«спешу» предоставить уважаемому сообществу третий способ преобразования, еще более быстрый..  
благодаря предоставленному ZVI тесту, мне не пришлось себя утруждать :)  
см вложение  

  ps мне этот способ не понадобился  — я обошелся вообще без преобразования(вернее оно выполняется встроенными средствами иксель при открытии текстового файла). Надо конечно попробовать упомянутый ZVI способ чтения файла в переменную..

Прикрепленные файлы

  • post_19474.rar (13.8 КБ)

Как в ячейке точку заменить запятой?

Bananovyy
Новичок
Новичок
Аватара пользователя

 
Сообщения: 25
Зарегистрирован: 03.08.2008 (Вс) 16:04

Как в ячейке точку заменить запятой?

Как в ячейке точку заменить запятой, преобразовав тем самым слово в число?
Код записанный рекордером не работает:

Sub Макрос1()

Range(«A1:A10»).Select
Selection.Replace What:=».», Replacement:=»,», LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False

End Sub


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

Re: Как в ячейке точку заменить запятой?

Сообщение Wasup! » 27.10.2008 (Пн) 12:48

Как вариант

Код: Выделить всё
For Each c In Range("A1:A10")
    c.Value = Replace(c.Value, ".", ",")
Next

А вообще не точка или запятая определяют число это или текст, а региональные настройки конкретного компьютера (см. панель управления Regional and Language settings).
Быстро определить текущий разделитель:

Код: Выделить всё
? format$(0,".")


Bananovyy
Новичок
Новичок
Аватара пользователя

 
Сообщения: 25
Зарегистрирован: 03.08.2008 (Вс) 16:04

Re: Как в ячейке точку заменить запятой?

Сообщение Bananovyy » 01.11.2008 (Сб) 12:45

Wasup! писал(а):Как вариант

Код: Выделить всё
For Each c In Range("A1:A10")
    c.Value = Replace(c.Value, ".", ",")
Next

А вообще не точка или запятая определяют число это или текст, а региональные настройки конкретного компьютера (см. панель управления Regional and Language settings).
Быстро определить текущий разделитель:

Код: Выделить всё
? format$(0,".")

Получается та же ересь,
Пример:

1.11111 > 111 111
11.1111 > 111 111
111.111 > 111 111
1111.11 > 1111,11
11111.1 > 11111,1

Первые три строчки бредово преобразуются в число = 111 111 ?!?
Две последние точно меняют зпт на тчк, но при этом формат остается текстовый
с примечанием о преобразовании в число…

Суть сей операции в следующем:
Из Oracle вытаскивается массив данных, вставляется в Excel, все данные там забиты в текстовом формате, включая циферки… и каждый раз приходится делать лишние телодвижения через меню: Правка / Заменить ТЧК на ЗПТ… Необходимо текст преобразовать в циферки для возможности дальнейших расчётов-пересчётов этих циферок!!!… Что делать Х.З.

Последний раз редактировалось Bananovyy 01.11.2008 (Сб) 13:06, всего редактировалось 2 раз(а).


Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя

 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край
  • ICQ

Re: Как в ячейке точку заменить запятой?

Сообщение Денис » 01.11.2008 (Сб) 12:49

Bananovyy
Панель управления -> Язык и региональные стандарты -> Настройка -> Числа -> Разделитель целой и дробной части

Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.


Bananovyy
Новичок
Новичок
Аватара пользователя

 
Сообщения: 25
Зарегистрирован: 03.08.2008 (Вс) 16:04

Re: Как в ячейке точку заменить запятой?

Сообщение Bananovyy » 01.11.2008 (Сб) 13:00

Денис писал(а):Bananovyy
Панель управления -> Язык и региональные стандарты -> Настройка -> Числа -> Разделитель целой и дробной части

Там стоит запятая?!?


Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя

 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край
  • ICQ

Re: Как в ячейке точку заменить запятой?

Сообщение Денис » 01.11.2008 (Сб) 13:16

Bananovyy писал(а):

Денис писал(а):Bananovyy
Панель управления -> Язык и региональные стандарты -> Настройка -> Числа -> Разделитель целой и дробной части

Там стоит запятая?!?

Так. Начнем с самого начала: Откуда в твоих ячейках взялись числа с точками вместо запятых?

Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.


Bananovyy
Новичок
Новичок
Аватара пользователя

 
Сообщения: 25
Зарегистрирован: 03.08.2008 (Вс) 16:04

Re: Как в ячейке точку заменить запятой?

Сообщение Bananovyy » 01.11.2008 (Сб) 13:27

Денис писал(а):

Bananovyy писал(а):

Денис писал(а):Bananovyy
Панель управления -> Язык и региональные стандарты -> Настройка -> Числа -> Разделитель целой и дробной части

Там стоит запятая?!?

Так. Начнем с самого начала: Откуда в твоих ячейках взялись числа с точками вместо запятых?

Суть сей операции в следующем:
Из Oracle вытаскивается массив данных, вставляется в Excel, все данные там забиты в текстовом формате, включая циферки… и каждый раз приходится делать лишние телодвижения через меню: Правка / Заменить ТЧК на ЗПТ… Необходимо текст преобразовать в циферки для возможности дальнейших расчётов-пересчётов этих циферок!!!…

[alibek] :: Не стоит редактировать модераторские замечания.

Последний раз редактировалось Bananovyy 01.11.2008 (Сб) 14:22, всего редактировалось 1 раз.


iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Как в ячейке точку заменить запятой?

Сообщение iGrok » 01.11.2008 (Сб) 13:47

1) Мат, пусть даже скрытый, в конференции запрещён. Не стоит нарушать это правило.
2) По сабжу: Ну так вытаскивай из Оракла цифры! Каким-таким хитрым образом ты вытаскиваешь данные так, что у тебя там получается текст вместо цифр?

label:

cli

jmp label


Bananovyy
Новичок
Новичок
Аватара пользователя

 
Сообщения: 25
Зарегистрирован: 03.08.2008 (Вс) 16:04

Re: Как в ячейке точку заменить запятой?

Сообщение Bananovyy » 01.11.2008 (Сб) 13:49

iGrok писал(а):1) Мат, пусть даже скрытый, в конференции запрещён. Не стоит нарушать это правило.
2) По сабжу: Ну так вытаскивай из Оракла цифры! Каким-таким хитрым образом ты вытаскиваешь данные так, что у тебя там получается текст вместо цифр?

Ну так нельзя))))))))))


iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Как в ячейке точку заменить запятой?

Сообщение iGrok » 01.11.2008 (Сб) 14:09

Как нельзя, чего нельзя? Из Оракла цифры вытащить вместо текста? Можно.
А чего ещё нельзя?

Приведение текста к числу выглядит, к примеру, так:

Код: Выделить всё
text="100.10"
dec_delim=format$(0,".")
value=cdbl(replace(text,".",dec_delim))

Это если разделитель изначально точка.

А то, что там бредово преобразуется.. Ну покажи наконец код которым делаешь.

label:

cli

jmp label


Bananovyy
Новичок
Новичок
Аватара пользователя

 
Сообщения: 25
Зарегистрирован: 03.08.2008 (Вс) 16:04

Re: Как в ячейке точку заменить запятой?

Сообщение Bananovyy » 01.11.2008 (Сб) 14:21

iGrok писал(а):Приведение текста к числу выглядит, к примеру, так:

Код: Выделить всё
text="100.10"
dec_delim=format$(0,".")
value=cdbl(replace(text,".",dec_delim))

СУПЕР!!! ТО, ЧТО НАДО, ПАСИБОС!!!
:D


Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя

 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород
  • ICQ

Re: Как в ячейке точку заменить запятой?

Сообщение Viper » 02.11.2008 (Вс) 7:25

Bananovyy писал(а):

iGrok писал(а):Приведение текста к числу выглядит, к примеру, так:

Код: Выделить всё
text="100.10"
dec_delim=format$(0,".")
value=cdbl(replace(text,".",dec_delim))

СУПЕР!!! ТО, ЧТО НАДО, ПАСИБОС!!!
:D

Конечно супер, особенно если учесть, что ответ был дан в первом же сообщении.

Весь мир матрица, а мы в нем потоки байтов!


Bananovyy
Новичок
Новичок
Аватара пользователя

 
Сообщения: 25
Зарегистрирован: 03.08.2008 (Вс) 16:04

Re: Как в ячейке точку заменить запятой?

Сообщение Bananovyy » 02.11.2008 (Вс) 10:06

Млин, так я же только учусь)))
:wink:


Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя

 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород
  • ICQ

Re: Как в ячейке точку заменить запятой?

Сообщение Viper » 02.11.2008 (Вс) 12:17

Bananovyy писал(а):Млин, так я же только учусь)))
:wink:

Неужели читать?

Весь мир матрица, а мы в нем потоки байтов!



Вернуться в VBA

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

Сейчас этот форум просматривают: Google-бот и гости: 3

Like this post? Please share to your friends:
  • Запятая в excel через vba
  • Зарплата с помощью excel
  • Запчасти на инвалидную коляску excel
  • Зарплата пример расчета в excel
  • Запчасти для инвалидных колясок excel