Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Подсчёт количества совпадений в таблицу - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Подсчёт количества совпадений в таблицу
zealot Дата: Понедельник, 30.10.2017, 23:42 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Добрый вечер, уважаемые коллеги. Перечитав смежные с моей темы, решений не обнаружил, теперь вынужден обратиться к вам.
На работе потребовали написать макрос на vba для подсчёта совпадений чисел в таблице. В общем, есть готовая форма excel 2010, которую я прикрепляю, в которой даны 2 таблицы: tbM (10000x300) и tbQ (10000x2). Требуется автозаполнение таблицы tbM случайными числами от 1 до 10000, а затем автоматически заполнить столбец "Количество совпадений" в tbQ - сколько раз число n (значение в столбце "Число") встречается в tbM. Операция должна выполнятся по кнопке и по окончании работы макроса программа пишет затраченное время на сию операцию. Как вставить этот секундомер в автофигуру, которая у меня на форме, я совсем не понимаю, второй день разбираюсь в vba, тяжеловато.
Требуется ваша помощь в доработке кода, буду крайне признателен, если ткнёте в ошибки, хотя, их может и нет. Вставляю свой код на кнопку:
[vba]
Код
Sub Procedure()
    a = Timer
    Dim rRange As Excel.Range
    Dim rCell As Excel.Range
    Set rRange = Range("E4:KQ10003")
    For Each rCell In rRange.Cells
        rCell.Value = Int(Rnd * 10000 + 1)
    Next rCell
    Dim i As Integer
    Dim j As Integer
    Dim iRowNumber As Integer
    Dim jStrNumber As Integer
    Dim s As Integer
    Dim p As Integer
    p = 0
    s = 1
    iRowNumber = 0
    jStrNumber = 0
    Set rRange = Range("B4:B10003")
    For s = 1 To 100
        For i = 1 To 300
            For j = 1 To 10000
                If Cells(i, j).Value = text Then
                    p = p + 1
                    iRowNumber = i
                    jStrNumber = j
                    rCell.Value = p
                    Exit For
                End If
            Next j
        Next i
    Next s
    TextBox1.text = Format(Timer - a)
End Sub
[/vba]
Это последняя версия моих "трудов", очень долго обрабатывает мой комп этот макрос, иногда вовсе зависает.
Экселевская форма весит около 3мб, поэтому сомневаюсь, что смогу её сюда загрузить, на всякий случай оставлю скриншот формы, о которой шла речь:

Очень нужны ваши советы и помощь. Заранее благодарен.
P.S. Залил саму форму на обменник: ФОРМА


Сообщение отредактировал zealot - Понедельник, 30.10.2017, 23:51
 
Ответить
СообщениеДобрый вечер, уважаемые коллеги. Перечитав смежные с моей темы, решений не обнаружил, теперь вынужден обратиться к вам.
На работе потребовали написать макрос на vba для подсчёта совпадений чисел в таблице. В общем, есть готовая форма excel 2010, которую я прикрепляю, в которой даны 2 таблицы: tbM (10000x300) и tbQ (10000x2). Требуется автозаполнение таблицы tbM случайными числами от 1 до 10000, а затем автоматически заполнить столбец "Количество совпадений" в tbQ - сколько раз число n (значение в столбце "Число") встречается в tbM. Операция должна выполнятся по кнопке и по окончании работы макроса программа пишет затраченное время на сию операцию. Как вставить этот секундомер в автофигуру, которая у меня на форме, я совсем не понимаю, второй день разбираюсь в vba, тяжеловато.
Требуется ваша помощь в доработке кода, буду крайне признателен, если ткнёте в ошибки, хотя, их может и нет. Вставляю свой код на кнопку:
[vba]
Код
Sub Procedure()
    a = Timer
    Dim rRange As Excel.Range
    Dim rCell As Excel.Range
    Set rRange = Range("E4:KQ10003")
    For Each rCell In rRange.Cells
        rCell.Value = Int(Rnd * 10000 + 1)
    Next rCell
    Dim i As Integer
    Dim j As Integer
    Dim iRowNumber As Integer
    Dim jStrNumber As Integer
    Dim s As Integer
    Dim p As Integer
    p = 0
    s = 1
    iRowNumber = 0
    jStrNumber = 0
    Set rRange = Range("B4:B10003")
    For s = 1 To 100
        For i = 1 To 300
            For j = 1 To 10000
                If Cells(i, j).Value = text Then
                    p = p + 1
                    iRowNumber = i
                    jStrNumber = j
                    rCell.Value = p
                    Exit For
                End If
            Next j
        Next i
    Next s
    TextBox1.text = Format(Timer - a)
