Новости:

Новая редакция правил форума: 2.4. Если вопрос или ответ содержится во вложенном файле, все-равно кратко описывайте в сообщении вопрос или суть решения. Это необходимо, чтобы тему можно было найти через поиск.

Главное меню

Антиапостроф

Автор Александр Супрун, 19.03.2013, 13:20

« назад - далее »

Александр Супрун

Добрый день!
Есть макрос удаления символа апострофа, который почему-то работает только с целыми числами. В ячейках с плавающей точкой символ апострофа удаляться не хочет.
ЦитироватьSub antiapostrof()
For Each cell In Selection
If cell.Value <> "'" Then cell.Value = "" + CStr(cell.Value)
Next
End Sub
Что нужно внести в код не знаю.

kuklp

#1
Во-первых нужно прочитать правила форума и выложить файл-пример. Во-вторых непонятно, чего Вы хотите добиться преобразованием строки в строку :) Для чего? Если просто убрать апостроф, то:
Sub www()
    Dim a
    a = Selection
    Selection = a
End Sub

Чтоб преобразовать текст в число(что на мой взгляд логичней):
Sub www()
    Dim a
    a = Selection
    Selection = a
    Selection.Replace ".", ".", 2
End Sub

В зависимости от системного разделителя дробной части, может понадобиться заменить первую точку на запятую.
Я, как всегда, чертовски адекватен... Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771

Александр Супрун

#2
Спасибо за ответ, исправляюсь и прикладываю к вопросу файлик. К сожалению все что вы посоветовали, как и моя процедура, работает только для целых чисел и отказывается преобразовывать числа с плавающей точкой.
Оказывается если во втором коде "преобразовать текст в число", если заменить точку на запятую...апостроф убирается после двойного применения макроса к выделенной ячейке (сначала запятая меняется в точку, а потом только после следующего применения точка меняется на запятую и данные превращаются в число).

kuklp

У меня отлично работает так:
Sub www()
    Dim a
    a = Selection
    Selection = a
    Selection.Replace Mid(1 / 2, 2, 1), ".", 2
End Sub

Я, как всегда, чертовски адекватен... Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771

Александр Супрун

Все то же самое - первое применение макроса - запятая меняется на точку, и формула значение естественно не считает, так как системный разделитель запятая, а второй раз применение макроса к той же ячейке - точка становиться запятой и все пучком. Что за чудеса. Может сделать цикл,чтобы макрос выполнялся 2 раза?

kuklp

#5
Попробуйте еще так:
Sub www()
    Dim a, i
    a = Selection
    For i = 1 To UBound(a, 2)
        If Not IsEmpty(a(1, i)) Then a(1, i) = CSng(a(1, i))
    Next
    Selection = a
End Sub

Или:
Sub www()
    Dim a, i
    a = Selection
    For i = 1 To UBound(a, 2)
        If Len(a(1, i)) Then a(1, i) = Val(Replace(a(1, i), ",", "."))
    Next
    Selection = a
End Sub

У меня работает вместо:
        If Len(a(1, i)) Then a(1, i) = Val(Replace(a(1, i), ",", "."))
просто:
        a(1, i) = Replace(a(1, i), ",", ".")
Как у Вас - не знаю. :)
Я, как всегда, чертовски адекватен... Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771

Александр Супрун

Процедура почему-то останавливается на
"For i = 1 To UBound(a, 2)"  :-[

kuklp

#7
Да ну!  Значит Вы либо не выделили диапазон, либо пример корявый, либо чего-то не договариваете. У меня все отлично работает начиная с первого кода.
Я, как всегда, чертовски адекватен... Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771

Александр Супрун

#8
Кажется разобрался! Все дело в выделенных ячейках. В общем тут такое: если
1) выделена одна ячейка, процедура за синей кнопкой не работает
2) выделены данные в строку - работает :)
3) выделены данные в столбец (введите что-либо ниже уже имеющихся данных и выделите их, убирает апостроф только в первой ячейке)
http://youtu.be/ov2h0SYknOw

kuklp

#9
Какой Вы пример выложили, такой я код и написал :)
Sub www()
    Dim a, i&, j&
    If Selection.Count = 1 Then MsgBox "Invalid selection!": Exit Sub
    a = Selection
        For i = 1 To UBound(a)
            For j = 1 To UBound(a, 2)
                If Len(a(i, j)) Then a(i, j) = Val(Replace(a(i, j), ",", "."))
            Next j, i
    Selection = a
End Sub
Больше переделывать не буду.
Я, как всегда, чертовски адекватен... Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771

Александр Супрун

#10
Спасибо большое за уделенное время. Вы мне очень помогли. Но никак все-таки не могу понять, чтобы не только в выделенной области удалять апостроф, но и в одиночно стоящей ячейке?