Как получить имя столбца по полному адресу ячейки?

Программирование на Visual Basic for Applications
starkee
Новичок
Новичок
Аватара пользователя
 
Сообщения: 25
Зарегистрирован: 13.11.2007 (Вт) 14:56
Откуда: Ростов-на-Дону

Как получить имя столбца по полному адресу ячейки?

Сообщение starkee » 27.02.2008 (Ср) 16:38

Я хочу группировать определенные столбцы, но заранее не знаю какие. Делаю это так:
Код: Выделить всё
Columns(rang).Select
Selection.Columns.Group

Вся сложность в получении этого "rang", т.к. В "Columns" в скобках можно указывать только имя столбцов (номера нельзя), т.е. например:
Код: Выделить всё
Columns("I:O").Select


В чем смысл вопроса - как мне указать для группировки имена столбцов, если мне известы их номера и полный адрес? Сейчас я делаю это таким сложным способом:
Код: Выделить всё
rang = "I:" & Left(Range(Cells(6, j), Cells(6, j )).Address(False, False), 1)

j- это переменная найденная до этого в коде, которая находит признак конца для группировки. при этом предполагаю, что имя будет из 1го символа состоять...., т.е. не дальше "Z"..

еще раз повторяю вопрос:
Как мне получить имя столбца, если я знаю его номер, ну и вообще могу получить полный адрес ячейки?

Заранее благодарю

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 27.02.2008 (Ср) 18:31

Range(Cells(1, i), Cells(1, j)).Group :?:
Быть... или не быть. Вот. В чём вопрос?

Pavel55
Обычный пользователь
Обычный пользователь
 
Сообщения: 90
Зарегистрирован: 27.10.2006 (Пт) 20:11

Сообщение Pavel55 » 27.02.2008 (Ср) 19:54

Код: Выделить всё
Sub Макрос1()
    MsgBox ConvertColumnNumberToLetter(30)
End Sub


Код: Выделить всё
Private Function ConvertColumnNumberToLetter(ByVal ColumnNumber As Integer)
Dim IntegerResult!, FractionalResult!, Remainder!, FirstLetter$, SecondLetter$
    IntegerResult = ColumnNumber \ 26
    FractionalResult = (ColumnNumber / 26) - IntegerResult
    Remainder = ColumnNumber Mod 26
    If IntegerResult = 0 Then
        FirstLetter = ""
    ElseIf IntegerResult = 1 And FractionalResult = 0 Then
        FirstLetter = ""
        ConvertColumnNumberToLetter = "Z"
        Exit Function
    ElseIf IntegerResult > 1 And FractionalResult = 0 Then
        FirstLetter = Chr(64 + (IntegerResult - 1))
        ConvertColumnNumberToLetter = FirstLetter & "Z"
        Exit Function
    Else
        FirstLetter = Chr(64 + IntegerResult)
    End If
    SecondLetter = Chr(64 + Remainder)
    ConvertColumnNumberToLetter = FirstLetter & SecondLetter
End Function

starkee
Новичок
Новичок
Аватара пользователя
 
Сообщения: 25
Зарегистрирован: 13.11.2007 (Вт) 14:56
Откуда: Ростов-на-Дону

Сообщение starkee » 28.02.2008 (Чт) 16:00

Спасибо всем за помощь! Буду использовать способ, подсказанный uhm, но Pavel55, конечно жжот. очень прикольная функция...

Pavel55
Обычный пользователь
Обычный пользователь
 
Сообщения: 90
Зарегистрирован: 27.10.2006 (Пт) 20:11

Сообщение Pavel55 » 28.02.2008 (Чт) 18:12

)) нашёл где-то на форумах )) Вот обратная функция

Функция конвертирующая название столбца в число (например, Столбец AZ = 52)

Код: Выделить всё
Private Function ConvLtrToNum(ByVal LtrIn As String) As Integer
    Dim TempChar As String
    Dim TempNum As Integer
    Dim NumArray() As Integer
    Dim NumString$, HighPower&, i&
    TempChar = ""
    TempNum = 0
    LtrIn = UCase(LtrIn)
    For i = 1 To Len(LtrIn)
        NumString = ""
        TempChar = Mid(LtrIn, i, 1)
        ReDim Preserve NumArray(i)
        NumArray(i) = Asc(TempChar) - 64
    Next
    HighPower = UBound(NumArray()) - 1
    For i = 1 To UBound(NumArray())
        TempNum = TempNum + (NumArray(i) * (26 ^ HighPower))
        HighPower = HighPower - 1
    Next
    ConvLtrToNum = TempNum
End Function

Nitrolis
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 30.01.2007 (Вт) 18:48

Re: Как получить имя столбца по полному адресу ячейки?

Сообщение Nitrolis » 29.02.2008 (Пт) 0:11

starkee писал(а):Я хочу группировать определенные столбцы, но заранее не знаю какие. Делаю это так:
Код: Выделить всё
Columns(rang).Select
Selection.Columns.Group

Вся сложность в получении этого "rang", т.к. В "Columns" в скобках можно указывать только имя столбцов (номера нельзя)

...не понятно, почему по номеру нельзя???

Код: Выделить всё
Range(Columns(1), Columns(3)).Columns.Group

starkee
Новичок
Новичок
Аватара пользователя
 
Сообщения: 25
Зарегистрирован: 13.11.2007 (Вт) 14:56
Откуда: Ростов-на-Дону

Сообщение starkee » 29.02.2008 (Пт) 17:00

:oops: ну теперь знаю, что по номеру можно... просто во всех этих толмутах по VBA не описывают такие мелочи, как "группировка столбцов"... а я, не долго думая, нажала на "запись макроса", сгруппировала столбцы и посмотрела какой код он мне выдал....а там по названию именно.... я потом искала как получить именно имя, но такого свойства ни у Range, ни у Column не нашла... такие дела :) всех благодарю за участие в моей проблеме :D


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

    TopList