Трюк №87

Іноді буває важко робити вибір за допомогою прапорців. На щастя, цей процес можна спростити, написавши трохи коду. За допомогою робочих книг Excel можна збирати дані для опитувань. Зазвичай це робиться шляхом виведення певної кількості відповідей, поруч із якими стоять прапорці. Користувач вибирає відповіді, встановлюючи відповідні прапорці. Проблема із застосуванням цього методу полягає в тому, що незабаром у робочій книзі з'являться сотні прапорців.

Натомість можна написати трохи дуже простого коду VBA, щоб помічати будь-яку комірку у вказаному діапазоні одночасно з її виділенням. Якщо осередок у вказаному діапазоні вже позначений, код зніме позначку. Трюк цього коду полягає у використанні літери «а» у комірці, для якої встановлений шрифт Marlett. Коли настане час підсумовувати результати, потрібно буде просто підрахувати літери «а» за допомогою функції РАХУНКИ (COUNTIF), наприклад, так: =COUNITIF($A$1:A$100;"a") , в українській версії Excel: =РАХУНОКИ($ А $ 1: А $ 100; "а") .

Наступні приклади коду працюють тільки в діапазоні А1: А100, але їх можна легко модифікувати будь-якого діапазону. Щоб використовувати цей код, перейдіть на робочий аркуш, на якому мають з'явитися позначки, клацніть правою кнопкою миші ярлик з ім'ям аркуша і в контекстному меню виберіть команду Вихідний текст (View Code). Вставте або КОД 1 (якщо хочете, щоб комірка позначалася в момент, коли її виділяють), або КОД 2 (якщо хочете, щоб комірка позначалася подвійним клацанням), наведений у лістингу 7.12.

// Лістинг 7.12 // КОД 1 - встановити прапорець одночасно з виділенням Private Sub Worksheet_SelectionChange (ByVal Target As Range) If Target.Cells.Count > 1 Then Exit SubIf Not Intersect(Target, Range("Al:A100")) Is Nothing Then Target.Font.Name = "Marlett" If Target = vbNullString Then Target = "a" 2 - встановити прапорець подвійним клацанням Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range. Cancel As Boolean) If Not IntersectCTarget, Range("Al:A100")) Is Nothing Then Cancel = True //Запобігає перехід в режим редагування. = "Marlett" If Target = vbNullString Then Target = "a" Else Target = vbNullString End If End If End Sub

Помістивши потрібний код на місце, закрийте вікно, щоб повернутися до Excel, та збережіть робочу книгу. Якщо хочете перевірити, чи позначено комірку, перевірте її вміст.