Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
0 / 0 / 0
Регистрация: 26.05.2020
Сообщений: 47
Excel

Ускорение расчета больших диапазонов ячеек

24.09.2024, 15:20. Показов 4682. Ответов 66
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!
Прошу помощи у знатоков VBA. В файле два макроса - с замером скорости подсчета по диапазонам ячеек. (Диапазон вывода - вертикальные диапазоны каждого столбца в общем диапазоне BP110:COO176; Диапазон данных BP800: COO2900). Проблема в том что Конечная Строка может быть не 2900, а 40000. Удалить промежуточные строки нет возможности.
Есть ли рабочий способ увеличить скорость расчета с выводом данных в ячейки используя VBA? Буду рад совету или предложенному способу.
Вложения
Тип файла: zip Insert_Val.zip (2.25 Мб, 24 просмотров)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.09.2024, 15:20
Ответы с готовыми решениями:

Сравнение диапазонов ячеек
Здравствуйте! Простая задача сравнить два диапазона ячеек(A1:A3 и C1:C5), если в одном диапазоне есть значения, которых нет в другом...

Осуществить копирование диапазонов ячеек
Здравствуйте!) У меня есть макрос, который копирует определенный диапазоны ячеек. Но при запуске макроса у меня вылезает отчет Майкрософта...

Заполнение диапазонов ячеек MS Excel
1. Создать макрос для рабочей книги MS Excel, позволяющий формировать значения в диапазонах ячеек в соответствии с предложенными ниже...

66
0 / 0 / 0
Регистрация: 26.05.2020
Сообщений: 47
25.09.2024, 12:58  [ТС]
Студворк — интернет-сервис помощи студентам
Вот Обрезанный файл. 2400 столбцов х 11500 строк. Полный почему-то не захотел загрузиться
Задача изложена в файле. Соб-сно 3 задачи. Если есть возможность - посмотрите. Спасибо
Вложения
Тип файла: zip Insert_Val.zip (4.09 Мб, 21 просмотров)
0
0 / 0 / 0
Регистрация: 26.05.2020
Сообщений: 47
25.09.2024, 13:01  [ТС]
Смотрю. Очень сложно!))
Это был Ответ HUGO на решение с коллекцией для 3 аргументов. Не вижу кому улетает(
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
25.09.2024, 13:17
Странно - у меня 14 секунд макрос в этом файле работает. Примерно половина времени уходит на Range("BP3:COO164").Calculate:

Добавлено через 2 минуты
Цитата Сообщение от isss333 Посмотреть сообщение
Смотрю. Очень сложно!))
- так это тот код что и был, я только добавил одну переменную, и словарь.
Делать сейчас вариант для последнего файла некогда, но в принципе в коде выше всё есть, нужно только его взять и продублировать 3 раза для диапазонов, или цикл заполнения словаря разбить на 3 части, наверное взлетит.
0
0 / 0 / 0
Регистрация: 26.05.2020
Сообщений: 47
25.09.2024, 13:21  [ТС]
макрос из вложения? действительно странно. На 2-х компах (Win7 Excel-10; Win10 Excel-16) -без особой разницы в скорости. Для 40000 строк вообще кровь из глаз (5-6 мин)

Добавлено через 2 минуты
Hugo121, Коллекции - неизведанный мрак!. Пока, во всяком случае))
0
Часто онлайн
 Аватар для КостяФедореев
987 / 637 / 280
Регистрация: 09.01.2017
Сообщений: 2,080
25.09.2024, 13:24
isss333, а значения для суммирования в столбцах А В С до 800 строки откуда берутся?

Добавлено через 17 секунд
Вы их сами как то генерите?

Добавлено через 1 минуту
просто можно пройтись от 800 строки и ниже и отобрать уникальные по тем критериям
0
0 / 0 / 0
Регистрация: 26.05.2020
Сообщений: 47
25.09.2024, 13:25  [ТС]
Задача сразу приходит с установкой что нужно выдать в ответ
А в файлах - взято из головы
0
Часто онлайн
 Аватар для КостяФедореев
