как в Екселе получить букву текущего столбца?

Программирование на Visual Basic for Applications
compositum
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 18
Зарегистрирован: 07.05.2006 (Вс) 15:23
Откуда: Санкт-Петербург

как в Екселе получить букву текущего столбца?

Сообщение compositum » 11.05.2006 (Чт) 12:31

как в Екселе получить букву текущего столбца?
Perfice te.

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 11.05.2006 (Чт) 12:36

select case activecell.column
case 1: sColumn = "A"
case 2: sColumn = "B"
...
case 256: sColumn = "IV"
end select

$€rg
Обычный пользователь
Обычный пользователь
 
Сообщения: 99
Зарегистрирован: 11.01.2006 (Ср) 10:15
Откуда: Санкт-Петербург

Сообщение $€rg » 11.05.2006 (Чт) 12:46

может не надо получать букву то,
2Nicky, case256 это жэсть
процесс печатания программного кода укрепляет моральные устои С. Каммингс VBA4Dummies
:study:

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Сообщение Avtopic » 11.05.2006 (Чт) 12:46

Далеко его послали. :)
Доставай если так хочется мучиться, из адреса текущей ячейки
Чем перебирать его в таком длинном select case
В первие встречаю случаю, когда, хорошо что количество столбцов ограничено в 256 а не 65000 :)

To compositum
Что-то мне твоя птичка знакома.

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

Сообщение uhm » 11.05.2006 (Чт) 12:48

Извратный способ:

s=Replace$(Left$(ActiveCell.Address(ColumnAbsolute:=False), 2), "$", "")


ЗЫ А гифы я лучше обрабатываю :P
Быть... или не быть. Вот. В чём вопрос?

compositum
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 18
Зарегистрирован: 07.05.2006 (Вс) 15:23
Откуда: Санкт-Петербург

Сообщение compositum » 11.05.2006 (Чт) 12:58

насчет CASE - мне будет проще застрелиться... а извратный способ.... щас гляну... =)
Perfice te.

compositum
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 18
Зарегистрирован: 07.05.2006 (Вс) 15:23
Откуда: Санкт-Петербург

Сообщение compositum » 11.05.2006 (Чт) 12:59

а специальной функции нет? как-то не верится... =) неужели такую элементарную вещь в ВБА не предусмотрели???
Perfice te.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 11.05.2006 (Чт) 13:11

Самописная есть, пишется за 10 минут.
Lasciate ogni speranza, voi ch'entrate.

compositum
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 18
Зарегистрирован: 07.05.2006 (Вс) 15:23
Откуда: Санкт-Петербург

Сообщение compositum » 11.05.2006 (Чт) 13:15

спасибо за "конкретный" ответ...
Perfice te.

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Сообщение Avtopic » 11.05.2006 (Чт) 13:16

compositum писал(а):а специальной функции нет? как-то не верится... =) неужели такую элементарную вещь в ВБА не предусмотрели???
Вы напишите, для чего эта буква нужно вам и я 90% уверен,
что будет ясно, что правильно сделали, что не предусмотрели.
Я в том смысле, это не такая важная функция чтобы его
поставлять в готовом виде.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 11.05.2006 (Чт) 13:17

Попробуй поискать по vbskb num.
Lasciate ogni speranza, voi ch'entrate.

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 11.05.2006 (Чт) 13:29

Код: Выделить всё
Function GetColumnName(lCol As Long) As String
  Dim lColDiv As Long, lColMod As Long, sColumn As String
 
  lColDiv = lCol \ 26
  lColMod = lCol Mod 26
  If lColMod = 0 Then lColDiv = lColDiv - 1: lColMod = 26
  GetColumnName = IIf(lColDiv > 0, Chr(Asc("A") + lColDiv - 1), "") & Chr(Asc("A") + lColMod - 1)
End Function


О!
Код: Выделить всё
MsgBox Replace$(Mid$(ActiveCell.Address, 2, 2), "$", "")

Блин, это ж uhm'а код...
Последний раз редактировалось Nicky 11.05.2006 (Чт) 14:47, всего редактировалось 3 раз(а).

Annushka
Обычный пользователь
Обычный пользователь
 
Сообщения: 81
Зарегистрирован: 17.05.2005 (Вт) 12:44
Откуда: Украина

Сообщение Annushka » 11.05.2006 (Чт) 14:20

compositum писал(а):а специальной функции нет? как-то не верится... =) неужели такую элементарную вещь в ВБА не предусмотрели???


А чем это не элементарно?
Код: Выделить всё
Mid(ActiveCell.Address, 2, InStrRev(ActiveCell.Address, "$") - 2)

И почему не подходит просто номер столбца?
Код: Выделить всё
ActiveCell.Column

ZlydenGL
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 148
Зарегистрирован: 13.08.2004 (Пт) 10:02

Сообщение ZlydenGL » 22.08.2006 (Вт) 15:09

Вопрос посложнее - как получить букву ПРОИЗВОЛЬНОГО столбца?

Самописная процедура в общем-то невелика:

Код: Выделить всё
Function GetColLetter(ColNum As Integer) As String
Dim temp as Byte
If ColNum < 27 Then
    GetColLetter = Chr(64 + ColNum)
Else
    temp = Int(ColNum / 26)
    GetColLetter = Chr(64 + temp) & Chr(64 + ColNum - temp * 26)
End If
End Function


Но может есть что штатное? :)
Покой нам только снится!!! И то редко. Поскольку нет в мире совершенства, а есть только стремление к оному.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 22.08.2006 (Вт) 21:15

