Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Изменить обращение к колонке на название - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Изменить обращение к колонке на название (Макросы/Sub)
Изменить обращение к колонке на название
Oh_Nick Дата: Среда, 13.09.2023, 22:38 | Сообщение № 1
Группа: Проверенные
Ранг: Обитатель
Сообщений: 445
Репутация: 8 ±
Замечаний: 20% ±

Excel 2019
Всем доброго времени суток!

В приложенном файле необходимо скорректировать ссылку на колонки.

[vba]
Код

Sub Подбор_КФ1305()
'
' Подбор_КФ1305
'
' Сочетание клавиш:
'

    Dim lr As Long, i As Long
   
   
    ' Поиск последней строки в столбце N.
        ' End не ищет в скрытых строках.
    lr = Cells(Rows.Count, "AO").End(xlUp).Row
    On Error Resume Next
   
    ' Подбор значений.
     
    For i = 2 To lr
    ' от 10000 руб - суммы до N - суммы
        If Cells(i, "AY") > 10000 Then
            Cells(i, "BA").GoalSeek Goal:=0.21, ChangingCell:=Cells(i, "AO")
    ' от 7000 рублей - суммы до 10000 рублей
        ElseIf Cells(i, "AY") > 7000 Then
            Cells(i, "BA").GoalSeek Goal:=0.23, ChangingCell:=Cells(i, "AO")
    ' от 3000 рублей - суммы до 7000 рублей
        ElseIf Cells(i, "AY") > 3000 Then
            Cells(i, "BA").GoalSeek Goal:=0.25, ChangingCell:=Cells(i, "AO")
    ' от 1500 рублей - суммы до 3000 рублей
        ElseIf Cells(i, "AY") > 1500 Then
            Cells(i, "BA").GoalSeek Goal:=0.26, ChangingCell:=Cells(i, "AO")
    ' от 550 рублей - суммы до 1500 рублей
        ElseIf Cells(i, "AY") > 550 Then
            Cells(i, "BA").GoalSeek Goal:=0.27, ChangingCell:=Cells(i, "AO")
    ' от 150 рублей - суммы до 550 рублей
        ElseIf Cells(i, "AY") > 150 Then
            Cells(i, "BA").GoalSeek Goal:=0.3, ChangingCell:=Cells(i, "AO")
        Else
    ' !! ВСЕ ЧТО НЕ ВОШЛО В ЭТИ Диапазон
            Cells(i, "BA").GoalSeek Goal:=0.5, ChangingCell:=Cells(i, "AO")
        End If
    Next i

End Sub
[/vba]

Здесь AO нужно поменять на Текущая цена (со скидкой), руб.. Потому что бывает , что выгружаешь и меняет местами колонки и я думаю привязаться к названию колонки.

А здесь:

[vba]
Код
Sub Рентабельность1305()
'
' Рентабельность1305
'
' Сочетание клавиш:
'

    Dim lr As Long, i As Long
   
   
    ' Поиск последней строки в столбце N.
        ' End не ищет в скрытых строках.
    lr = Cells(Rows.Count, "AM").End(xlUp).Row
    On Error Resume Next
   
    ' Подбор значений.
     
    For i = 2 To lr
    ' от 10000 руб - суммы до N - суммы
        If Cells(i, "AW") > 10000 Then
            Cells(i, "AZ").GoalSeek Goal:=0.3, ChangingCell:=Cells(i, "AM")
    ' от 7000 рублей - суммы до 10000 рублей
        ElseIf Cells(i, "AW") > 7000 Then
            Cells(i, "AZ").GoalSeek Goal:=0.3, ChangingCell:=Cells(i, "AM")
    ' от 3000 рублей - суммы до 7000 рублей
        ElseIf Cells(i, "AW") > 3000 Then
            Cells(i, "AZ").GoalSeek Goal:=0.3, ChangingCell:=Cells(i, "AM")
    ' от 1500 рублей - суммы до 3000 рублей
        ElseIf Cells(i, "AW") > 1500 Then
            Cells(i, "AZ").GoalSeek Goal:=0.3, ChangingCell:=Cells(i, "AM")
    ' от 550 рублей - суммы до 1500 рублей
        ElseIf Cells(i, "AW") > 550 Then
            Cells(i, "AZ").GoalSeek Goal:=0.3, ChangingCell:=Cells(i, "AM")
    ' от 150 рублей - суммы до 550 рублей
        ElseIf Cells(i, "AW") > 150 Then
            Cells(i, "AZ").GoalSeek Goal:=0.3, ChangingCell:=Cells(i, "AM")
        Else
    ' !! ВСЕ ЧТО НЕ ВОШЛО В ЭТИ Диапазон
            Cells(i, "AZ").GoalSeek Goal:=0.3, ChangingCell:=Cells(i, "AM")
        End If
    Next i

End Sub
[/vba]

AM поменять на Последняя миля, FBS
К сообщению приложен файл: detskij24.xlsm (439.6 Kb)
 
Ответить
СообщениеВсем доброго времени суток!

В приложенном файле необходимо скорректировать ссылку на колонки.

[vba]
Код

