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

Вход

Регистрация

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

 

= Мир MS Excel/формула для combobox - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » формула для combobox (Макросы/Sub)
формула для combobox
lebensvoll Дата: Вторник, 04.10.2016, 14:10 | Сообщение № 1
Группа: Проверенные
Ранг: Ветеран
Сообщений: 645
Репутация: 2 ±
Замечаний: 60% ±

Excel 2010
Добрый день много уважаемые форумчане.
прошу вас вновь о помощи :( !!!
На UserForm имеются combobox(ы) хотел применить к одному combobox(у) одну формулу из прошлых моих тем, вот эту:
Код
=СМЕЩ('пром.итог классов'!$B:$B;ПОИСКПОЗ(E4;'пром.итог классов'!$B:$B;0)-1;1;СЧЁТЕСЛИ('пром.итог классов'!$B:$B;E4))

попробовал ее записать через макрорекордер, получилось вот так вот :

Но прекрасно понимаю что данный макрос сработает лишь для ячейки (при использовании макроса) >( . А как мне данный код применить к combobox(у) на UserForm
Если на UserForm в combobox(е) "8" указали (класс бетона В7,5) то в combobox(е) "11" сработает эта формула которая позволит выбрать из списка нужный продукт???
[img][/img]


Кто бы ты ни был, мир в твоих руках

Сообщение отредактировал lebensvoll - Вторник, 04.10.2016, 14:11
 
Ответить
СообщениеДобрый день много уважаемые форумчане.
прошу вас вновь о помощи :( !!!
На UserForm имеются combobox(ы) хотел применить к одному combobox(у) одну формулу из прошлых моих тем, вот эту:
Код
=СМЕЩ('пром.итог классов'!$B:$B;ПОИСКПОЗ(E4;'пром.итог классов'!$B:$B;0)-1;1;СЧЁТЕСЛИ('пром.итог классов'!$B:$B;E4))

попробовал ее записать через макрорекордер, получилось вот так вот :

Но прекрасно понимаю что данный макрос сработает лишь для ячейки (при использовании макроса) >( . А как мне данный код применить к combobox(у) на UserForm
Если на UserForm в combobox(е) "8" указали (класс бетона В7,5) то в combobox(е) "11" сработает эта формула которая позволит выбрать из списка нужный продукт???
[img][/img]

Автор - lebensvoll
Дата добавления - 04.10.2016 в 14:10
Karataev Дата: Вторник, 04.10.2016, 14:43 | Сообщение № 2
Группа: Проверенные
Ранг: Ветеран
Сообщений: 727
Репутация: 260 ±
Замечаний: 0% ±

Excel
В VBA есть аналог функций Excel'я - это объект "WorksheetFunction". Этот объект можно использовать для расчета по формулам и не использовать ячейки листа. Но в этом объекте нет функции СМЕЩ (OFFSET), поэтому если Вы хотите использовать именно формульный расчет, то формулу нужно заменить. Могу предложить такой вариант:
Код
=ИНДЕКС(B:C;ПОИСКПОЗ(E4;B:B;0);2):ИНДЕКС(B:C;ПОИСКПОЗ(E4;B:B;0)+СЧЁТЕСЛИ(B:B;E4)-1;2)

Или можно отказаться от формул и сделать расчет макросом. При этом часть кода макроса можно сделать с использованием объекта "WorksheetFunction". Например, можно искать, подсчитывать с помощью функций Excel'я.


 
Ответить
СообщениеВ VBA есть аналог функций Excel'я - это объект "WorksheetFunction". Этот объект можно использовать для расчета по формулам и не использовать ячейки листа. Но в этом объекте нет функции СМЕЩ (OFFSET), поэтому если Вы хотите использовать именно формульный расчет, то формулу нужно заменить. Могу предложить такой вариант:
Код
=ИНДЕКС(B:C;ПОИСКПОЗ(E4;B:B;0);2):ИНДЕКС(B:C;ПОИСКПОЗ(E4;B:B;0)+СЧЁТЕСЛИ(B:B;E4)-1;2)

Или можно отказаться от формул и сделать расчет макросом. При этом часть кода макроса можно сделать с использованием объекта "WorksheetFunction". Например, можно искать, подсчитывать с помощью функций Excel'я.

Автор - Karataev
Дата добавления - 04.10.2016 в 14:43
lebensvoll Дата: Вторник, 04.10.2016, 15:19 | Сообщение № 3
Группа: Проверенные
Ранг: Ветеран
Сообщений: 645
Репутация: 2 ±
Замечаний: 60% ±

Excel 2010
Karataev, так в том то и дело что формульный расчет тут ну ни как не применим (((( потому как нужно именно макросом.
Цитата
Если на UserForm в combobox(е) "8" указали (класс бетона В7,5) то в combobox(е) "11"

нужно чтоб сработал именно код для отображения списка в combobox(е) "11"
должно быть как то так (см.Файл в ячейках F а также J) только лишь на самой форме в приложенном скрине (сообщение №1)
[p.s.]Karataev, сейчас попробую предложенный вами вариант решения, если получится[/p.s.]
К сообщению приложен файл: ____2016.xlsx(36Kb)


Кто бы ты ни был, мир в твоих руках

Сообщение отредактировал lebensvoll - Вторник, 04.10.2016, 15:29
 
Ответить
СообщениеKarataev, так в том то и дело что формульный расчет тут ну ни как не применим (((( потому как нужно именно макросом.
Цитата
Если на UserForm в combobox(е) "8" указали (класс бетона В7,5) то в combobox(е) "11"

нужно чтоб сработал именно код для отображения списка в combobox(е) "11"
должно быть как то так (см.Файл в ячейках F а также J) только лишь на самой форме в приложенном скрине (сообщение №1)
[p.s.]Karataev, сейчас попробую предложенный вами вариант решения, если получится[/p.s.]

Автор - lebensvoll
Дата добавления - 04.10.2016 в 15:19
Karataev Дата: Вторник, 04.10.2016, 15:27 | Сообщение № 4
Группа: Проверенные
Ранг: Ветеран
Сообщений: 727
Репутация: 260 ±
Замечаний: 0% ±

Excel
формульный расчет тут ну ни как не применим

Но объект "WorksheetFunction" аналог формульного расчета. Если заменить функцию СМЕЩ на ИНДЕКС, то можно попробовать сделать только с помощью функций Excel, используя объект "WorksheetFunction".


 
Ответить
Сообщение
формульный расчет тут ну ни как не применим

Но объект "WorksheetFunction" аналог формульного расчета. Если заменить функцию СМЕЩ на ИНДЕКС, то можно попробовать сделать только с помощью функций Excel, используя объект "WorksheetFunction".

Автор - Karataev
Дата добавления - 04.10.2016 в 15:27
_Boroda_ Дата: Вторник, 04.10.2016, 16:24 | Сообщение № 5
Группа: Модераторы
Ранг: Экселист
Сообщений: 9828
Репутация: 4151 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
У Вас в файлах вообще Комбобоксов нет. Формы тоже. В
см.Файл в ячейках F а также J
обычные выпадающие списки.
С комбобоксами вот так можно
[vba]
Код
    With Sheets("пром.итог классов")
        On Error Resume Next
        a_ = Range("E4")
        r_ = WorksheetFunction.Match(a_, .Range("B:B"), 0)
        n_ = WorksheetFunction.CountIf(.Range("B:B"), a_) - 1
        ActiveSheet.ComboBox1.ListFillRange = "'" & .Name & "'!" & .Range("B" & r_).Resize(n_).Address
    End With
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеУ Вас в файлах вообще Комбобоксов нет. Формы тоже. В
см.Файл в ячейках F а также J
обычные выпадающие списки.
С комбобоксами вот так можно
[vba]
Код
    With Sheets("пром.итог классов")
        On Error Resume Next
        a_ = Range("E4")
        r_ = WorksheetFunction.Match(a_, .Range("B:B"), 0)
        n_ = WorksheetFunction.CountIf(.Range("B:B"), a_) - 1
        ActiveSheet.ComboBox1.ListFillRange = "'" & .Name & "'!" & .Range("B" & r_).Resize(n_).Address
    End With
[/vba]

Автор - _Boroda_
Дата добавления - 04.10.2016 в 16:24
Udik Дата: Вторник, 04.10.2016, 16:29 | Сообщение № 6
Группа: Друзья
Ранг: Старожил
Сообщений: 1298
Репутация: 161 ±
Замечаний: 0% ±

Excel 2013
я вообще понял, что нужно нечто вроде
[vba]
Код

Option Explicit

Private Sub ComboBox2_Change()
Dim rowLast As Integer, i%

Me.ComboBox1.Clear

With Worksheets("пром.итог классов")
rowLast = .UsedRange.Rows.Count

For i = 2 To rowLast
If .Cells(i, 1).Value = "" Then Exit For

If .Cells(i, 3).Value = Me.ComboBox2.Value Then
Me.ComboBox1.AddItem .Cells(i, 4).Value

End If
Next i
End With

End Sub

Private Sub UserForm_Initialize()
Dim oDict
Dim rowLast As Integer, i%

Set oDict = CreateObject("Scripting.Dictionary")
oDict.CompareMode = 1
Me.ComboBox2.Clear
With Worksheets("пром.итог классов")
rowLast = .UsedRange.Rows.Count

For i = 2 To rowLast
If .Cells(i, 1).Value = "" Then Exit For

    If Not oDict.exists(.Cells(i, 3).Value) Then
    oDict.Add .Cells(i, 3).Value, 1
    Me.ComboBox2.AddItem .Cells(i, 3).Value
    End If
Next i

End With
End Sub

[/vba]
К сообщению приложен файл: 7989230.xlsm(45Kb)


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com


Сообщение отредактировал Udik - Вторник, 04.10.2016, 16:31
 
Ответить
Сообщениея вообще понял, что нужно нечто вроде
[vba]
Код

Option Explicit

Private Sub ComboBox2_Change()
Dim rowLast As Integer, i%

Me.ComboBox1.Clear

With Worksheets("пром.итог классов")
rowLast = .UsedRange.Rows.Count

For i = 2 To rowLast
If .Cells(i, 1).Value = "" Then Exit For

If .Cells(i, 3).Value = Me.ComboBox2.Value Then
Me.ComboBox1.AddItem .Cells(i, 4).Value

End If
Next i
End With

End Sub

Private Sub UserForm_Initialize()
Dim oDict
Dim rowLast As Integer, i%

Set oDict = CreateObject("Scripting.Dictionary")
oDict.CompareMode = 1
Me.ComboBox2.Clear
With Worksheets("пром.итог классов")
rowLast = .UsedRange.Rows.Count

For i = 2 To rowLast
If .Cells(i, 1).Value = "" Then Exit For

    If Not oDict.exists(.Cells(i, 3).Value) Then
    oDict.Add .Cells(i, 3).Value, 1
    Me.ComboBox2.AddItem .Cells(i, 3).Value
    End If
Next i

End With
End Sub

[/vba]

Автор - Udik
Дата добавления - 04.10.2016 в 16:29
lebensvoll Дата: Вторник, 04.10.2016, 16:51 | Сообщение № 7
Группа: Проверенные
Ранг: Ветеран
Сообщений: 645
Репутация: 2 ±
Замечаний: 60% ±

Excel 2010
_Boroda_, Добрый вечер...
Так я файл для примера кинул :'( и там нет Комбобоксов... Я хотел чтоб по аналогии данного примера применить его для другого файла чтоб на ФОРМЕ было подобный способ
Мне даже стыдно показывать пример что я сделал ((((( :'( :'( :'( только не упадите там со стульев :)
[vba]
Код
Private Sub ComboBox11_Change()
   Dim myFormula As Integer
   myFormula = WorksheetFunction.Index(Worksheets("шифры").Range("C2"), Match(ComboBox8, Worksheets("шифры").Range("C2"), 0) * 2): INDEX _<br / <img rel="usm" src="/sml2/angry.gif" border="0" align="absmiddle" alt=">(" /> Worksheets("шифры").Range("C2"),MATCH(ComboBox8,Worksheets("шифры").Range("C2"),0)+COUNTIF(Worksheets("шифры").Range("C2"),ComboBox8)-1,2)
End Sub
[/vba]
:'( :'( :'( :'(
То что куда я это хотел применить вот файл ((((
Но там при копировании почему то перестала открываться сама форма и код ругается (((((
К сообщению приложен файл: 6410417.xlsm(76Kb)


Кто бы ты ни был, мир в твоих руках
 
Ответить
Сообщение_Boroda_, Добрый вечер...
Так я файл для примера кинул :'( и там нет Комбобоксов... Я хотел чтоб по аналогии данного примера применить его для другого файла чтоб на ФОРМЕ было подобный способ
Мне даже стыдно показывать пример что я сделал ((((( :'( :'( :'( только не упадите там со стульев :)
[vba]
Код
Private Sub ComboBox11_Change()
   Dim myFormula As Integer
   myFormula = WorksheetFunction.Index(Worksheets("шифры").Range("C2"), Match(ComboBox8, Worksheets("шифры").Range("C2"), 0) * 2): INDEX _<br / <img rel="usm" src="/sml2/angry.gif" border="0" align="absmiddle" alt=">(" /> Worksheets("шифры").Range("C2"),MATCH(ComboBox8,Worksheets("шифры").Range("C2"),0)+COUNTIF(Worksheets("шифры").Range("C2"),ComboBox8)-1,2)
End Sub
[/vba]
:'( :'( :'( :'(
То что куда я это хотел применить вот файл ((((
Но там при копировании почему то перестала открываться сама форма и код ругается (((((

Автор - lebensvoll
Дата добавления - 04.10.2016 в 16:51
Karataev Дата: Вторник, 04.10.2016, 16:58 | Сообщение № 8
Группа: Проверенные
Ранг: Ветеран
Сообщений: 727
Репутация: 260 ±
Замечаний: 0% ±

Excel
lebensvoll, нужно сразу в Combobox записывать, т.к. формула с индексом вернет массив данных, а не одно значение. Ваша формула со СМЕЩ то же возвращала несколько значений, а не одно. Индекс по такому же принципу. Массив в Combobox записывается так: Combobox.List = массив
И в формуле из поста 7 все функции нужно указывать с использованием объекта "WorksheetFunction". А у Вас где-то с этим объектом, а где-то просто, например:
[vba]
Код
MATCH(ComboBox8,Worksheets("шифры").Range("C2"),0)
[/vba]




Сообщение отредактировал Karataev - Вторник, 04.10.2016, 17:01
 
Ответить
Сообщениеlebensvoll, нужно сразу в Combobox записывать, т.к. формула с индексом вернет массив данных, а не одно значение. Ваша формула со СМЕЩ то же возвращала несколько значений, а не одно. Индекс по такому же принципу. Массив в Combobox записывается так: Combobox.List = массив
И в формуле из поста 7 все функции нужно указывать с использованием объекта "WorksheetFunction". А у Вас где-то с этим объектом, а где-то просто, например:
[vba]
Код
MATCH(ComboBox8,Worksheets("шифры").Range("C2"),0)
[/vba]

Автор - Karataev
Дата добавления - 04.10.2016 в 16:58
Udik Дата: Вторник, 04.10.2016, 17:00 | Сообщение № 9
Группа: Друзья
Ранг: Старожил
Сообщений: 1298
Репутация: 161 ±
Замечаний: 0% ±

Excel 2013
Лучше напишите откуда должны браться Класс и Класс смеси


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com
 
Ответить
СообщениеЛучше напишите откуда должны браться Класс и Класс смеси

Автор - Udik
Дата добавления - 04.10.2016 в 17:00
lebensvoll Дата: Среда, 05.10.2016, 09:43 | Сообщение № 10
Группа: Проверенные
Ранг: Ветеран
Сообщений: 645
Репутация: 2 ±
Замечаний: 60% ±

Excel 2010
Доброе утро всем!!!
Многоуважаемые форумчане прошу меня простить но тему закрываю... ((((((((
Спасибо вам огромнейшее за отклики... Найду ответ на свое решение обязательно выложу пример с решением


Кто бы ты ни был, мир в твоих руках
 
Ответить
СообщениеДоброе утро всем!!!
Многоуважаемые форумчане прошу меня простить но тему закрываю... ((((((((
Спасибо вам огромнейшее за отклики... Найду ответ на свое решение обязательно выложу пример с решением

Автор - lebensvoll
Дата добавления - 05.10.2016 в 09:43
Мир MS Excel » Вопросы и решения » Вопросы по VBA » формула для combobox (Макросы/Sub)
Страница 1 из 11
Поиск:

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