987 / 637 / 280
Регистрация: 09.01.2017
Сообщений: 2,080
25.09.2024, 13:27
Просто не понятно по каким критериям делить эти диапазоны А, А+В, А+В+С
Задавать руками в массив? Такое себе...
0
0 / 0 / 0
Регистрация: 26.05.2020
Сообщений: 47
25.09.2024, 13:30  [ТС]
В последнем вложении в столбце А:А последовательно отражены 3 списка (по цвету сверху вниз)
Первый - уникальные из списка (для одного критерия)
Второй - для двух (А-В)
Третий - небольшой всегда - для трех условий
0
Часто онлайн
 Аватар для КостяФедореев
987 / 637 / 280
Регистрация: 09.01.2017
Сообщений: 2,080
25.09.2024, 13:35
isss333,
GH_M_dlv_dep | C | m
GH_V_dlv_dep | C | m
GH_M_dlv_PRB| C | m
это в уникальных, а есть еще в основной таблице ниже

GH_M_dlv_dep | C | v
GH_V_dlv_dep | C | v
GH_M_dlv_PRB| C | v

не все уникальные отбираются?
0
0 / 0 / 0
Регистрация: 26.05.2020
Сообщений: 47
25.09.2024, 13:45  [ТС]
Первый список -должны быть только уникальные. Жто я ркками что-то пропустил

Добавлено через 6 минут
КостяФедореев, Забыл Вас поблагодарить. Примите пожелания в добром здравии, успехов и удачи в делах! Отдельное спасибо за комментарии в коде!!!
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
25.09.2024, 15:05
Лучший ответ Сообщение было отмечено isss333 как решение

Решение

isss333, вот на словаре для последнего файла, привязка к конкретным строкам

Кликните здесь для просмотра всего текста

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
Option Explicit
 
Sub PULL_RANGE_CALCULATE4()
 Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Dim StartTimer, EndTimer
    Dim lLastRow, lLastCol
    Dim arr, arr3, arr2, el, i, j, t$
 
    StartTimer = Timer 'Now()
 
    lLastRow = 11500 'Cells(29000, 1).Row
    lLastCol = 2433 'Cells(5, 2400).Column
    'lLastRow = Cells(Rows.count, 1).End(xlUp).Row
    'lLastCol = Cells(109, Columns.count).End(xlToLeft).Column
 
    arr = Range(Cells(800, 68), Cells(lLastRow, lLastCol)) 'данные для суммирования от столбца BP
    arr3 = Range(Cells(800, 1), Cells(lLastRow, 3)) 'критерии у сумм
    arr2 = Range(Cells(3, 1), Cells(596, 3)) 'данные критериев
 
    ReDim arr4(1 To UBound(arr2, 1), 1 To UBound(arr, 2)) 'результат
 
 With CreateObject("Scripting.Dictionary")
 .comparemode = 1
'запоминаем номера строк всех критериев (дублей обещали что нет!)
    For i = 1 To 162
    t = arr2(i, 1)
    .Item(t) = i
    Next
    For i = 164 To 498
    t = arr2(i, 1) & "|" & arr2(i, 2)
    .Item(t) = i
    Next
    For i = 500 To UBound(arr2, 1)
    t = arr2(i, 1) & "|" & arr2(i, 2) & "|" & arr2(i, 3)
    .Item(t) = i
    Next
    
    'суммирование
        For i = 1 To UBound(arr3, 1)
        t = arr3(i, 1)
            If .exists(t) Then
            el = .Item(t)
                For j = 1 To UBound(arr, 2)
                    If CDbl(arr(i, j)) <> Empty Then
                        arr4(el, j) = CDbl(arr4(el, j)) + CDbl(arr(i, j))
                    End If
                Next
            End If
            
            t = arr3(i, 1) & "|" & arr3(i, 2)
            If .exists(t) Then
            el = .Item(t)
                For j = 1 To UBound(arr, 2)
                    If CDbl(arr(i, j)) <> Empty Then
                        arr4(el, j) = CDbl(arr4(el, j)) + CDbl(arr(i, j))
                    End If
                Next
            End If
            
            t = arr3(i, 1) & "|" & arr3(i, 2) & "|" & arr3(i, 3)
            If .exists(t) Then
            el = .Item(t)
                For j = 1 To UBound(arr, 2)
                    If CDbl(arr(i, j)) <> Empty Then
                        arr4(el, j) = CDbl(arr4(el, j)) + CDbl(arr(i, j))
                    End If
                Next
            End If
