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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.06.2014, 15:11   #1
Серей
 
Регистрация: 11.06.2014
Сообщений: 5
По умолчанию Кодирование в квадрате Полибия

Уважаемые форумчане, добрый день.
Есть матрица - Х/Y, в которой каждый символ представлен как координата оси Х и оси Y соответственно (квадрат Полибия)
Есть поля, в которые пользователь вносит буквенно-цифровые значения для кодировки (B20 - AG20).
На выходе необходимо получить координаты (х, y) для каждого кодируемого символа (B21 - AG21).
Пытался решить проблему с использованием функций, по следующему алгоритму:
* найти значение в массиве;
* определить местоположение с использованием поискпоз;
* получить "координаты" х и y путем использования смещ;
...но запнулся на первом же шаге - стандартные функции поиска: впр; гпр; просмотр; поискпоз - в этой конструкции не работают (либо не хватает умения применить функции поиска в массиве).
Требуемый символ можно легко найти с помощью Ctrl+F, но дальше того, чтобы использовать "Запись макроса" на это действие я не ушел... а как написать шаги № 2 - 3 в VBA без понятия... макросы - это не мое.
Может кто-нибудь оказать содействие в решении задачи?
Файл прилагаю.
Вложения
Тип файла: rar Квадрат Полибия.rar (12.8 Кб, 37 просмотров)
Серей вне форума Ответить с цитированием
Старый 11.06.2014, 17:01   #2
kalbasiatka
Форумчанин
 
Регистрация: 21.10.2012
Сообщений: 208
По умолчанию

Не знаю чей там квадрат, может так
Вложения
Тип файла: rar Квадрат Полибия_2.rar (20.7 Кб, 72 просмотров)
kalbasiatka вне форума Ответить с цитированием
Старый 11.06.2014, 17:46   #3
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

несколько первых букв закодировалось...
Вложения
Тип файла: rar Квадрат Полибия.rar (13.1 Кб, 46 просмотров)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 12.06.2014, 17:22   #4
Серей
 
Регистрация: 11.06.2014
Сообщений: 5
По умолчанию

Цитата:
Сообщение от kalbasiatka Посмотреть сообщение
Не знаю чей там квадрат, может так
Цитата:
Сообщение от IgorGO Посмотреть сообщение
несколько первых букв закодировалось...
Большое спасибо! Оба варианта работают!

Цитата:
Сообщение от kalbasiatka Посмотреть сообщение
Не знаю чей там квадрат, может так
А можно узнать, как допилить макрос, чтобы если поля, которые надо кодировать - пустые (NULL) - макрос их не заполнял?

Цитата:
Сообщение от IgorGO Посмотреть сообщение
несколько первых букв закодировалось...
Буквы кодирует отлично, а вот цифры (1 - 9) не отрабатывает (например, вместо "2" выдает код на "ç").

Еще раз огромное спасибо! Главное - помогли решить задачу глобально. А то, что не получается - попробую допилить сам, если у вас не найдется возможности ответить.
Серей вне форума Ответить с цитированием
Старый 12.06.2014, 17:50   #5
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

опечатка в формуле, не правильно указан диапазон (проблемы должны были быть с цифрами 0-9 и латинскими буквами A-F)
Вложения
Тип файла: rar Квадрат Полибия.rar (13.4 Кб, 29 просмотров)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 12.06.2014, 19:41   #6
kalbasiatka
Форумчанин
 
Регистрация: 21.10.2012
Сообщений: 208
По умолчанию

Рихтанул
Код:
Sub поличтото()
    Dim a(), b(), c()
    Dim i&, j&
    a = Range("A1:Q17").Value
    Set sd = CreateObject("Scripting.Dictionary")
    For i = 2 To UBound(a)
        For j = 2 To UBound(a, 2)
            If a(i, j) <> "" Then
                sd.Item(a(i, j)) = a(1, j) & a(i, 1)
            End If
        Next
    Next
    b = Range("B20", Cells(20, Cells(20, Columns.Count).End(xlToLeft).Column)).Value
    ReDim c(1 To 1, 1 To UBound(b, 2) + 1)
    For j = 1 To UBound(b, 2) Step 2
        If b(1, j) <> "" Then
            c(1, j) = Left(sd.Item(b(1, j)), 1)
            c(1, j + 1) = Right(sd.Item(b(1, j)), 1)
        End If
    Next
    Range("B21").Resize(, UBound(c, 2)) = c
    Beep
