Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 20.11.2007, 11:30   #11
Pavel55
Форумчанин
 
Регистрация: 21.08.2007
Сообщений: 292
По умолчанию

Ох, не знаю, тут или вы сами поправите код, как вам надо или, может, Pashulka Вам поможет.
Pavel55 вне форума
Старый 21.11.2007, 17:36   #12
Romuald
Форумчанин
 
Регистрация: 12.11.2007
Сообщений: 209
По умолчанию

Никак не идет
Romuald вне форума
Старый 23.11.2007, 09:28   #13
Romuald
Форумчанин
 
Регистрация: 12.11.2007
Сообщений: 209
По умолчанию

Кто знает , как сделать, помогите пожалуйста
Romuald вне форума
Старый 14.12.2007, 15:31   #14
Romuald
Форумчанин
 
Регистрация: 12.11.2007
Сообщений: 209
По умолчанию

SAS888
Посмотрите, пожалуйста
Как сделать эту задачку
Только у меня не запятая а точка
Romuald вне форума
Старый 15.12.2007, 12:37   #15
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Попробуй так:
Код:
Sub Test()
    
    x = Val(InputBox("Number after comma", "Number 1"))
    y = Val(InputBox("Number icrement", "Number 2"))
    z = Selection.Column
    For i = Selection.Row To Selection.Row + Selection.Count - 1
        On Error Resume Next
        D = Application.Find(",", CStr(Cells(i, z)), 1) 'позиция запятой
        If D = "" Then GoTo Metka
        A = Mid(Cells(i, z), D + 1) 'дробная часть числа (в виде целого)
        B = Val(Application.Substitute(CStr(Cells(i, z)), ",", "")) 'убираем запятую
        If Val(Mid(A, x, 1)) > 3 Then B = CStr(B + 10 ^ y) '+1 к нужному разряду
        Cells(i, z) = B / 10 ^ Len(A) 'возвращаем запятую
        
Metka:    Next i

End Sub
Я здесь не стал вставлять проверку на введенные значения и на правильность выбранного диапазона. Но если нужно - можно сделать.
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 15.12.2007 в 13:09.
SAS888 вне форума
Старый 15.12.2007, 12:45   #16
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Прошу прощенья, поторопился.
Следующий код исправлен и дополнен:
Код:
Sub Test()
    
    If Selection.Columns.Count > 1 Then
        MsgBox "Выделено более 1 столбца"
        Exit Sub
    End If
    x = Val(InputBox("Number after comma", "Number 1"))
    If x = 0 Then
        MsgBox "Недопустимое значение"
        Exit Sub
    End If
    y = Val(InputBox("Number increment", "Number 2"))
    If y > x Or y = 0 Then
        MsgBox "Недопустимое значение"
        Exit Sub
    End If
    
    z = Selection.Column
    For i = Selection.Row To Selection.Row + Selection.Count - 1
        On Error Resume Next
        D = Application.Find(",", CStr(Cells(i, z)), 1) 'позиция запятой
        If D = "" Then GoTo Metka
        A = Mid(Cells(i, z), D + 1) 'дробная часть числа (в виде целого)
        B = Val(Application.Substitute(CStr(Cells(i, z)), ",", "")) 'убираем запятую
        If Val(Mid(A, x, 1)) > 3 Then B = CStr(B + 10 ^ (Len(B) - (x - y + 1))) '+1 к нужному разряду
        Cells(i, z) = B / 10 ^ Len(A) 'возвращаем десятичную запятую
Metka: Next i
  
End Sub
Если я правильно понял, то ввод первого значения (здесь "x") - это номер цифры после запятой по которой контролируем < или > 3, а ввод второго значения (здесь "y") - это смещение влево, относительно "x" т. е. номер знака, который нужно модифицировать.
P.S. Макрос работает независимо от того, какой разделитель целой и дробной части числа установлен в Excel ("." или ",").
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 15.12.2007 в 21:16. Причина: Добавлено
SAS888 вне форума
Старый 15.12.2007, 21:15   #17
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