Next
 
End With
 
Range("BP3").Resize(UBound(arr4, 1), UBound(arr4, 2)) = arr4
 
EndTimer = Timer 'Now()
MsgBox "Time: " & Round(EndTimer - StartTimer, 3) & " s"
'Format(EndTimer - StartTimer, "h:mm:ss")
 
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub


Добавлено через 1 минуту
Не пойму что с спойлерами, глючат...

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
Option Explicit
 
Sub PULL_RANGE_CALCULATE4()
 Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Dim StartTimer, EndTimer
    Dim lLastRow, lLastCol
    Dim arr, arr3, arr2, el, i, j, t$
 
    StartTimer = Timer 'Now()
 
    lLastRow = 11500 'Cells(29000, 1).Row
    lLastCol = 2433 'Cells(5, 2400).Column
    'lLastRow = Cells(Rows.count, 1).End(xlUp).Row
    'lLastCol = Cells(109, Columns.count).End(xlToLeft).Column
 
    arr = Range(Cells(800, 68), Cells(lLastRow, lLastCol)) 'данные для суммирования от столбца BP
    arr3 = Range(Cells(800, 1), Cells(lLastRow, 3)) 'критерии у сумм
    arr2 = Range(Cells(3, 1), Cells(596, 3)) 'данные критериев
 
    ReDim arr4(1 To UBound(arr2, 1), 1 To UBound(arr, 2)) 'результат
 
 With CreateObject("Scripting.Dictionary")
 .comparemode = 1
'запоминаем номера строк всех критериев (дублей обещали что нет!)
    For i = 1 To 162
    t = arr2(i, 1)
    .Item(t) = i
    Next
    For i = 164 To 498
    t = arr2(i, 1) & "|" & arr2(i, 2)
    .Item(t) = i
    Next
    For i = 500 To UBound(arr2, 1)
    t = arr2(i, 1) & "|" & arr2(i, 2) & "|" & arr2(i, 3)
    .Item(t) = i
    Next
    
    'суммирование
        For i = 1 To UBound(arr3, 1)
        t = arr3(i, 1)
            If .exists(t) Then
            el = .Item(t)
                For j = 1 To UBound(arr, 2)
                    If CDbl(arr(i, j)) <> Empty Then
                        arr4(el, j) = CDbl(arr4(el, j)) + CDbl(arr(i, j))
                    End If
                Next
            End If
            
            t = arr3(i, 1) & "|" & arr3(i, 2)
            If .exists(t) Then
            el = .Item(t)
                For j = 1 To UBound(arr, 2)
                    If CDbl(arr(i, j)) <> Empty Then
                        arr4(el, j) = CDbl(arr4(el, j)) + CDbl(arr(i, j))
                    End If
                Next
            End If
            
            t = arr3(i, 1) & "|" & arr3(i, 2) & "|" & arr3(i, 3)
            If .exists(t) Then
            el = .Item(t)
                For j = 1 To UBound(arr, 2)
                    If CDbl(arr(i, j)) <> Empty Then
                        arr4(el, j) = CDbl(arr4(el, j)) + CDbl(arr(i, j))
                    End If
                Next
            End If
Next
 
End With
 
Range("BP3").Resize(UBound(arr4, 1), UBound(arr4, 2)) = arr4
 
EndTimer = Timer 'Now()
MsgBox "Time: " & Round(EndTimer - StartTimer, 3) & " s"
'Format(EndTimer - StartTimer, "h:mm:ss")
 
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub
Добавлено через 5 минут
У меня отрабатывает за 7-8 секунд
1
0 / 0 / 0
Регистрация: 26.05.2020
Сообщений: 47
25.09.2024, 15:08  [ТС]
Ух! Сколько работы для глаз и мозга!))
Обязательно протестирую на большом диапазоне, - обязательно отпишусь
Большое Спасибо