Не могу представить ни одной ситуации, когда могло бы понадобиться узнавать букву столбца.
Но, к примеру, columns(55).address(false,false,xla1)
Но тебе это на самом деле не нужно, т.к. ты наверняка делаешь всё неправильно, раз понадобилась буква...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 22.08.2006 (Вт) 22:37

ZlydenGL писал(а):Вопрос посложнее - как получить букву ПРОИЗВОЛЬНОГО столбца?...

Вылей воду из чайника ;)

KL
Microsoft MVP
 
Сообщения: 483
Зарегистрирован: 30.10.2005 (Вс) 0:31
Откуда: Madrid

Сообщение KL » 29.08.2006 (Вт) 20:56

еще вариант:

Split(ActiveCell.Address,"$")(1)
Привет,
KL

ZlydenGL
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 148
Зарегистрирован: 13.08.2004 (Пт) 10:02

Сообщение ZlydenGL » 01.12.2006 (Пт) 17:18

GSerg, Nicky, зря вы так... Нужен пример ситуации, когда нужно получить букву произвольного столбца? Запросто!

Есть здоровенная матрица MxN, где N - число колонок - стремительно приближается к 200. M ПОКА не превышает 100, но в будущем их будет ой-ой-ой сколько. Есть макрос, который проверяет эту матрицу на наличие определенных ячеек (0 или значение, отличающееся от диапазона). Пользователя надо как-то оповестить, в каком именно столбце есть такая бага.

Какие варианты? Условное форматирование? Неудобно на таком большом количестве столбцов. Трехэтажную формулу, чтобы закрашивать допустим заголовки столбцов и строк? Тоже неудобно. Да и нужна вся эта шняга только ИНФОРМАТИВНО, чтоб юзверь САМ СЕБЯ проверил, что он не наоставлял таких значений - соответственно реализовать это автопереходом на соответствующую ячейку будет неудобно.

Согласен, ситуевина далека от идеальной... Но клиент требует именно такого функционала, а он как известно всегда прав!

Так что за columns(J).address(false,false,xla1) - ОГРОМНОЕ ЧЕЛОВЕЧЕСКОЕ СПАСИБО ;)
Покой нам только снится!!! И то редко. Поскольку нет в мире совершенства, а есть только стремление к оному.

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

Сообщение Pavel55 » 01.12.2006 (Пт) 23:26

А я пользуюсь этим
Код: Выделить всё
'узнаем название столбца (например, М)
ColName$ = Left(ActiveCell.AddressLocal(True, False, xlA1), _
InStr(1, ActiveCell.AddressLocal(True, False, xlA1), "$") - 1)
Msgbox ColName$

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Сообщение Avtopic » 02.12.2006 (Сб) 14:42

И, в каких целях ты используешь полученный результат?

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

Сообщение Pavel55 » 03.12.2006 (Вс) 1:09

Avtopic, вы просто "бывалый" программыст VBA, а я только "начинающий" ( Поэтому я пока использую это в своих процедурах, но обещаю со временим уходить от этого )

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Сообщение Avtopic » 03.12.2006 (Вс) 14:00

Не надо обижаться. До моего ответа два раза было написано что, это дурная затея искать алфавитное обозначение столбца,
это значит, что выбран не совсем хороший (или совсем нехороший) путь, обращения столбцами.
Range и F1 предлагают очень много вариантов для этого.

ZlydenGL
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 148
Зарегистрирован: 13.08.2004 (Пт) 10:02

Сообщение ZlydenGL » 05.12.2006 (Вт) 16:41

Avtopic писал(а):До моего ответа два раза было написано что, это дурная затея искать алфавитное обозначение столбца,
это значит, что выбран не совсем хороший (или совсем нехороший) путь, обращения столбцами.
Range и F1 предлагают очень много вариантов для этого.

Сколько пафоса... А реальных идей нет. На ситуацию, описанную в моем посте, что ответишь?
Покой нам только снится!!! И то редко. Поскольку нет в мире совершенства, а есть только стремление к оному.

Krasnaja Shapka
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 87
Зарегистрирован: 26.10.2006 (Чт) 12:13
Откуда: Киев

Сообщение Krasnaja Shapka » 07.12.2006 (Чт) 11:31

ZlydenGL писал(а):На ситуацию, описанную в моем посте, что ответишь?

ситуация немного за уши притянута...

во-первых, если бага есть в определенных ячейках, то и юзеру надо сообщить список ячеек (а не столбцов) с багами..
во-вторых, если уж очень нужно показать столбик (например там сумма значений ячеек неправильная), то его можно селектом выделить и показать юзеру - просто прокрутить на экране таблицу и остановиться около нужного столбца... помоему очень будет эффектно :)
Если ясность вашего объяснения исключает ложное толкование, все равно кто-то поймет вас неправильно.

ZlydenGL
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 148
Зарегистрирован: 13.08.2004 (Пт) 10:02

Сообщение ZlydenGL » 07.12.2006 (Чт) 15:31

Krasnaja Shapka, даже комментировать не буду. Есть задача, которую поставил КЛИЕНТ. ЕМУ это надо. Здесь описана только часть глобальной задачи (которую я естессно не буду описывать - слишком много времени потребуется), но как функциональная часть нужна именна та штука, что я описывал выше.
Покой нам только снится!!! И то редко. Поскольку нет в мире совершенства, а есть только стремление к оному.


Вернуться в VBA

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

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

    TopList