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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.01.2010, 12:43   #11
sew960i
Пользователь
 
Регистрация: 24.01.2010
Сообщений: 34
По умолчанию

Ну вообщем это должны быть размеры...
38,39,40,41,42,43,44,45,46,47,
Но чтоб меньше занимало места решили сократить до
8,9,0,1,2,3,4,5,6,7,
sew960i вне форума Ответить с цитированием
Старый 31.01.2010, 13:01   #12
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Попробуйте такой вариант:

Код:
Function Остаток(ByRef ra As Range) As String
    Dim cell As Range, n As String, txt As String
    For Each cell In ra.Cells: txt = txt & cell.Text & ",": Next cell
    arr = Split(Replace(Replace(txt, ",,", ","), " ", ""), ",")
    For i = LBound(arr) To UBound(arr)
        If Len(arr(i)) Then
            n = Replace("-" & arr(i), "--", "")
            For j = i + 1 To UBound(arr)
                If arr(j) = n Then arr(i) = "": arr(j) = "": Exit For
            Next j
        End If
    Next i
    MyQuickSort arr
    For i = LBound(arr) To UBound(arr)
        If IsNumeric(arr(i)) Then arr(i) = arr(i) Mod 10
    Next i
    Остаток = Replace(Application.Trim(Replace(Join(arr, ","), ",", " ")) & " ", " ", ",")
End Function
Пример файла:

EducatedFool вне форума Ответить с цитированием
Старый 31.01.2010, 13:11   #13
sew960i
Пользователь
 
Регистрация: 24.01.2010
Сообщений: 34
По умолчанию

Пишет:
Compile error
Sub of function not defined...
--------------------------------
И ясли я буду писать в ячейках
не 48,49,50 а 8,9,0 и тд (в сокращенном виде)...
будет правильно считать?
sew960i вне форума Ответить с цитированием
Старый 31.01.2010, 13:39   #14
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Сообщение от sew960i Посмотреть сообщение
Пишет:
Compile error
Sub of function not defined...
Я привёл код только изменённого макроса.
Функция сортировки осталась без изменений - её код скопируйте из предыдущего поста.

Есть же пример в файле - там же всё работает...

Цитата:
Сообщение от sew960i Посмотреть сообщение
И ясли я буду писать в ячейках
не 48,49,50 а 8,9,0 и тд (в сокращенном виде)...
будет правильно считать?
Нет.

Код сейчас обрабатывает полные размеры ( 48,49,50 )
после чего их сортирует по возрастанию, а затем оставляет только последние цифры от результата
(каждое число заменяется его остатком от деления на 10)
EducatedFool вне форума Ответить с цитированием
Старый 31.01.2010, 13:41   #15
sew960i
Пользователь
 
Регистрация: 24.01.2010
Сообщений: 34
По умолчанию

все работает...
Только мне нужно заполнять ячейки не в таком виде
38,39,40,41,42,43,44,45,46,47, и тд...
а в таком...
8,9,0,1,2,3,4,5,6,7,
Я просто уже привык так... и места занимает в ячейке меньше...
Возможно это?
sew960i вне форума Ответить с цитированием
Старый 31.01.2010, 13:43   #16
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

А что, размеры встречаются только такие?
Цитата:
38,39,40,41,42,43,44,45,46,47
Не попадаются размеры меньше 38 и больше 47?
Если попадаются, то как они будут записываться?
EducatedFool вне форума Ответить с цитированием
Старый 31.01.2010, 13:52   #17
sew960i
Пользователь
 
Регистрация: 24.01.2010
Сообщений: 34
По умолчанию

нет... меньше 38 и больше 47 не попадаются...
только 38,39,40,41,42,43,44,45,46,47
sew960i вне форума Ответить с цитированием
Старый 31.01.2010, 14:00   #18
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Тогда так:

Код:
Function Остаток(ByRef ra As Range) As String
    Dim cell As Range, n As String, txt As String
    For Each cell In ra.Cells: txt = txt & cell.Text & ",": Next cell
    arr = Split(Replace(Replace(txt, ",,", ","), " ", ""), ",")
    For i = LBound(arr) To UBound(arr)
        If Len(arr(i)) Then
            n = Replace("-" & arr(i), "--", "")
            For j = i + 1 To UBound(arr)
                If arr(j) = n Then arr(i) = "": arr(j) = "": Exit For
            Next j
        End If
    Next i
    For i = LBound(arr) To UBound(arr)
        If IsNumeric(arr(i)) Then
            arr(i) = IIf(Val(Right(arr(i), 1)) > 7, "3", "4") & arr(i)
        End If
    Next i
    MyQuickSort arr
    For i = LBound(arr) To UBound(arr)
        If IsNumeric(arr(i)) Then arr(i) = arr(i) Mod 10
    Next i
    Остаток = Replace(Application.Trim(Replace(Join(arr, ","), ",", " ")) & " ", " ", ",")
End Function


Sub MyQuickSort(arr, Optional First As Long = -1, Optional Last As Long = -1)
    On Error Resume Next    ' Быстрая сортировка, [Q]uick [S]ort
    Dim i As Long, j As Long, MidEl As Variant, t As Variant
    First = IIf(First = -1, LBound(arr), First)
    Last = IIf(Last = -1, UBound(arr), Last)
    i = First: j = Last: MidEl = arr((First + Last) \ 2)
    Do While i <= j
        If arr(i) < MidEl Then
            i = i + 1
        Else
            If arr(j) > MidEl Then
                j = j - 1
            Else
                t = arr(i): arr(i) = arr(j): arr(j) = t: i = i + 1: j = j - 1
            End If
        End If
    Loop
    If First < j Then Call MyQuickSort(arr, First, j)
    If i < Last Then Call MyQuickSort(arr, i, Last)
End Sub
Пример файла:



PS: Все остальные доработки (если понадобятся) - за дополнительную плату.
EducatedFool вне форума Ответить с цитированием
Старый 31.01.2010, 14:04   #19
sew960i
Пользователь
 
Регистрация: 24.01.2010
Сообщений: 34
Радость Спасибо!

Спасибо!!! Все работает!!!
sew960i вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запрос в БД и вывод результата Nice42ru Помощь студентам 10 05.11.2009 09:47
Поиск и вывод результата на другой лист!!! Ilnour1986 Microsoft Office Excel 12 23.10.2009 11:38
Вывод результата в программу блокнот Печальный цыган Помощь студентам 2 15.06.2009 17:08
Операции со строками, вывод результата в 10 и 16 сис-ме счисления Sirega Паскаль, Turbo Pascal, PascalABC.NET 0 24.12.2008 16:36
Вывод результата по столбцам Mary_star SQL, базы данных 4 03.03.2008 13:15