Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.01.2014, 01:03   #1
dimale
Новичок
Джуниор
 
Регистрация: 22.01.2014
Сообщений: 2
По умолчанию Случайный выбор из таблицы

Добрый день. Вообщем столкнулся с такой задачей. Есть 2 таблицы, довольно громоздкие, одна 2к+ строк, другая 16к+. По одному параметру(значения одного столбика) обе таблицы делятся на большое число групп. Надо случайным образом выбрать из большей таблицы таблицу с таким же количеством строк как у меньшей, и с таким же "распределениям по группам" как у меньшей.
Если малое количество групп, то, в принципе, знаю как делать, рассматриваю каждую группу отдельно. Но вот если групп 30 или даже 300, то вызывает затруднение.
Прикрепил файл с примерной задачей, обе таблицы "поделены" на 15 групп

табл.rar
dimale вне форума Ответить с цитированием
Старый 22.01.2014, 02:50   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

в колонке В местами группы не указаны.
результаты будут в Д:Е. группы тех же размеров что в А:В, фамилии случайны.

Код:
Sub NewTable()
  Dim g() As Long, gc As Long, i As Long, n As Long, r As Long, lr As Long
  Randomize
  gc = WorksheetFunction.Max(Columns(9))
  n = WorksheetFunction.Count(Columns(2))
  lr = WorksheetFunction.Count(Columns(9)) - 2
  ReDim g(gc): r = 0
  For i = 1 To gc
    g(i) = WorksheetFunction.CountIf(Columns(2), i)
    r = r + g(i)
  Next
  i = 0:  Cells(1, 7) = 1
  Do
    r = Rnd() * lr + 2
    If Cells(r, 7) = "" Then
      If g(Cells(r, 9)) > 0 Then
        g(Cells(r, 9)) = g(Cells(r, 9)) - 1:  i = i + 1: Cells(r, 7) = 1
        Application.StatusBar = "из " & n & "  готово " & i
      End If
    End If
  Loop Until i >= n
  Application.Intersect(Columns(7).SpecialCells(xlCellTypeConstants).EntireRow, Range("H:I")).Copy Destination:=[d1]
  Columns(7).ClearContents
  Application.StatusBar = False
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 22.01.2014, 23:10   #3
dimale
Новичок
Джуниор
 
Регистрация: 22.01.2014
Сообщений: 2
По умолчанию

Большое спасибо, буду разбираться
dimale вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Случайный выбор заголовка label Fox River Microsoft Office Excel 8 14.12.2010 13:24
Случайный выбор слов. nestorr Microsoft Office Word 5 30.08.2010 10:07
Случайный выбор файлов Stafford Общие вопросы .NET 1 27.07.2009 00:49
Случайный выбор с папки Marsik Помощь студентам 2 15.12.2007 19:04
случайный выбор имен SeRhy Помощь студентам 4 26.11.2007 15:00