Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Сфера Microsoft » Microsoft Office (Word, Excel, Outlook и т.д.) » 2010 - макрос для генерации значений по условиям

Ответить
Настройки темы
2010 - макрос для генерации значений по условиям

Пользователь


Сообщения: 77
Благодарности: 2

Профиль | Отправить PM | Цитировать


Помогите, пожалуйста на VBA написать один скрипт, который генерирует значения по определенным условиям:
Например
Пусть есть переменные и их значения a,b,c
пол X1,X2,X3
м a a a
ж b b b
ж c c c
Нужно сгенирировать значения, но так, чтобы соблюдались пропорции только в случайном порядке:
например 30% мужчин в переменной X1 поставили ответ а, 40% мужчин поставили ответ b и ещё 30% мужчин поставили ответ с
при этом
20% женщин в переменной X1 поставили ответ а, 65% женщин поставили ответ b и ещё 25% женщин поставили ответ с
Аналогично и с другими переменными, их может быть несколько.

Надо просто чтобы в самом годе было написано
пол=200 человек
переменная x1, пусть имеет пять градаций а,б,в,г,Д
градация а=5%мужчин, 25%женищин.
градация б=10% мужчин и 45% женщин
...

Помогите, плиз такое сделать.

Отправлено: 10:28, 29-11-2015

 

Динохромный


Contributor


Сообщения: 712
Благодарности: 322

Профиль | Отправить PM | Цитировать


Цитата Elizavetta:
a_axe, это не педагогика и не медицина, это социология и это лично для меня. »
Elizavetta, это не столь важно, важнее следующее: вы бы не могли подтвердить или поправить мои предположения, указанные в предыдущем посте? Без этого вряд ли получится нащупать результат. Если в описании есть ошибки и неточности - укажите их.

-------
[Форум Word и Excel] - [Как запустить Word, Excel и Outlook в безопасном режиме?] - [Как удалить шаблон Word Normal.dotm?]


Отправлено: 11:22, 02-12-2015 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 77
Благодарности: 2

Профиль | Отправить PM | Цитировать


a_axe, вы верно поняли.

Отправлено: 11:53, 02-12-2015 | #12


Динохромный


Contributor


Сообщения: 712
Благодарности: 322

Профиль | Отправить PM | Цитировать


Elizavetta, могу предложить код с оговорками:
1.Могу ошибаться, генераторы случайных чисел подчиняются-таки определенным законам. Вероятно, с небольшими наборами данных это не будет прослеживаться, но в рамках конкретного алгоритма какое получается распределение - вопрос открытый.
2.Программа дает близкое соотношение по процентам, но не точное. Кроме того, для каждого вопроса после окончания работы скрипта возможно наличие одной незаполненной ячейки. Добивать алгоритм смысла не вижу (откровенно говоря - лень), раз вопрос по статистике - вероятно в любом случае будет нужно что-нибудь подправлять руками. Пустые ячейки легко отследить фильтром по таблице1 и устранить.
3. Таблица1 должна быть пустой - заполнение выполняется только в незаполненные ячейки.
Алгоритм работы следующий:
1. Вашу таблицу с ответами необходимо отформатировать как таблицу (сочетание клавиш ctrl+L). Называться она должна "Таблица1" (Название можно привести в соответствие с помощью диспетчера имен вкладки "Формулы").
Скрин Таблицы1 и диспетчера имен

2. Необходимо создать в произвольном месте того же листа еще одну таблицу с картой ответов. Называться она должна "Таблица2". Названия заголовков непринципиальны, но содержание должно четко соответствовать Таблице1 по названию категорий и вопросов, т.е. если в Таблице2 фигурирует "Категория 3", значит она должна быть и в Таблице1, или если названия вопросов Х1 написаны как английское "икс", то в другой таблице не должно быть русское "хэ". В таблице указываете для каждой категории название вопроса, один из вариантов ответа и процент ответа в десятых долях от единицы. Можно заполнить не все категории - отработают только заполненные категории.
Скрин Таблицы 2 (карты ответов)

Собственно код
Код: Выделить весь код
Public Sub Sociology()
Dim i As Long, j As Long, n As Long, Nkat As Long, m As Long
Dim Kat As String, Kat_old As String
Dim quest As String
Dim answ As String
Dim Perc As Double
Dim cell As Range

Randomize
On Error Resume Next
For i = 1 To Range("Таблица2").Rows.Count
   
   Kat = Range("Таблица2").Cells(i, 1).Value
   quest = Range("Таблица2").Cells(i, 2).Value
   answ = Range("Таблица2").Cells(i, 3).Value
   Perc = Range("Таблица2").Cells(i, 4).Value
   ActiveSheet.ListObjects("Таблица1").Range.AutoFilter Field:=1, Criteria1:=Kat
        Range("Таблица1[" & quest & "]").SpecialCells(xlCellTypeBlanks).Select
        
        Selection.SpecialCells(xlCellTypeVisible).Select
        'Debug.Print "выделено " & Selection.Count
        If Kat <> Kat_old Then
            Nkat = Selection.Count
            Kat_old = Kat
        End If
        m = 0
        Do
            
            n = Selection.Count
            n = Round(n * Rnd())
            If n = 0 Then n = 1
            j = 0
            For Each cell In Selection
             j = j + 1
             If j = n Then
                 cell.Value = answ
                 m = m + 1
                 Exit For
             End If
            Next cell
            Range("Таблица1[" & quest & "]").SpecialCells(xlCellTypeBlanks).Select
            Selection.SpecialCells(xlCellTypeVisible).Select
        Loop Until m >= Nkat * Perc Or Err.Number <> 0
        'Debug.Print "err=" & Err.Number & ", m=" & m & ",Nkat*perc=" & Nkat * Perc & ",j=" & j
        Err.Clear
        ActiveSheet.ListObjects("Таблица1").Range.AutoFilter Field:=1
Next i
Range("Таблица2").Select
End Sub
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:21, 03-12-2015 | #13



Компьютерный форум OSzone.net » Сфера Microsoft » Microsoft Office (Word, Excel, Outlook и т.д.) » 2010 - макрос для генерации значений по условиям

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
VBS/WSH/JS - Переименование файла по условиям bombording Скриптовые языки администрирования Windows 1 24-03-2014 16:17
CMD/BAT - Поиск и удаление строк в файле по сложным условиям i7allia Скриптовые языки администрирования Windows 2 30-10-2013 17:06
PowerShell - Find по разным условиям dosperados Скриптовые языки администрирования Windows 7 07-02-2012 12:14
fpdf класс для генерации pdf с помощью php zvezda_t Вебмастеру 0 29-09-2010 09:06
Вопрос - Программы для генерации и хранения паролей SashaKl Защита компьютерных систем 13 08-10-2009 15:44




 
Переход