Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
0 / 0 / 0
Регистрация: 01.12.2012
Сообщений: 13

Сортировка по количеству символов в столбцах

13.05.2013, 20:03. Показов 2951. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
всем привет! помогите пожалуйста доделать задание

В первых 10 столбцах рабочего листа находятся сведения о сотрудниках фирмы. Причем в первых трех столбцах рабочего листа записаны: фамилия, имя и отчество. Необходимо написать программу, считывающую эти данные и сортирующую этот список по возрастанию количества букв, содержащихся в первых трех столбцах. Имена полей и их содержимое придумать самостоятельно. Результаты работы программы вывести на другой рабочий лист.

у меня получилась сортировка только по кол-ву букв в отчестве, т.к. оно идет последним (строка 27). можно ли в этом коде как-то сделать, чтобы одновременно по фамилии, имени и отчеству сортировало? извините, что уже 3-я подобная тема за сегодня, у нас просто всю группу озадачили с этой сортировкой...

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
Type Spisok
LastName As String
FirstName As String
PapaName As String
End Type
 
Sub Laba6()
Dim sp() As Spisok, i As Integer, j As Integer, n As Integer
Sheets("Лист2").Select
Range("A1:D12").Clear
Sheets("Лист1").Select
 
While Cells(n + 1, 1) <> ""
n = n + 1
Wend
n = n - 1
ReDim sp(n)
 
For i = 1 To n 
sp(i).LastName = Cells(i + 1, 1)
sp(i).FirstName = Cells(i + 1, 2)
sp(i).PapaName = Cells(i + 1, 3)
Next i
 
sp = sortByLastName(sp, n, True)
sp = sortByFirstName(sp, n, True)
sp = sortByPapaName(sp, n, True)
 
j = 2
For i = 1 To n
Sheets("Лист2").Select
Cells(j, 1) = sp(i).LastName
Cells(j, 2) = sp(i).FirstName
Cells(j, 3) = sp(i).PapaName
j = j + 1
Next i
 
End Sub
 
Private Function sortByLastName(massive() As Spisok, massiveSize As Integer, key As Boolean) As Spisok()
' key = true - по возрастанию
' key = false - по убыванию
    Dim sI As Integer, sJ As Integer, buf As Spisok
    
    For sI = 1 To massiveSize - 1
        For sJ = 1 To massiveSize - sI
            If (key) Then
                If (Len(massive(sJ).LastName) > Len(massive(sJ + 1).LastName)) Then
                    buf = massive(sJ)
                    massive(sJ) = massive(sJ + 1)
                    massive(sJ + 1) = buf
                End If
            
            End If
        Next sJ
    Next sI
    
    sortByLastName = massive
End Function
 
Private Function sortByFirstName(massive() As Spisok, massiveSize As Integer, key As Boolean) As Spisok()
 
    Dim sI As Integer, sJ As Integer, buf As Spisok
    
    For sI = 1 To massiveSize - 1
        For sJ = 1 To massiveSize - sI
            If (key) Then
                If (Len(massive(sJ).FirstName) > Len(massive(sJ + 1).FirstName)) Then
                    buf = massive(sJ)
                    massive(sJ) = massive(sJ + 1)
                    massive(sJ + 1) = buf
                End If
           
            End If
        Next sJ
    Next sI
    
    sortByFirstName = massive
End Function
 
Private Function sortByPapaName(massive() As Spisok, massiveSize As Integer, key As Boolean) As Spisok()
 
    Dim sI As Integer, sJ As Integer, buf As Spisok
    
    For sI = 1 To massiveSize - 1
        For sJ = 1 To massiveSize - sI
            If (key) Then
                If (Len(massive(sJ).PapaName) > Len(massive(sJ + 1).PapaName)) Then
                    buf = massive(sJ)
                    massive(sJ) = massive(sJ + 1)
                    massive(sJ + 1) = buf
                End If
          
            End If
        Next sJ
    Next sI
    
    sortByPapaName = massive