п.с. Все-таки способы решения реальной задачи (практических задач! - не из учебника) - большое подспорье в деле обучения))
Это как первая реальная ездка на лисапеде - мастер рядом, но разбив коленки запомнишь как рулить!)))
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
25.09.2024, 15:13
Вообще учиться конечно лучше на уменьшенной копии этого файла - например на сотне строк, по 10 на каждый блок, и остаток для суммируемых данных.
А то тут ничего не разглядеть на листе, не домотать ((
0
0 / 0 / 0
Регистрация: 26.05.2020
Сообщений: 47
25.09.2024, 15:28  [ТС]
В целом согласен. Это я Вас нагрузил, бесспорно. (Ну как просили))
Наверное многое зависит от опыта и навыков. Я вот поначалу думал, забросить тему на форум? - кто там будет разбираться??
А оказалось твои потуги - слезы умельцев при ветре в лицо))

И еще, Предложенные Вами сложные решения опираются на зримые диапазоны (слева-сверху-вниз), ну ктож мог предположить что достаточно будет сотни строк в заголовке задачи... Не зная способов не сможешь и объяснить...
Благодарю!
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
25.09.2024, 15:37
Ну масштабировать когда понимаешь механику всегда можно, тут же всё по клеточкам ))
0
Часто онлайн
 Аватар для КостяФедореев
987 / 637 / 280
Регистрация: 09.01.2017
Сообщений: 2,080
26.09.2024, 08:41
Лучший ответ Сообщение было отмечено isss333 как решение

Решение

isss333, Сделал со сбором уникальных показателей из основного массива на отдельный лист
перед запуском нужно создать лист с именем "итог"

кода получилось немного больше ))
но работает 7-8 сек
Кликните здесь для просмотра всего текста

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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
Option Explicit ' Обязывает объявлять все переменные
 
Sub PULL_RANGE_CALCULATE111()
    Application.ScreenUpdating = False ' Отключает обновление экрана для ускорения выполнения
    Application.Calculation = xlCalculationManual ' Отключает автоматические пересчеты формул
 
    Dim StartTimer  As Double ' Переменная для хранения времени начала выполнения
    Dim EndTimer    As Double ' Переменная для хранения времени окончания выполнения
 
    ' Создание объектов словарей
    Dim dict1 As Object, dict2 As Object, dict3 As Object
    Dim lLastRow    As Long ' Переменная для хранения последней строки с данными
    Dim lLastCol    As Long ' Переменная для хранения последнего столбца с данными
    Dim s1 As Long, s2 As Long, s3 As Long, i As Long, j As Long ' Переменные для счётчиков
    Dim n1 As Long, n2 As Long, n3 As Long, m1 As Long, m2 As Long, m3 As Long ' Переменные для индексов
    Dim key As String, key1 As String, key2 As String, key3 As String ' Переменные для ключей
    Dim arrAll As Variant, arrAllData As Variant ' Массивы для хранения всех данных
 
    ' Инициализация словарей
    Set dict1 = CreateObject("Scripting.Dictionary")
    Set dict2 = CreateObject("Scripting.Dictionary")
    Set dict3 = CreateObject("Scripting.Dictionary")
 
    Sheets("итог").Cells.ClearContents ' Очищает данные на листе "итог"
    StartTimer = Timer ' Запоминает время начала выполнения
 
    ' Находит последнюю строку и последний столбец на листе "dat"
    lLastRow = Sheets("dat").Cells(Rows.Count, 1).End(xlUp).Row
    lLastCol = Sheets("dat").Cells(2, Columns.Count).End(xlToLeft).Column
 
    ' Считывает диапазоны данных в массивы
    arrAll = Sheets("dat").Range("A800:C" & lLastRow).Value
    arrAllData = Sheets("dat").Range("BP800:BP" & lLastRow).Resize(, lLastCol - 67).Value
 
    s1 = 0: s2 = 0: s3 = 0 ' Инициализация счётчиков для словарей
 
    ' Заполнение первого словаря уникальными значениями из столбца 1
    For i = 1 To UBound(arrAll, 1)
        If Not IsEmpty(arrAll(i, 1)) Then
            If Not dict1.Exists(arrAll(i, 1)) Then
                s1 = s1 + 1
                dict1(arrAll(i, 1)) = s1
            End If
        End If
    Next i
 
    ' Заполнение второго словаря уникальными комбинациями значений из столбцов 1 и 2
    For i = 1 To UBound(arrAll, 1)
        If Not IsEmpty(arrAll(i, 1)) And Not IsEmpty(arrAll(i, 2)) Then
            key = arrAll(i, 1) & "|" & arrAll(i, 2)
            If Not dict2.Exists(key) Then
                s2 = s2 + 1
                dict2(key) = s2
            End If
        End If
    Next i
 
    ' Заполнение третьего словаря уникальными комбинациями значений из столбцов 1, 2 и 3
    For i = 1 To UBound(arrAll, 1)
        If Not IsEmpty(arrAll(i, 1)) And Not IsEmpty(arrAll(i, 2)) And Not IsEmpty(arrAll(i, 3)) Then
            key = arrAll(i, 1) & "|" & arrAll(i, 2) & "|" & arrAll(i, 3)
            If Not dict3.Exists(key) Then
                s3 = s3 + 1
                dict3(key) = s3
            End If
        End If
    Next i
 
    ' Инициализация временных массивов для хранения промежуточных результатов
    ReDim arrTemp1(1 To dict1.Count, 1 To UBound(arrAllData, 2))
    ReDim arrTemp2(1 To dict2.Count, 1 To UBound(arrAllData, 2))
    ReDim arrTemp3(1 To dict3.Count, 1 To UBound(arrAllData, 2))
 
    ' Заполнение временных массивов суммами данных
    For j = 1 To UBound(arrAll, 1)
        key1 = arrAll(j, 1)
        If dict1.Exists(key1) Then
            n1 = dict1(key1)
            For m1 = 1 To UBound(arrTemp1, 2)
                If Not IsEmpty(arrAllData(j, m1)) Then
                    arrTemp1(n1, m1) = CDbl(arrTemp1(n1, m1)) + CDbl(arrAllData(j, m1))
                End If
            Next m1
        End If
 
        key2 = arrAll(j, 1) & "|" & arrAll(j, 2)
        If dict1.Exists(key2) Then
            n2 = dict2(key2)
            For m2 = 1 To UBound(arrTemp2, 2)
                If Not IsEmpty(arrAllData(j, m2)) Then
                    arrTemp2(n2, m2) = CDbl(arrTemp2(n2, m2)) + CDbl(arrAllData(j, m2))
                End If
            Next m2
        End If
 
        key3 = arrAll(j, 1) & "|" & arrAll(j, 2) & "|" & arrAll(j, 3)
        If dict3.Exists(key3) Then
            n3 = dict3(key3)
            For m3 = 1 To UBound(arrTemp3, 2)
                If Not IsEmpty(arrAllData(j, m3)) Then
                    arrTemp3(n3, m3) = CDbl(arrTemp3(n3, m3)) + CDbl(arrAllData(j, m3))
                End If
            Next m3
        End If
    Next
 
    ' Запись данных из словарей на лист "итог"
    Sheets("итог").Range("A3").Resize(dict1.Count) = Application.Transpose(dict1.Keys)
    Sheets("итог").Range("A3").Offset(dict1.Count + 2).Resize(dict2.Count) = Application.Transpose(dict2.Keys)
    Sheets("итог").Range("A3").Offset(dict1.Count + dict2.Count + 4).Resize(dict3.Count) = Application.Transpose(dict3.Keys)
 
    ' Разбивает строки по символу "|" на отдельные столбцы
    Sheets("итог").Columns("A:A").TextToColumns Destination:=Range("A3"), DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
            Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
            :="|", FieldInfo:=Array(1, 1), TrailingMinusNumbers:=True
 
    ' Запись суммированных данных в столбцы на листе "итог"
    Sheets("итог").Range("BP3").Resize(dict1.Count, UBound(arrTemp1, 2)) = arrTemp1
    Sheets("итог").Range("BP3").Offset(dict1.Count + 2).Resize(dict2.Count, UBound(arrTemp2, 2)) = arrTemp2
    Sheets("итог").Range("BP3").Offset(dict1.Count + dict2.Count + 4).Resize(dict3.Count, UBound(arrTemp3, 2)) = arrTemp3
 
    Sheets("итог").Columns("E:XFD").ColumnWidth = 1 ' Устанавливает ширину столбцов
 
    EndTimer = Timer ' Запоминает время окончания выполнения
    MsgBox "Время выполнения: " & Format(EndTimer - StartTimer, "0.00") & " секунд" ' Выводит сообщение с временем выполнения
 
    Application.ScreenUpdating = True ' Включает обновление экрана
    Application.Calculation = xlCalculationAutomatic ' Включает автоматические пересчеты формул
End Sub
1
0 / 0 / 0
Регистрация: 26.05.2020
Сообщений: 47
26.09.2024, 08:55  [ТС]
(!)
Добрый день! Спасибо что не забросили.
У меня с утра - вдруг при объявлении массива (arr), - именно эта строка, -ошибка 7 "OUT of memory"
Использую самый первый SUB (в котором <> Empty)

Добавлено через 11 минут
Может быть данная ошибка связана с наличием пустых строк в массиве выборки?
0
Часто онлайн
 Аватар для КостяФедореев
987 / 637 / 280
Регистрация: 09.01.2017
Сообщений: 2,080
26.09.2024, 09:00
isss333, вы это про какой код?))

Добавлено через 39 секунд
"OUT of memory" это выход за пределы памяти
большой массив с данными?
0
0 / 0 / 0
Регистрация: 26.05.2020
Сообщений: 47
26.09.2024, 09:19  [ТС]
Массив тот же. Обработанный не один раз. Только с пустыми строками. Строка (max) при этом 17500 (из последнего вложения)

Добавлено через 7 минут
Удалил все пустые - расчёт за 2 сек. Проблема...
Пустые строки будут всегда. и сколько их - число вариабельное. Нужно удалять. А это задача сравнимая с тем что мы делаем- занимает время...
0
Часто онлайн
 Аватар для КостяФедореев
987 / 637 / 280
Регистрация: 09.01.2017
Сообщений: 2,080
26.09.2024, 09:23
Цитата Сообщение от isss333 Посмотреть сообщение
Пустые строки будут всегда. и сколько их - число вариабельное
что это за строки? Где они находятся? В уникальном массиве или общем с данными?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.09.2024, 09:23

Объединение диапазонов ячеек с одинаковыми значениями
Добрый день товарищи. прошу помощи с решением следующей задачи: есть колонка с объединенными ячейками и со своими значениями в...

Сравнение двух диапазонов ячеек на совпадение
Здравствуйте! Подскажите пожалуйста... Имеется 2 диапазона ячеек А1:A3 и C1:C3, в которых забиты цифры, допустим в ячейках А1:A3 (3,6,2...

Подсчет повторяющихся ячеек с перебором диапазонов в столбце
Помогите создать макрос VBA. Как посчитать количество ячеек содержащие (между Dom) АБОНЕНТ, ПРОМЕЖ, РАСПРЕД , АШ_x16 в Таблице_1(Лист1) ...

Сравнение двух диапазонов на идентичность без анализа отдельных ячеек
Здравствуйте! Подскажите, как сравнить два диапазона на результат ЛОЖЬ или ИСТИНА (в коде 10-я строка) Нужно это для проверки успешного...

Перемена местами диапазонов ячеек
Всем Привет! Мне очень нужен макрос, который бы менял местами два любых выделенных диапазона ячеек в Excel (в том числе несвязанных...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru