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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.09.2011, 10:07   #1
Bape}l{ka
Форумчанин
 
Аватар для Bape}l{ka
 
Регистрация: 25.05.2011
Сообщений: 249
По умолчанию перевод колонок из цифр в буквы и обратно

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

вобщем придумала функцию, которая цифры переводит в буквы... делюсь, может кому тоже пригодится))
Код:
Function NumbersToLetters(ColNo) As Variant
    Dim Letters(0 To 26) As String
    Dim Letter_1 As String, Letter_1_1 As String, Letter_1_1_1 As String
    Dim Povtor1 As Integer, Povtor2 As Integer
    Dim Ostatok1 As Integer, Ostatok2 As Integer, Ostatok3 As Integer

Letters(0) = ""
Letters(1) = "a"
Letters(2) = "b"
Letters(3) = "c"
Letters(4) = "d"
Letters(5) = "e"
Letters(6) = "f"
Letters(7) = "g"
Letters(8) = "h"
Letters(9) = "i"
Letters(10) = "j"
Letters(11) = "k"
Letters(12) = "l"
Letters(13) = "m"
Letters(14) = "n"
Letters(15) = "o"
Letters(16) = "p"
Letters(17) = "q"
Letters(18) = "r"
Letters(19) = "s"
Letters(20) = "t"
Letters(21) = "u"
Letters(22) = "v"
Letters(23) = "w"
Letters(24) = "x"
Letters(25) = "y"
Letters(26) = "z"

Povtor1 = 0
Povtor2 = 0
Ostatok1 = 0
Ostatok2 = 0

    If ColNo > 26 Then
        Povtor1 = ColNo \ 26
        If ColNo = Povtor1 * 26 Then Povtor1 = Povtor1 - 1
    End If
    
    If Povtor1 > 26 Then
        Povtor2 = Povtor1 \ 26
        If Povtor1 = Povtor2 * 26 Then Povtor2 = Povtor2 - 1
    End If
        
    Letter_1_1_1 = Letters(Povtor2)
    Ostatok2 = Povtor1 - (Povtor2 * 26)
    Letter_1_1 = Letters(Ostatok2)
    Ostatok1 = ColNo - (Povtor2 * 26 * 26) - (Ostatok2 * 26)
    Letter_1 = Letters(Ostatok1)
    MsgBox Letter_1_1_1 & Letter_1_1 & Letter_1 & vbCrLf _
           & Povtor2 & " " & Ostatok2 & " " & Ostatok1
    
    NumbersToLetters = Letter_1_1_1 & Letter_1_1 & Letter_1
End Function

'Sub Проверка_NumbersToLetters()
'Dim ColAlph As String
'    'yz = 676      zz = 702
'    'aaa = 703     bdz = 1482
'    'bfa = 1509    xfd = 16384 (максимальная колонка)
'    '
'    MaxCol = 16384 'Cells(2, ActiveWorkbook.ActiveSheet.Columns.Count).End(xlToLeft).Column
'    MsgBox MaxCol
'    ColAlph = NumbersToLetters(MaxCol)
'
'End Sub
вроде проверила, все нормально работает, но если кто найдет ошибку, пишите!

п.с.: надо еще обратную функцию бы, но пока некогда =ь

(2003 эксель)
Bape}l{ka вне форума Ответить с цитированием
Старый 27.09.2011, 10:27   #2
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Bape}l{ka, хорошо!
Посмотрите еще варианты:
http://www.planetaexcel.ru/forum.php?thread_id=19063
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 27.09.2011, 14:36   #3
Bape}l{ka
Форумчанин
 
Аватар для Bape}l{ka
 
Регистрация: 25.05.2011
Сообщений: 249
По умолчанию

дааа... ну я догадывалась, что есть варианты попроще, но ничего не нашлось в то время Т_Т
ну ладна, зато сама)))

а перевод буквы столбца в цифру есть какое-нибудь легкий способ??
Bape}l{ka вне форума Ответить с цитированием
Старый 27.09.2011, 15:55   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
а перевод буквы столбца в цифру есть какое-нибудь легкий способ??
конечно есть.
Используем предложенную мной функцию, только меняем тип преобразования - переставляем местами xlR1C1 и xlA1 в функции ConvertFormula, и немного изменяем код
EducatedFool вне форума Ответить с цитированием
Старый 27.09.2011, 16:03   #5
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Можно и самописную.
Код:
 Private Function ConvertToInteger(ByVal lcAlpha As String) As Integer
 lcAlpha = UCase(lcAlpha)
       For n = 1 To Len(lcAlpha)
          ConvertToInteger = ConvertToInteger + (Asc(Mid(lcAlpha, n, 1)) - 64) * 26 ^ (Len(lcAlpha) - n)
       Next
  End Function
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 27.09.2011, 18:16   #6
Bape}l{ka
Форумчанин
 
Аватар для Bape}l{ka
 
Регистрация: 25.05.2011
Сообщений: 249
По умолчанию

спасибо большое всем!!

особенно меня впечатлил перевод из цифр в буквы:
Код:
MsgBox Split(Cells(1, 6).Address, "$")(1) 'перевод 6 столбца
Bape}l{ka вне форума Ответить с цитированием
Старый 27.09.2011, 21:38   #7
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Добавил перевод из букв в цифры в той же теме:
http://www.planetaexcel.ru/forum.php?thread_id=19063
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 28.09.2011, 14:45   #8
Bape}l{ka
Форумчанин
 
Аватар для Bape}l{ka
 
Регистрация: 25.05.2011
Сообщений: 249
По умолчанию

и перевод из букв в цифры =ь :

Код:
MsgBox Columns("A").Column
для меня актуально вместо "А" ставить Textbox.Value

все гениальное - просто Т_Т
Bape}l{ka вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перевод целого числа из 5 в 8 систему счисления и обратно. Whitt Помощь студентам 7 08.09.2010 07:14
Перевод из строки в число и обратно AsmBeginer Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 10 22.05.2010 18:49
Visual c++ перевод из textBox в инт и обратно Solncelikiy Visual C++ 9 08.10.2009 16:26