End Sub
[/vba]
Это последняя версия моих "трудов", очень долго обрабатывает мой комп этот макрос, иногда вовсе зависает.
Экселевская форма весит около 3мб, поэтому сомневаюсь, что смогу её сюда загрузить, на всякий случай оставлю скриншот формы, о которой шла речь:

Очень нужны ваши советы и помощь. Заранее благодарен.
P.S. Залил саму форму на обменник: ФОРМА

Автор - zealot
Дата добавления - 30.10.2017 в 23:42
buchlotnik Дата: Вторник, 31.10.2017, 00:21 | Сообщение № 2
Группа: Заблокированные
Ранг: Участник клуба
Сообщений: 3442
Репутация: 929 ±
Замечаний: 20% ±

2010, 2013, 2016 RUS / ENG
 
Ответить
Сообщениекросс

Автор - buchlotnik
Дата добавления - 31.10.2017 в 00:21
zealot Дата: Вторник, 31.10.2017, 00:23 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
кросс

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

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

Автор - zealot
Дата добавления - 31.10.2017 в 00:23
buchlotnik Дата: Вторник, 31.10.2017, 00:52 | Сообщение № 4
Группа: Заблокированные
Ранг: Участник клуба
Сообщений: 3442
Репутация: 929 ±
Замечаний: 20% ±

2010, 2013, 2016 RUS / ENG
Цитата
начальство требует
правила форума тоже требуют
 
Ответить
Сообщение
Цитата
начальство требует
правила форума тоже требуют

Автор - buchlotnik
Дата добавления - 31.10.2017 в 00:52
zealot Дата: Вторник, 31.10.2017, 00:56 | Сообщение № 5
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
правила форума тоже требуют

Может для людей, которые в этом разбираются, моя проблема - минутный пустяк. Поймите меня правильно,буду рад любой помощи.
 
Ответить
Сообщение
правила форума тоже требуют

Может для людей, которые в этом разбираются, моя проблема - минутный пустяк. Поймите меня правильно,буду рад любой помощи.

Автор - zealot
Дата добавления - 31.10.2017 в 00:56
zealot Дата: Вторник, 31.10.2017, 01:15 | Сообщение № 6
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Проблема решена, тему можно закрывать, извиняюсь.
 
Ответить
СообщениеПроблема решена, тему можно закрывать, извиняюсь.

Автор - zealot
Дата добавления - 31.10.2017 в 01:15
Pelena Дата: Вторник, 31.10.2017, 10:43 | Сообщение № 7
Группа: Админы
Ранг: Местный житель
Сообщений: 19603
Репутация: 4660 ±
Замечаний: ±

Excel 365 & Mac Excel
Поделиться решением не хотите?


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеПоделиться решением не хотите?

Автор - Pelena
Дата добавления - 31.10.2017 в 10:43
zealot Дата: Вторник, 31.10.2017, 19:09 | Сообщение № 8
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Оптимизированный и рабочий макрос, который мне подсказали форумчане. Время работы - 10 сек.
[vba]
Код
Sub tbMtotbQ()
  Dim ard&(1 To 10000, 1 To 300), arr&(1 To 10000, 1 To 2), r&, c&, tm As Single
  Randomize:  tm = Timer
  For r = 1 To 10000
    arr(r, 1) = r
    For c = 1 To 300
      ard(r, c) = 1 + Int(Rnd * 10000):  arr(ard(r, c), 2) = arr(ard(r, c), 2) + 1
    Next
  Next
  Cells(4, 1).Resize(10000, 2).Value = arr
  Cells(4, 5).Resize(10000, 299).Value = ard
  Cells(1, 8).Value = Timer - tm
  MsgBox "сделано за " & Timer - tm & " сек."
End Sub
[/vba]
 
Ответить
СообщениеОптимизированный и рабочий макрос, который мне подсказали форумчане. Время работы - 10 сек.
[vba]
Код
Sub tbMtotbQ()
  Dim ard&(1 To 10000, 1 To 300), arr&(1 To 10000, 1 To 2), r&, c&, tm As Single
  Randomize:  tm = Timer
  For r = 1 To 10000
    arr(r, 1) = r
    For c = 1 To 300
      ard(r, c) = 1 + Int(Rnd * 10000):  arr(ard(r, c), 2) = arr(ard(r, c), 2) + 1
    Next
  Next
  Cells(4, 1).Resize(10000, 2).Value = arr
  Cells(4, 5).Resize(10000, 299).Value = ard
  Cells(1, 8).Value = Timer - tm
  MsgBox "сделано за " & Timer - tm & " сек."
End Sub
[/vba]

Автор - zealot
Дата добавления - 31.10.2017 в 19:09
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2026 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!