С Новым годом! Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
0 / 0 / 1
Регистрация: 18.12.2016
Сообщений: 75
1

Сортировка по столбцам таблицы (MS Excel)

05.10.2017, 20:36. Показов 1835. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Отсортировать в каждом столбце диапазона ячейки с числовыми данными. Ячейки с нечисловыми данными и пустые не должны перемещаться. Реализовать в отдельном методе запись формул рабочего листа для определения сумм элементов строк, значения которых меньше нуля.
Когда я нажимаю на кнопку "Решение", у меня ничего не происходит! Помогите мне.
Сортировка по столбцам таблицы (MS Excel)

VB.NET
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
Public Class ЛистДиапазон
    Private Sub btn_reshenie_Click(sender As System.Object, e As System.EventArgs) Handles btn_reshenie.Click
        Dim Диапазон As КлассДиапазон = New КлассДиапазон(Me.Range("diapozonrange"),
                                                          Me.Range("sumelstr"))
        Диапазон.Обработать()
    End Sub
End Class
Class КлассДиапазон
    'Свойство содержащее ссылку на диапазон
    Private diapozonrange As Excel.Range
    Private sumelstr As Excel.Range
    'Конструктор класса (создает экземпляр класса)
    Sub New(diapozonrange As Excel.Range, sumelstr As Excel.Range)
        'Инициализация свойства класса
        Me.diapozonrange = diapozonrange
        Me.sumelstr = sumelstr
    End Sub
 
    'Метод для сортировки ячеек в каждом столбце с числовыми данными и записи формул рабочего листа для определения сумм элементов строк, значения которых меньше нуля.
    Sub Обработать()
        Try
            Dim i, j As Long
            Dim Ячейка As Excel.Range
            For Each Ячейка In diapozonrange.Cells
                If IsNumeric(Ячейка) And IsNothing(Ячейка) Then
                    For j = 1 To diapozonrange.Columns.Count
                        For i = 1 To diapozonrange.Rows.Count
                            diapozonrange.Sort(Key1:=diapozonrange.Cells(i, j).Value, Order1:=Excel.XlSortOrder.xlAscending, Orientation:=Excel.XlSortOrientation.xlSortColumns)
                        Next i
                    Next j
                End If
            Next Ячейка
 
            For i = 1 To diapozonrange.Rows.Count
                If i < 0 Then
                    sumelstr.Cells(i).formula = "SUM(" & diapozonrange.Rows(i).address(False, False) & ")"
                End If
            Next
 
        Catch ex As Exception
            MessageBox.Show(text:=ex.Message,
                            buttons:=MessageBoxButtons.OK,
                           caption:="Ошибка данных",
                           icon:=MessageBoxIcon.Error)
        End Try
    End Sub
End Class
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.10.2017, 20:36
Ответы с готовыми решениями:

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

Сортировка таблицы по нескольким столбцам
Добрый день! Появилась необходимость рассортировать рабочую таблицу: поскольку объем данных...

Сортировка строк таблицы по нескольким столбцам
Доброго времени суток. Имеется код сортировки по одному столбцу. Sheets(&quot;Общие списки&quot;).Copy...

Сортировка таблицы по нескольким столбцам в датагрид
Доброго времени суток! Я загружаю экселевский файл в датагрид private void button1_Click(object...

3
0 / 0 / 1
Регистрация: 18.12.2016
Сообщений: 75
20.10.2017, 17:16  [ТС] 2
Немного изменила код. Проблема остается. Прикрепляю к сообщению архив с программой. Кто-нибудь, помогите мне, пожалуйста, я уже который день не знаю что делать с этой программой
VB.NET
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
Public Class ЛистДиапазон
    Private Sub btn_reshenie_Click(sender As System.Object, e As System.EventArgs) Handles btn_reshenie.Click
        Dim Диапазон As КлассДиапазон = New КлассДиапазон(Me.Range("diapozonrange"),
                                                          Me.Range("sumelstr"))
        Диапазон.Обработать()
    End Sub
End Class
Class КлассДиапазон
    'Свойство содержащее ссылку на диапазон
    Private diapozonrange As Excel.Range
    Private sumelstr As Excel.Range
    'Конструктор класса (создает экземпляр класса)
    Sub New(diapozonrange As Excel.Range, sumelstr As Excel.Range)
        'Инициализация свойства класса
        Me.diapozonrange = diapozonrange
        Me.sumelstr = sumelstr
    End Sub
 
    'Метод для сортировки ячеек в каждом столбце с числовыми данными и записи формул рабочего листа для определения сумм элементов строк, значения которых меньше нуля.
    Sub Обработать()
        Try
            Dim i, j As Long
            Dim temp As Long
            For j = 1 To diapozonrange.Columns.Count
                For i = 1 To diapozonrange.Rows.Count - 1
                    If IsNumeric(diapozonrange.Cells(i, j)) Then
                        If IsNothing(diapozonrange.Cells(i, j)) Then
                            If (diapozonrange.Cells(i, j) > diapozonrange.Cells(i, j + 1)) Then
                                temp = diapozonrange(i, j)
                                diapozonrange(i, j) = diapozonrange(i, j + 1)
                                diapozonrange(i, j + 1) = temp
                            End If
                        End If
                    End If
                Next i
            Next j
 
            For i = 1 To diapozonrange.Rows.Count
                If i < 0 Then
                    sumelstr.Cells(i).formula = "SUM(" & diapozonrange.Rows(i).address(False, False) & ")"
                End If
            Next i
 
        Catch ex As Exception
            MessageBox.Show(text:=ex.Message,
                            buttons:=MessageBoxButtons.OK,
                           caption:="Ошибка данных",
                           icon:=MessageBoxIcon.Error)
        End Try
    End Sub
End Class
Вложения
Тип файла: rar Практическая №4.rar (211.3 Кб, 3 просмотров)
0
0 / 0 / 1
Регистрация: 18.12.2016
Сообщений: 75
20.10.2017, 20:54  [ТС] 3
VB.NET
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
Public Class ЛистДиапазон
    Private Sub btn_reshenie_Click(sender As System.Object, e As System.EventArgs) Handles btn_reshenie.Click
        Dim Диапазон As КлассДиапазон = New КлассДиапазон(Me.Range("diapozonrange"),
                                                          Me.Range("sumelstr"))
        Диапазон.Обработать()
    End Sub
End Class
Class КлассДиапазон
    'Свойство содержащее ссылку на диапазон
    Private diapozonrange As Excel.Range
    Private sumelstr As Excel.Range
    'Конструктор класса (создает экземпляр класса)
    Sub New(diapozonrange As Excel.Range, sumelstr As Excel.Range)
        'Инициализация свойства класса
        Me.diapozonrange = diapozonrange
        Me.sumelstr = sumelstr
    End Sub
 
    'Метод для сортировки ячеек в каждом столбце с числовыми данными и записи формул рабочего листа для определения сумм элементов строк, значения которых меньше нуля.
    Sub Обработать()
        Try
            Dim i, j As Long
            Dim temp As Long
            For j = 1 To diapozonrange.Columns.Count - 1
                For i = 1 To diapozonrange.Rows.Count
                    If Not IsNothing(diapozonrange.Cells(i, j).Value) Then
                        If IsNumeric(diapozonrange.Cells(i, j).Value) Then
                            If (diapozonrange.Cells(i, j).Value > diapozonrange.Cells(i, j + 1).Value) Then
                                temp = diapozonrange.Cells(i, j).Value
                                diapozonrange.Cells(i, j).Value = diapozonrange.Cells(i, j + 1).Value
                                diapozonrange.Cells(i, j + 1).Value = temp
                            End If
                        End If
                    End If
                Next i
            Next j
 
            For i = 1 To diapozonrange.Rows.Count
                If i < 0 Then
                    sumelstr.Cells(i).Value.Formula = "=SUM(" & diapozonrange.Rows(i).Value.Address(False, False) & ")"
                End If
            Next i
 
        Catch ex As Exception
            MessageBox.Show(text:=ex.Message,
                            buttons:=MessageBoxButtons.OK,
                           caption:="Ошибка данных",
                           icon:=MessageBoxIcon.Error)
        End Try
    End Sub
End Class
Подкорректировала код, теперь у меня следующая беда.
Строка
VB.NET
1
sumelstr.Cells(i).formula = "=SUM(" & diapozonrange.Rows(i).address(False, False) & ")"
не считает сумму элементов строк, значения которых меньше 0.
Сортировка по столбцам таблицы (MS Excel)
0
es geht mir gut
11272 / 4756 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
20.10.2017, 22:24 4
Лучший ответ Сообщение было отмечено nightofpromises как решение

Решение

Цитата Сообщение от nightofpromises Посмотреть сообщение
For i = 1 To diapozonrange.Rows.Count
If i < 0 Then
Как i может быть меньше 0, если цикл начинается с 1 ?
Да и вообще, i - это номера строк, а не значения, зачем их сравнивать с нолём ?

Добавлено через 13 минут
И формулу нужно использовать SUMIF (СУММЕСЛИ), с условием "<0"

Добавлено через 6 минут
Короче, должно быть, наверное, как-то так
VB.NET
1
2
3
 For i = 1 To diapozonrange.Rows.Count
                  sumelstr.Cells(i).Value.Formula = "=SUMIF(" & diapozonrange.Rows(i).Value.Address(False, False) & ",""<0"")"  
    Next i
P.S. Писано на коленке, проверить не могу.
1
20.10.2017, 22:24
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.10.2017, 22:24
Помогаю со студенческими работами здесь

Вывод таблицы в Excel. Как задать стили ячейкам и столбцам?
Делаю вывод таблц в Excel Может кто подскажет, как поменять формат ячейки и размер

Сортировка таблицы Excel
Добрый вечер! Подскажите незнающему. Имеется таблица с результатами соревнований(Сводный...

Сортировка таблицы в Excel
Здравствуйте, уважаемые форумчане, обыскав на просторах интернета не нашел решения для своей...

Сортировка внутри сводной таблицы Excel
Доброго времени суток! Прошу помощи настроить сортировку внутри сводной таблицы. Перепробовал...

Считывание и сортировка таблицы Excel из .txt файла
Нужно написать программу, которая будет считывать таблицу из Excel таблицы, сохранённой в txt...

Сортировка по столбцам
Здравствуйте, помогите пожалуйста сделать сортировку по алфавиту и по возрастанию. С помощью...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
Что такое NullReferenceEx­­­ception и как исправить?
InfoMaster 08.01.2025
NullReferenceException - одно из самых распространенных исключений, с которым сталкиваются разработчики на C#. Это исключение возникает при попытке обратиться к членам объекта (методам, свойствам или. . .
Что такое Null Pointer Exception (NPE) и как это исправить?
InfoMaster 08.01.2025
Null Pointer Exception (NPE) - это одно из самых распространенных исключений в Java, которое возникает при попытке использовать ссылку на объект, значение которой равно null. Это исключение относится. . .
Русский язык в консоли C++
InfoMaster 08.01.2025
При разработке программ на C++ одной из частых проблем, с которой сталкиваются русскоязычные программисты, является корректное отображение кириллицы в консольных приложениях. Эта проблема особенно. . .
Telegram бот на C#
InfoMaster 08.01.2025
Разработка ботов для Telegram стала неотъемлемой частью современной экосистемы мессенджеров. C# предоставляет мощный и удобный инструментарий для создания разнообразных ботов, от простых. . .
Использование GraphQL в Go (Golang)
InfoMaster 08.01.2025
Go (Golang) является одним из наиболее популярных языков программирования, используемых для создания высокопроизводительных серверных приложений. Его архитектурные особенности и встроенные. . .
Что лучше использовать при создании класса в Java: сеттеры или конструктор?
Alexander-7 08.01.2025
Вопрос подробнее: На вопрос: «Когда одновременно создаются конструктор и сеттеры в классе – это нормально?» куратор уточнил: «Ваш класс может вообще не иметь сеттеров, а только конструктор и геттеры. . .
Как работать с GraphQL на TypeScript
InfoMaster 08.01.2025
Введение в GraphQL и TypeScript В современной разработке веб-приложений GraphQL стал мощным инструментом для создания гибких и эффективных API. В сочетании с TypeScript, эта технология. . .
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru