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

Подсчитать количество строк и ввести данные в другие ячейки желательно средствами VBA

13.10.2015, 11:06. Показов 1578. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть файл в котором приходят записи оражевого цвета.
Каждый раз файл приходит с разным количеством строк.

Их необходимо преобразовать в ниже указанный вид с подсчётом моделей. В ручную это занимает слишком много времени и требует внимания.

Буду признателен, если кто-то поможет даже примерными набросками кода


Книга1.xls
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.10.2015, 11:06
Ответы с готовыми решениями:

Как средствами VBA подсчитать количество листов которое будет печататься?
Как средствами VBA подсчитать количество листов которое будет печататься? т.е. на экране отображается допустим 3 листа, это видно, но...

Ввести последовательность строк. Подсчитать количество совпадающих строк.
Доброго времени суток. Помогите пожалуйста с данной задачей. Каким должен быть код? Заранее огромное спасибо

как подсчитать количество строк в запросе средствами php
Как мне узнать количество строк в бд припомощи php. Я знаю что это можно делать при помощи msqli запроса с условием, но мне надо выбрать...

11
Ушел с CyberForum совсем!
874 / 183 / 25
Регистрация: 04.05.2011
Сообщений: 1,020
Записей в блоге: 110
13.10.2015, 11:24
а с фильтрами в экселе не пробовали поиграть ?
0
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
13.10.2015, 11:35
Mighty, какой смысл несут слова "записи оранжевого цвета"? В файле могут быть записи другого цвета или бесцветные?
Или все записи на самом деле бесцветные, а цветом Вы выделили исходные данные?
0
0 / 0 / 0
Регистрация: 30.06.2015
Сообщений: 13
13.10.2015, 11:50  [ТС]
Прошу прощения, забыл указать, что выделил цветом как акцент, для отделения данных

Добавлено через 1 минуту
С фильтрами мог бы поиграться, но тут они будут сложные, я не силён в них
0
Ушел с CyberForum совсем!
874 / 183 / 25
Регистрация: 04.05.2011
Сообщений: 1,020
Записей в блоге: 110
13.10.2015, 12:02
Mighty, в макросах вы сильнее ?
чем точнее вы опишете задачу, тем быстрее получится ответ.
0
 Аватар для KoGG
5640 / 1622 / 418
Регистрация: 23.12.2010
Сообщений: 2,431
Записей в блоге: 1
13.10.2015, 12:20
Лучший ответ Сообщение было отмечено Mighty как решение

Решение

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
Sub Schot_Modeley()
    Dim i&, j&, k&, A, S$, DicA, DicB, DicC, vX
    Set DicA = CreateObject("Scripting.Dictionary")
    Set DicB = CreateObject("Scripting.Dictionary")
    Set DicC = CreateObject("Scripting.Dictionary")
    DicA.CompareMode = 1: DicB.CompareMode = 1: DicC.CompareMode = 1
    With ActiveSheet
        .Cells.UnMerge
        A = .[A1].CurrentRegion.Value
        k = .[A1].End(xlDown).Row + 1
        j = .UsedRange.Rows.Count - .UsedRange.Row + 1
        .Rows(k & ":" & j).Clear
        For i = 1 To UBound(A, 1)
            DicC(Trim$(A(i, 3))) = 0&
            S = Trim$(A(i, 1)) & "|" & Trim$(A(i, 2))
            DicB(S) = 0&
            S = S & "|" & Trim$(A(i, 3))
            DicA(S) = DicA(S) + 1
        Next i
        .Cells(k + 2, 3) = "модель"
        Range(.Cells(k + 2, 3), .Cells(k + 2, DicC.Count + 2)).Merge
        .Cells(k + 2, 3).HorizontalAlignment = xlCenter
        k = k + 3
        .Cells(k, 1) = "дата"
        .Cells(k, 2) = "Фирма"
        j = 2
        For Each vX In DicC.Keys
            j = j + 1
            .Cells(k, j) = vX
        Next vX
        i = k
        For Each vX In DicB.Keys
            i = i + 1
            .Cells(i, 1) = Split(vX, "|")(0)
            .Cells(i, 2) = Split(vX, "|")(1)
        Next vX
        For i = 1 To DicB.Count
            For j = 1 To DicC.Count
                S = .Cells(k + i, 1) & "|" & .Cells(k + i, 2) & "|" & .Cells(k, 2 + j)
                If DicA.Exists(S) Then
                    .Cells(k + i, 2 + j) = DicA(S)
                End If
            Next j
        Next i
    End With
    Set DicA = Nothing: Set DicB = Nothing: Set DicC = Nothing
End Sub
1
0 / 0 / 0
Регистрация: 30.06.2015
Сообщений: 13
13.10.2015, 12:38  [ТС]
О, божечки! Всех благ тебе, добрый человек))

От этого я уже смогу отталкиваться, и доделать мелочи

Спасибо!
0
0 / 0 / 0
Регистрация: 30.06.2015
Сообщений: 13
16.10.2015, 11:31  [ТС]
Провёл я немного манипуляций с применением вашего кода.

Но теперь столкнулся с одним из важных составляющих.

Когда у нас формируется из такого вида
01.10.2014Искра4444
01.10.2014Искра3333
01.10.2014Кампас1111
01.10.2014Полар2222
01.10.2014Полар4444

в такой вид. То данные входящие в массив, берутся как первый попавшийся, в результате получаем

№ MonthSale DateSale Info4444333311112222
10 01.10.2014Искра11  
10 01.10.2014Кампас  1 
10 01.10.2014Полар1  1


Как можно отсортировать или принудительно настроить заголовки моделей? /моделей может быть и больше 4.
И получить следующий вид
№ MonthSale DateSale Info1111222233334444
10 01.10.2014Искра  11
10 01.10.2014Кампас1   
10 01.10.2014Полар 1 1
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
16.10.2015, 11:54
Как вариант - выгрузить DicC.Keys в массив, отсортировать (на форуме полно всяких готовых функций), и уже затем выгружать на лист.

Добавлено через 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
'...
        a = DicC.Keys
        SortArray a
        For Each vX In a
            j = j + 1
            .Cells(k, j) = vX
        Next vX
'....
 
 
Private Sub SortArray(ByRef a As Variant)
    Dim i As Long, j As Long
    Dim t As Variant
  
    'standard bubble sort loops
    For i = LBound(a) To UBound(a) - 1
        For j = i + 1 To UBound(a)
            If a(i) > a(j) Then 'change to < for descending order
                t = a(i)
                a(i) = a(j)
                a(j) = t
            End If
        Next j
    Next i
End Sub
1
0 / 0 / 0
Регистрация: 30.06.2015
Сообщений: 13
16.10.2015, 12:44  [ТС]
Получается он отсортировал заголовки, но как сделать чтобы данные по этим заголовкам выводились?
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
16.10.2015, 12:50
Разве не выводятся?
1
0 / 0 / 0
Регистрация: 30.06.2015
Сообщений: 13
16.10.2015, 14:23  [ТС]
Спасибо, разобрался. Можно закрывать тему)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.10.2015, 14:23
Помогаю со студенческими работами здесь

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

Извлечь данные из ячейки и поместить в другие ячейки
Добрый день. При импорте контактов со смартфона, программа накосячила и все поля занесла в ячейку Notes. Таких контактов около 2тысяч. ...

Подсчитать количество строк, включающих одинаковые данные
Допустим, у меня есть таблица Студент с атрибутами фам, имя,возраст. Подскажите, пожалуйста, что писать в запросе, чтобы подсчитывалось...

Поиск слов такого типа <* слово , .*> и замена их на другие слова средствами Word-VBA
Есть кнопка в документе,при открытии появляется форма где видно несколько полей,куда нужно вписать текст(слово или несколько слов) и этот...

Как ввести значение одной ячейки в другие листы книги
Пожалуйста помогите с формулой! Есть книга эксель . в ней несколько листов , например 1.2.3.4. ит.д . В листе №1 в ячейке А2 есть дата...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера 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. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru