Казалось бы, что сложного может быть, так это организовать конкурсы в социальных сетях. Но на практике все не так просто, как кажется на первый взгляд.
Многие SMM-специалисты вынуждены пройти все круги ада, пока не автоматизируют максимальное количество процессов при проведении нетипичных конкурсов. Поэтому мы хотим поделиться некоторыми техническими хаками, которые мы используем.
Конкурс предсказаний
Что может быть проще, чем собрать числа в массив и отсортировать несколько, чтобы найти победителя? Но что делать, если страница с комментариями генерируется динамически (т.е. нет возможности разобрать без головной боли), а люди любят помимо цифр писать много лишнего, а сами цифры оставлять в разных форматах.
И да, все призывы сделать все это в одном формате вообще игнорируются. Публика не любит читать условия конкурса — «Обезьяна видит — Обезьяна делает», она будет делать как все, не заглядывая в правила.
Так что же сделал наш (технически подготовленный) маркетолог? Процесс очистки данных в Excel был автоматизирован с помощью нескольких макросов VBA. Давайте поговорим о каждом.
Прежде чем начать копируем данные в таблицу старым дедовским методом «Ctrl+C»-«Ctrl+V». И дублируем эти же данные в соседней ячейке, вам будет полезно сравнить результат макросов с оригиналом.
Первый шаг — удалить все, кроме цифр и десятичных знаков. Первый макрос делает именно это:
Const AlfaBet As String = "=-/\()`'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя"
Sub Macros1CharDel()
Set R = Application.Selection
R.Replace What:=".", Replacement:=",", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
R.Replace What:=" ", Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
R.Replace What:="+", Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
R.Replace What:="$", Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
R.Replace What:="~?", Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
R.Replace What:="~!", Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
R.Replace What:="~#", Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
R.Replace What:="~;", Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
R.Replace What:="~@", Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
R.Replace What:=":", Replacement:="%", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Dim n As Integer, i As Integer, S() As String
n = Len(AlfaBet): ReDim S(1 To n)
For i = 1 To n
S(i) = Mid(AlfaBet, i, 1)
R.Replace What:=S(i), Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Next i
End Sub
Мы определяем алфавит, который затем будем перебирать, удаляя все символы из списка.
Далее идет предварительное прочесывание данных:
-
Меняем все точки на запятые, они и есть десятичная точка в Excel.
-
Убираем все пробелы.
-
Также по одному убираем спецсимволы (в цикле не получится, захватывает только один символ и в макросах их надо экранировать тильдой).
-
Двоеточия для удобства заменяем знаком процента, иначе после удаления лишних символов могут получиться ячейки со «временем».
Наконец, данные готовы к удалению символов из указанной строки в самом начале.
Второй макрос удаляет отмеченные ранее даты:
Sub Macros2DatesDel()
Set R = Application.Selection
R.Replace What:="*%*", Replacement:="", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
End Sub
Вроде бы все должно быть готово, но мы сталкиваемся с идиотизмом Excel, который переопределяет формат данных в ячейке только при ручном вводе, а после работы макросов старый текст остается текстовым, даже если есть только цифры внутри ячейки.
Есть проблема, заставляем работать Excel изменив формат ячейки третьим макросом:
Sub Macros3DoNumbers()
For Each Cell In Selection
If Cell.Value <> "" And IsNumeric(Cell.Value) Then
Cell.Value = (Cell.Value * 1)
Cell.NumberFormat = "General"
End If
Next
End Sub
И вот мы имеем желаемый результат. Визуально уже можно определить, где находятся цифры. Но, тем не менее, полученные данные портят остальные записи лайков (те самые 1,2 или 3…).
Создание последнего макроса:
Sub Macros4DelLittleNumbers()
For Each Cell In Selection
If Cell.Value < 1000 And Cell.Value > 0 Then Cell.Clear
Next
End Sub
С них мы сняли всего меньше тысячи. Но они не попадали в отрицательные значения, если где-то закралась ошибка, а застрявший тире превращал число в отрицательное.
Также минимальная ручная работа, прокрутка списка вниз, сканирование списка на наличие аномалий. Аномалии выстроятся слева, а правильные числа — справа, так что вам не нужно их читать.
Ошибки исправляем быстро, ведь справа у нас оригинал для сравнения. Всё, переносим на страницу с разницей по модулю числа =ABS(A2-B$2)
и сортировать ASC.
Список кандидатов готов, дальше скучная маркетинговая рутина. Ниже приведен простой gif, иллюстрирующий шаги макроса:
![](https://habrastorage.org/getpro/habr/upload_files/ef1/e28/035/ef1e280358a970ca148e657ccfe7fd7a.gif)
Викторина с купонами
Очередной маленький лайфхак для конкурса, в котором каждому из участников, прошедших викторину, вручается количество билетов, равное количеству правильных ответов.
Можно было бы заморочиться с поиском нужных функций в Excel, но проще и быстрее будет прибегнуть к помощи PHP.
Первый шаг: экспортируйте ответы викторины в формате CSV и подсчитайте правильные ответы в каждом столбце. В итоге получаем список: ссылка + правильные ответы.
Копируем, чтобы избавиться от дубликатов (при вставке указываем: только уникальные значения) на столбец с именами. Все попытки стираются — прибыль.
Полученный CSV импортируем в любую базу данных, у меня под рукой есть mysql. А тут ловкость рук и никакого мошенничества:
<?php
$link = mysqli_connect("хост", "логин", "пароль", "база");
mysqli_query($link, "SET NAMES utf8");
$names = mysqli_query($link, "SELECT * FROM `таблица`");
$number=1;
while ($arr = mysqli_fetch_array($names)) { while ($arr[2]>0) {echo $number++.';'.$arr[1].'<br>'; $arr[2]--;}}
?>
Простейший скрипт «раздает билеты», повторяя каждому участнику необходимое количество раз с глобальным счетчиком.
Сохраняем текст в формате CSV и вставляем полученные данные в Google doc, из которого в прямом эфире будет выбран победитель.
А тут все просто, выбираем кандидатов вертикальной визуализацией по номеру из рандомайзера: =VLOOKUP(C9;'Список билетов'!A:B;2;0)
Проверяем пригодность победителей и вуаля!
Комментируемый конкурс
А если вам этого мало, возьмите еще один мини-лайфхак для следующего конкурса.
В зависимости от условий, нужно просто оставить комментарий под постом. А мы, как маркетологи, можем получить список участников, не прибегая к дополнительным инструментам.
Делаем старые добрые «Ctrl+C» — «Ctrl+V» комментарии в табличке (с сохранением оригинального форматирования).
Далее запускаем простейший макрос для получения ссылок на новый лист:
Sub доставательссылок()
With ActiveSheet
For I = 1 To .Hyperlinks.Count
.Hyperlinks(I).Range.Offset(0, 1).Value = .Hyperlinks(I).TextToDisplay
.Hyperlinks(I).Range.Offset(0, 2).Value = .Hyperlinks(I).Address
Next I
End With
End Sub
Первый столбец содержит текст ссылки (имя и фамилия), а второй столбец содержит саму ссылку.
А теперь убираем ссылки на посты из списка:
Sub удалятельпостов()
Set R = Application.Selection
R.Replace What:="*wall*", Replacement:="", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
End Sub
Готовый! Удалите дубликаты и вставьте их в рандомайзер.
Мы надеемся, что это было полезно для вас. А чьи-то соцсети теперь наполнятся конкурсами поглубже, чем просто угадайки с подключенными ботами.
И если у вас есть идеи для новых действий или упрощения диаграмм выше, поделитесь ими в комментариях.