Sub Подбор_КФ1305()
'
' Подбор_КФ1305
'
' Сочетание клавиш:
'

    Dim lr As Long, i As Long
   
   
    ' Поиск последней строки в столбце N.
        ' End не ищет в скрытых строках.
    lr = Cells(Rows.Count, "AO").End(xlUp).Row
    On Error Resume Next
   
    ' Подбор значений.
     
    For i = 2 To lr
    ' от 10000 руб - суммы до N - суммы
        If Cells(i, "AY") > 10000 Then
            Cells(i, "BA").GoalSeek Goal:=0.21, ChangingCell:=Cells(i, "AO")
    ' от 7000 рублей - суммы до 10000 рублей
        ElseIf Cells(i, "AY") > 7000 Then
            Cells(i, "BA").GoalSeek Goal:=0.23, ChangingCell:=Cells(i, "AO")
    ' от 3000 рублей - суммы до 7000 рублей
        ElseIf Cells(i, "AY") > 3000 Then
            Cells(i, "BA").GoalSeek Goal:=0.25, ChangingCell:=Cells(i, "AO")
    ' от 1500 рублей - суммы до 3000 рублей
        ElseIf Cells(i, "AY") > 1500 Then
            Cells(i, "BA").GoalSeek Goal:=0.26, ChangingCell:=Cells(i, "AO")
    ' от 550 рублей - суммы до 1500 рублей
        ElseIf Cells(i, "AY") > 550 Then
            Cells(i, "BA").GoalSeek Goal:=0.27, ChangingCell:=Cells(i, "AO")
    ' от 150 рублей - суммы до 550 рублей
        ElseIf Cells(i, "AY") > 150 Then
            Cells(i, "BA").GoalSeek Goal:=0.3, ChangingCell:=Cells(i, "AO")
        Else
    ' !! ВСЕ ЧТО НЕ ВОШЛО В ЭТИ Диапазон
            Cells(i, "BA").GoalSeek Goal:=0.5, ChangingCell:=Cells(i, "AO")
        End If
    Next i

End Sub
[/vba]

Здесь AO нужно поменять на Текущая цена (со скидкой), руб.. Потому что бывает , что выгружаешь и меняет местами колонки и я думаю привязаться к названию колонки.

А здесь:

[vba]
Код
Sub Рентабельность1305()
'
' Рентабельность1305
'
' Сочетание клавиш:
'

    Dim lr As Long, i As Long
   
   
    ' Поиск последней строки в столбце N.
        ' End не ищет в скрытых строках.
    lr = Cells(Rows.Count, "AM").End(xlUp).Row
    On Error Resume Next
   
    ' Подбор значений.
     
    For i = 2 To lr
    ' от 10000 руб - суммы до N - суммы
        If Cells(i, "AW") > 10000 Then
            Cells(i, "AZ").GoalSeek Goal:=0.3, ChangingCell:=Cells(i, "AM")
    ' от 7000 рублей - суммы до 10000 рублей
        ElseIf Cells(i, "AW") > 7000 Then
            Cells(i, "AZ").GoalSeek Goal:=0.3, ChangingCell:=Cells(i, "AM")
    ' от 3000 рублей - суммы до 7000 рублей
        ElseIf Cells(i, "AW") > 3000 Then
            Cells(i, "AZ").GoalSeek Goal:=0.3, ChangingCell:=Cells(i, "AM")
    ' от 1500 рублей - суммы до 3000 рублей
        ElseIf Cells(i, "AW") > 1500 Then
            Cells(i, "AZ").GoalSeek Goal:=0.3, ChangingCell:=Cells(i, "AM")
    ' от 550 рублей - суммы до 1500 рублей
        ElseIf Cells(i, "AW") > 550 Then
            Cells(i, "AZ").GoalSeek Goal:=0.3, ChangingCell:=Cells(i, "AM")
    ' от 150 рублей - суммы до 550 рублей
        ElseIf Cells(i, "AW") > 150 Then
            Cells(i, "AZ").GoalSeek Goal:=0.3, ChangingCell:=Cells(i, "AM")
        Else
    ' !! ВСЕ ЧТО НЕ ВОШЛО В ЭТИ Диапазон
            Cells(i, "AZ").GoalSeek Goal:=0.3, ChangingCell:=Cells(i, "AM")
        End If
    Next i

End Sub
[/vba]

AM поменять на Последняя миля, FBS

Автор - Oh_Nick
Дата добавления - 13.09.2023 в 22:38
Gustav Дата: Среда, 13.09.2023, 23:41 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2732
Репутация: 1136 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
Порядок действий по улучшайзингу предлагается следующий. Создаем функцию с максимально коротким (для удобства) идентификатором, пусть "cn". Будет означать что-то типа "сolumn number" или "сolumn name". Функция будет вычислять номер колонки ("number") по ее названию в третьей строке листа "Товары и цены". В качестве параметра функции можно задавать как полное, так и неполное (но с достаточным для однозначной идентификации количеством начальных символов слева) название колонки. Функцию следует поместить в общий модуль (не в модуль листа). Вот ее незамысловатый текст:
[vba]
Код
Function cn(ByVal colName As String) As Integer
    Dim rng As Range
    Set rng = Worksheets("Товары и цены").Range("3:3")
    cn = WorksheetFunction.Match(colName & "*", rng, 0)
End Function
[/vba]
А вот примеры вызова:
[vba]
Код
? Cells(10, cn("Текущая цена (со скидкой), руб.")).Address
$I$10
? Cells(10, cn("Текущая цена (со скидкой)")).Address
$I$10
? Cells(10, cn("Текущая цена")).Address
$I$10
[/vba]
При сокращенном названии главное следить за тем, чтобы "попадать" на нужную колонку. Три вызова Cells выше адресуются к одной и той же ячейке, что есть хорошо.


МОИ: Ник, Tip box: 41001663842605
 
Ответить
СообщениеПорядок действий по улучшайзингу предлагается следующий. Создаем функцию с максимально коротким (для удобства) идентификатором, пусть "cn". Будет означать что-то типа "сolumn number" или "сolumn name". Функция будет вычислять номер колонки ("number") по ее названию в третьей строке листа "Товары и цены". В качестве параметра функции можно задавать как полное, так и неполное (но с достаточным для однозначной идентификации количеством начальных символов слева) название колонки. Функцию следует поместить в общий модуль (не в модуль листа). Вот ее незамысловатый текст:
[vba]
Код
Function cn(ByVal colName As String) As Integer
    Dim rng As Range
    Set rng = Worksheets("Товары и цены").Range("3:3")
    cn = WorksheetFunction.Match(colName & "*", rng, 0)
End Function
[/vba]
А вот примеры вызова:
[vba]
Код
? Cells(10, cn("Текущая цена (со скидкой), руб.")).Address
$I$10
? Cells(10, cn("Текущая цена (со скидкой)")).Address
$I$10
? Cells(10, cn("Текущая цена")).Address
$I$10
[/vba]
При сокращенном названии главное следить за тем, чтобы "попадать" на нужную колонку. Три вызова Cells выше адресуются к одной и той же ячейке, что есть хорошо.

Автор - Gustav
Дата добавления - 13.09.2023 в 23:41
Oh_Nick Дата: Четверг, 14.09.2023, 00:13 | Сообщение № 3
Группа: Проверенные
Ранг: Обитатель
Сообщений: 445
Репутация: 8 ±
Замечаний: 20% ±

Excel 2019
Gustav, можете в файл прописать это, пожалуйста
 
Ответить
СообщениеGustav, можете в файл прописать это, пожалуйста

Автор - Oh_Nick
Дата добавления - 14.09.2023 в 00:13
Gustav Дата: Четверг, 14.09.2023, 01:35 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2732
Репутация: 1136 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
Ну, могу...
К сообщению приложен файл: 0969972.xlsm (442.2 Kb)


МОИ: Ник, Tip box: 41001663842605
 
Ответить
СообщениеНу, могу...

Автор - Gustav
Дата добавления - 14.09.2023 в 01:35
Oh_Nick Дата: Четверг, 14.09.2023, 12:49 | Сообщение № 5
Группа: Проверенные
Ранг: Обитатель
Сообщений: 445
Репутация: 8 ±
Замечаний: 20% ±

Excel 2019
Gustav, можно вас еще попросить, пожалуйста, также сделать для остальных все таки. Они оказываются тоже могут двигаться.

AY заменить на Закуп, BA заменить на КФ, AW заменить на Налог, AZ заменить на Заработал
 
Ответить
СообщениеGustav, можно вас еще попросить, пожалуйста, также сделать для остальных все таки. Они оказываются тоже могут двигаться.

AY заменить на Закуп, BA заменить на КФ, AW заменить на Налог, AZ заменить на Заработал

Автор - Oh_Nick
Дата добавления - 14.09.2023 в 12:49
Gustav Дата: Четверг, 14.09.2023, 14:10 | Сообщение № 6
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2732
Репутация: 1136 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
Ой йо! Да ну откуда же такое неверие в собственные силы?! Сделал, с некоторой оптимизацией в плане заведения отдельных переменных для номеров колонок, с вычислением их значений в начале процедуры. А то дёргать функцию cn на каждый встретившийся Cells - дорогое удовольствие!
К сообщению приложен файл: 4486867.xlsm (444.6 Kb)


МОИ: Ник, Tip box: 41001663842605
 
Ответить
СообщениеОй йо! Да ну откуда же такое неверие в собственные силы?! Сделал, с некоторой оптимизацией в плане заведения отдельных переменных для номеров колонок, с вычислением их значений в начале процедуры. А то дёргать функцию cn на каждый встретившийся Cells - дорогое удовольствие!

Автор - Gustav
Дата добавления - 14.09.2023 в 14:10
Oh_Nick Дата: Четверг, 14.09.2023, 17:02 | Сообщение № 7
Группа: Проверенные
Ранг: Обитатель
Сообщений: 445
Репутация: 8 ±
Замечаний: 20% ±

Excel 2019
Gustav, огромное спасибо!
 
Ответить
СообщениеGustav, огромное спасибо!

Автор - Oh_Nick
Дата добавления - 14.09.2023 в 17:02
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Изменить обращение к колонке на название (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!