CMP - форум PRO игроков казино
Excel - анализ спинов на рулетке казино
- Mira
- Автор темы
- expert
- Сообщений: 746
Re: Excel - анализ спинов на рулетке казино
4 года 8 мес. назад - 4 года 8 мес. назадА теперь нужно написать функцию поиска по строкам всех вхождений по заданному значению.
Public Function findAllPos(z as Range, n as Long) as Variant
которая пройдет по всему диапазону номеров в столбике A и для указанного номера соберет №№ спинов, на которых этот номер выпал.
На выходе будет массив произвольной длинны.
Желательно явно не указывать диапазон со спинами, пусть макрос сам определит где его начало и конец в указанной колонке A:A. В дальнейшем аргументом может быть не только вся колонка, а любой диапазон вертикальный или горизонтальный
Желательно обработать ошибку, если номера нет совсем.
Какие будут варианты решения? Готовую функцию alt2005 не использовать.
( • - •) Позволь пожелать
/つ ✿ Тебе Удачи!
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- LUCKY-13
- admin
- Сообщений: 1593
Re: Excel - анализ спинов на рулетке казино
4 года 8 мес. назадDim Sheet1_WS, Sheet2_WS As Worksheet
'Переменная для прохождения срок на листе (в массиве)
Dim i As Long
'Массив, в котором будут храниться наши данные
Dim R_data As Variant
'Переменные последней строки и колонки
Dim FinalRow, FinalColumn As Long
'Можно инициализировать лист не по названию, а по порядковому номеру
'Set Sheet1_WS = Application.ThisWorkbook.Worksheet("Sheet1")
Set Sheet1_WS = Application.ThisWorkbook.Sheets(1)
Set Sheet2_WS = Application.ThisWorkbook.Sheets(2)
'Поиск последней не пустой строки в первой колонке
'Нужно, что бы данные не были отфильтрованы, иначе последняя строка будет последней строкой в фильтре
'Также в последней строке, в первой колонке, не должно быть пустой ячейки. Конечно, если в этой строке вообще есть данные. Иначе последней строкой будет последняя не пустая ячейка.
FinalRow = Sheet1_WS.Cells(Rows.Count, 1).End(xlUp).Row '=10 000
'Поиск последней не пустой колонки в первой строке
FinalColumn = Sheet1_WS.Cells(1, Columns.Count).End(xlToLeft).Column '=50
'Присваиваем массиву диапазон данных на Листе 1
R_data = Sheet1_WS.Range(Sheet1_WS.Cells(1, 1), Sheet1_WS.Cells(FinalRow, FinalColumn))
For i = 2 To FinalRow
'Выполняем нужные нам операции с данными.
'Проверяем, что бы не было деления на ноль.
'Предполагается, что в колонке 2 и 3 стоят числовые данные
'Иначе потребуется обработка ошибок
If R_data(i, 3) <> 0 Then
R_data(i, FinalColumn) = R_data(i, 2) / R_data(i, 3)
End If
Next i
'Копируем данные из массива обратно на Лист1
'Перед этим очищаем данные на листе (если есть форматирование или формулы, то лучше Sheet1_WS.Cells.ClearContents)
Sheet1_WS.Cells.Delete
Sheet1_WS.Range(Sheet1_WS.Cells(1, 1), Sheet1_WS.Cells(FinalRow, FinalColumn)) = R_data
'Копируем данные на Лист2, копируем первые 10 колонок.
Sheet2_WS.Range(Sheet2_WS.Cells(1, 1), Sheet2_WS.Cells(FinalRow, 10)) = R_data
'Закрываем книгу и сохраняем её
Workbooks(Application.ThisWorkbook.Name).Close SaveChanges:=True
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- alt2005
- expert
- Сообщений: 503
Re: Excel - анализ спинов на рулетке казино
4 года 8 мес. назад - 4 года 8 мес. назадФункцию же можно вызвать так же, как и стандартную функцию EXCEL. Но она не может изменять другие ячейки, кроме той, их которой вызвана (значения функции возвращаются в ячейку вызова автоматически). И такую функцию можно копировать, но работает это медленно.
Конструкции вида
Dim Sheet1_WS, Sheet2_WS As Worksheet
Dim R_data As Variant
Set Sheet1_WS = Application.ThisWorkbook.Sheets(1)
R_data = Sheet1_WS.Range(Sheet1_WS.Cells(1, 1), Sheet1_WS.Cells(FinalRow, FinalColumn))
For i = 2 To FinalRow
If R_data(i, 3) <> 0 Then
....
я никогда не использовал, но попробовал только что в том файле. Время работы не изменилось.
А вот что можно сделать для ускорения - нужно загрузить данные с листа в память, типа массива. Но глобальных массивов в VBA нет, поэтому нужно создать классы для каждого нужного столбца, и массивы объявить внутри этих классов. А потом создать инстанции (экземпляры) нужных классов, один раз заполнить их, и далее просто вытаскивать значения из массивов при помощи метода, например getValue(n) где n - номер элемента в массиве (проще всего это может быть номер строки).
Вот код для классов
1. Класс clsSheet для столбца
Option Explicit
Dim mas(arraySize) As Long
Public Function setValues(sheet As String, column As Long)
Dim i As Long
Dim value As Variant
'
For i = 1 To arraySize
On Error GoTo erro
value = Worksheets(sheet).Cells(i, column)
If IsNumeric(value) Then
mas(i) = value
End If
erro:
Next i
End Function
'
Public Function getValue(row As Long) As Long
getValue = mas(row)
End Function
Класс clsMas для хранения объектов clsSheet:
Option Explicit
Dim classes(10) As clsSheet
Public Function setClass(classID As Long, sheet As String, Optional column = 0)
Dim cNew As clsSheet
Dim col As Long
'
If column = 0 Then
col = classID
Else
col = column
End If
Set cNew = New clsSheet
Call cNew.setValues(sheet, col)
Set classes(classID) = cNew
End Function
'
Public Function getClass(classID As Long) As clsSheet
Set getClass = classes(classID)
End Function
Ну и как эту хрень использовать
Set cMas = New clsMas - создание контейнера классов
Call cMas.setClass(1, "SS1") - создание экземпляра класса для столбца 1, SS1 - название листа (sheet)
В функции getResult есть оператор
Set clasZ = cMas.getClass(1)
он нужен для создания 1-го столбца, где живут номера.
А вот тут вместо чтения с листа (оно закомментировано), читаем значения номера из класса.
' za = Worksheets(z.Worksheet.Name).Cells(i, 1)
za = clasZ.getValue(i)
Использование классов ускоряет расчеты примерно в 2 раза (на моем компе) по сравнению с перебором значений на листе. Но нужно в начале работы создать объект класса и заполнить его значениями с листа (процедура ausfullen). Причем если в столбец загнать другие данные, то опять нужно вызывать процедуру "ausfullen"
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- WoodForest
- VIP
- Сообщений: 2712
Re: Excel - анализ спинов на рулетке казино
4 года 8 мес. назад"Человек ноября" к\ф, где гл. герой профи киллер ( актер Пирс Броснан), говорит другому такому же коллеге, которого когда-то стажировал, простую истину - "ты можешь быть или профи киллером или хорошим человеком, но нельзя быть и тем и другим одновременно" (Палач не может быть одновременно доктором - если уже совсем откровенно).
Народ ждет от нас простое и понятное методическое руководство с готовым набором рабочих формул с проверенным синтаксисом, прочитав которое он сможет открыть любой excel начиная с 2010, построить таблицы и успешно майнить! Т.е. все что он готов изучить - это методическое руководство типа - excel своими руками (сделай сам и получи прибыль)... И только единицы возможно смогут захотеть и заморочиться в глубоком изучении excel и VBA, чтобы модернизировать под свои! интересы уже готовый продукт.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- DLK
- moder
- Сообщений: 2515
Re: Excel - анализ спинов на рулетке казино
4 года 8 мес. назадТрехэтажные формулы Excel требуют еще гору дополнительных колонок для хранения промежуточных результатов. На уровне макросов все решается проще и быстрее с поиском и переборами. Когда говорим про имитацию стратегии с условиями, выборами, какими-то правилами, то сделать это только формулами очень громоздко и часто нереально.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- WoodForest
- VIP
- Сообщений: 2712
Re: Excel - анализ спинов на рулетке казино
4 года 8 мес. назадПожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Работай над своей Удачей!
Игра в казино: все мы учимся на пробах и ошибках. Наша цель - свести к минимуму затраты на этом пути и улучшить финансовые результаты. Эксперты CMP тщательно протестировали каждый аспект работы на реальных деньгах в разных казино. Форум помогает всем игрокам экономить деньги и время. Изучите лучшие игровые стратегии и основные инструменты (включая мобильные приложения). Вы получаете важные идеи для победы над казино и уменьшаете свои потери. Присоединяйтесь, чтобы ускорить и упростить свой путь к PRO игре в казино!
Copyright © 2011-2024 ESPT GO LIMITED Reg. : HE 370907
Vasili Michailidi, 9, 3026, Limassol, Cyprus, phone: +35796363497