End Sub
kalbasiatka вне форума Ответить с цитированием
Старый 13.06.2014, 13:23   #7
Серей
 
Регистрация: 11.06.2014
Сообщений: 5
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
опечатка в формуле, не правильно указан диапазон (проблемы должны были быть с цифрами 0-9 и латинскими буквами A-F)
Теперь не работает на следующих символах: 0 (ноль), C, G, H, I, J, K, L, M, N, O, Q, W, X, Y, Z, c, g, h, i, g, k, l, m, n, o, q, w, x, y, z.
Серей вне форума Ответить с цитированием
Старый 13.06.2014, 13:26   #8
Серей
 
Регистрация: 11.06.2014
Сообщений: 5
По умолчанию

Цитата:
Сообщение от kalbasiatka Посмотреть сообщение
Рихтанул
Код:
Sub поличтото()
    Dim a(), b(), c()
    Dim i&, j&
    a = Range("A1:Q17").Value
    Set sd = CreateObject("Scripting.Dictionary")
    For i = 2 To UBound(a)
        For j = 2 To UBound(a, 2)
            If a(i, j) <> "" Then
                sd.Item(a(i, j)) = a(1, j) & a(i, 1)
            End If
        Next
    Next
    b = Range("B20", Cells(20, Cells(20, Columns.Count).End(xlToLeft).Column)).Value
    ReDim c(1 To 1, 1 To UBound(b, 2) + 1)
    For j = 1 To UBound(b, 2) Step 2
        If b(1, j) <> "" Then
            c(1, j) = Left(sd.Item(b(1, j)), 1)
            c(1, j + 1) = Right(sd.Item(b(1, j)), 1)
        End If
    Next
    Range("B21").Resize(, UBound(c, 2)) = c
    Beep
End Sub
Отрабатывает только на первой ячейке (B20), если остальные (D20 - AG20) пустые - оставляет заполненные значения.
Серей вне форума Ответить с цитированием
Старый 13.06.2014, 14:08   #9
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Вы уж было меня порадовали...
Цитата:
Главное - помогли решить задачу глобально. А то, что не получается - попробую допилить сам
а не тут-то было.

я провтыкал, сравнение "r"="R" даст истина, необходимо сравнивать с учетом регистра.

ну и Вы отличились - некоторые символы в таблице кодировки по 2 раза написаны, в формуле СУММ..., вот она и складывает суммы и выпадает за пределы таблицы...
Вложения
Тип файла: rar Квадрат Полибия.rar (11.1 Кб, 37 просмотров)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 13.06.2014, 15:25   #10
Серей
 
Регистрация: 11.06.2014
Сообщений: 5
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
Вы уж было меня порадовали...

а не тут-то было.

я провтыкал, сравнение "r"="R" даст истина, необходимо сравнивать с учетом регистра
Не-не-не... я просто увидел, Вы начали отвечать, решил что вам интересно допилить. Мои комменты - просто по итогам тестирования, как обратная связь и ни в коем случае не призыв доделывать что-то за меня.

Цитата:
Сообщение от IgorGO Посмотреть сообщение
ну и Вы отличились - некоторые символы в таблице кодировки по 2 раза написаны, в формуле СУММ..., вот она и складывает суммы и выпадает за пределы таблицы...
Это даже не я, это NEC - приведенная таблица, это способ кодировки имени звонящего на ip-телефонах. Руками перенес таблицу из их мануала в Excel.
Еще раз спасибо за помощь - благодаря вам мата на свете станет меньше (в процессе кодировки аппаратов).

Последний раз редактировалось Серей; 13.06.2014 в 15:29.
Серей вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ШИФР ПОЛИБИЯ kostyankote Помощь студентам 3 01.11.2013 20:51
квадрат полибия Javascript roshina_93 Помощь студентам 0 21.04.2012 22:01
C++ шифр Полибия tracer Помощь студентам 0 14.11.2011 20:48
C++ шифр Полибия Aniritake Помощь студентам 1 12.04.2010 18:02
Шифр Полибия Claster Помощь студентам 1 21.02.2009 14:40