А если руководствоваться заданию из Вашего файла, то код будет выглядеть примерно так:
Код:
Sub Test()
    
    If Selection.Columns.Count > 1 Then
        MsgBox "Выделено более 1 столбца"
        Exit Sub
    End If
    x = Val(InputBox("Number after comma", "Number 1"))
    If x = 0 Then
        MsgBox "Недопустимое значение"
        Exit Sub
    End If
    
    z = Selection.Column
    For i = Selection.Row To Selection.Row + Selection.Count - 1
        Cells(i, z) = Application.Round(Cells(i, z), 10)
        On Error Resume Next
        D = Application.Find(",", CStr(Cells(i, z)), 1) 'позиция запятой
        If D = "" Then GoTo Metka
        A = Mid(Cells(i, z), D + 1) 'дробная часть числа (в виде целого)
        B = Val(Application.Substitute(CStr(Cells(i, z)), ",", "")) 'убираем запятую
        If Val(Mid(A, x, 1)) > 3 Then B = CStr(B + 10 ^ (Len(A) - x + 1)) '+1 к нужному разряду
        Cells(i, z) = Fix((B / 10 ^ Len(A)) * 10 ^ (x - 1)) / 10 ^ (x - 1) 'возвращаем десятичную запятую
Metka: Next i
  
End Sub
Вводим только один параметр (номер знака после запятой), и предыдущий знак модифицируем с последующим соответствующим округлением числа.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума
Старый 17.12.2007, 06:57   #18
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Улучшенная версия с подробными пояснениями находится в прикрепленном файле.
Я сделал так, что допустимо выбирать либо столбец целиком, либо диапазон ячеек в столбце. Если нужно иначе - можно воспользоваться циклом For Each Cell In Selection, т. е. для каждой ячейки выделенного диапазона.
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 30.01.2008 в 09:43.
SAS888 вне форума
Старый 17.12.2007, 12:22   #19
Romuald
Форумчанин
 
Регистрация: 12.11.2007
Сообщений: 209
По умолчанию

Пытаюсь запустить последнюю версию - ставлю любую цифру- никаких изменений. Просто странно

(у меня EXCEl 2003)
Romuald вне форума
Старый 17.12.2007, 17:29   #20
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Макрос сделан в Excel 2003.
Давайте уточним последовательность действий.
Пусть дан столбец с действительными числами (например, столбец "C" в моем файле).
1) Выделяем диапазон ячеек в столбце (или весь столбец).
2) При выделенном диапазоне запускаем макрос "Test" (при этом активный лист должен быть тот, где находится выделенный диапазон).
3) При запросе макросом значения "Number after comma", вводим число < или = количеству знаков после запятой. Это и будет тот знак, который будем сравнивать с числом 3.
После работы макроса получим измененный результат в выделенном диапазоне. Специально скачал именно этот файл и еще раз проверил.
Если все так, то скорее всего дело в следующем: макрос ничего не изменит в том случае, если в значениях не найдет разделителя целой и дробной части чисел. У меня ищется запятая. Установка Excel "Сервис/Параметры/Международные/Разделитель целой и дробной части" влияет только на отображение разделителя ( при любой установке, точка или запятая, все работает корректно). Как вариант, попробуйте заменить строку кода макроса D = Application.Find(",", CStr(Cells(i, z)), 1) на D = Application.Find(".", CStr(Cells(i, z)), 1)
Чем шире угол зрения, тем он тупее.
SAS888 вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
удаление не нужных знаков после запятой. Alar Общие вопросы Delphi 4 31.05.2012 19:59
как отрегулировать кол-во знаков после запятой, при выведении числа(delphi) photozaz Общие вопросы Delphi 11 10.02.2011 21:20
кол-во знаков после запятой в TEdit Petrucci Общие вопросы Delphi 9 04.07.2008 13:15
Количество цифр после запятой LIEN БД в Delphi 7 03.07.2008 22:12
Ограничение знаков после запятой,StringGrid Gorin Компоненты Delphi 9 20.09.2007 16:10