End Function
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.05.2013, 20:03
Ответы с готовыми решениями:

Сортировка строк по количеству символов
Доброго времени суток. Как отсортировать массив строк по количеству символов? В массиве несколько строк и при использовании Array.Sort()...

Сортировка по количеству символов в стобце
Сортировка или фильтрация Возможно ли в Excel 2003 отобразить в строке только значения, в которых количество символов больше, к...

Сортировка строк по количеству символов в строке
Привет, помогите скриптом может у кого есть! нужно выполнить такое есть текстовик (text.txt) в нем текст вида ________________ ...

1
999 / 358 / 135
Регистрация: 27.10.2006
Сообщений: 764
13.05.2013, 22:43
Если с практической точки смотреть на задачу, то я бы её решил бы так

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
Sub Laba6()
    Dim i As Long, iLastRow As Long, Arr() As Variant
 
    Application.ScreenUpdating = False
    Sheets("Лист2").Range("A1:D12").Clear
    
    With Sheets("Лист1")
        .Select
        iLastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
        Arr() = .Range("A1").CurrentRegion.Value
        
        ReDim Preserve Arr(1 To UBound(Arr, 1), 1 To UBound(Arr, 2) + 1)
        
        For i = LBound(Arr, 2) To UBound(Arr, 2)
            Arr(i, UBound(Arr, 2)) = Len(Arr(i, 1)) + Len(Arr(i, 2)) + Len(Arr(i, 2))
        Next i
        Arr() = CoolSort(Arr(), UBound(Arr, 2))
    End With
    
    With Sheets("Лист2")
        .Select
        .Range("A1").Resize(UBound(Arr, 1), UBound(Arr, 2) - 1).Value = Arr()
    End With
    
End Sub
 
Function CoolSort(SourceArr As Variant, ByVal N As Integer) As Variant
' сортировка двумерного массива по столбцу N
' автор: [url]http://excelvba.ru/code/SortArray[/url]
 
   If N > UBound(SourceArr, 2) Or N < LBound(SourceArr, 2) Then _
       MsgBox "Нет такого столбца в массиве!", vbCritical: Exit Function
    Dim Check As Boolean, iCount As Integer, jCount As Integer
    ReDim tmpArr(UBound(SourceArr, 2)) As Variant
    Do Until Check
        Check = True
        For iCount = LBound(SourceArr, 1) To UBound(SourceArr, 1) - 1
            If Val(SourceArr(iCount, N)) > Val(SourceArr(iCount + 1, N)) Then
                For jCount = LBound(SourceArr, 2) To UBound(SourceArr, 2)
                    tmpArr(jCount) = SourceArr(iCount, jCount)
                    SourceArr(iCount, jCount) = SourceArr(iCount + 1, jCount)
                    SourceArr(iCount + 1, jCount) = tmpArr(jCount)
                    Check = False
                Next
            End If
        Next
    Loop
    CoolSort = SourceArr
End Function
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.05.2013, 22:43
Помогаю со студенческими работами здесь

Сортировка по количеству
Есть функция: function WGetUsers() { $query = &quot;SELECT * FROM `pack` WHERE `users` &lt;&gt; '1'&quot;; $res = mysql_query($query); ...

Сортировка по количеству строк
$sql = 'SELECT * FROM users WHERE reftop &gt;= 0 ORDER BY reftop DESC'; $rs = mysql_query($sql); $anum1 = mysql_num_rows($rs); $i =...

Разбить строку по количеству символов
Уважаемое сообщество! Пишу скрипт для обработки текста. Есть строки равной длины, например, по 100 символов. Мне нужно разбить каждую...

Event по количеству ввода символов
Нужно разблокировать кнопку при вводе как минимум 5 символов input-а.

Деление строки по количеству символов
Как можно без накручивания циклов сделать следующее? Есть длинная строка, символов на 100+. Состоит из слов с пробелами (например, пара...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru