Например так (функцию свою пришлось писать в своем же примере - почто файл не прикладываете?) [vba]
Код
Function ИНТЕР(a As Range, b As Range, c As Range) ar1 = b ar2 = c For i = 1 To UBound(ar1) If ar1(i, 1) = a Then x_ = ar2(i, 1) Exit For End If Next i ИНТЕР = x_ End Function
Sub tt() Range("H2") = ИНТЕР(Range("E1"), Range("A1:A5"), Range("B1:B5")) End Sub
[/vba]
Например так (функцию свою пришлось писать в своем же примере - почто файл не прикладываете?) [vba]
Код
Function ИНТЕР(a As Range, b As Range, c As Range) ar1 = b ar2 = c For i = 1 To UBound(ar1) If ar1(i, 1) = a Then x_ = ar2(i, 1) Exit For End If Next i ИНТЕР = x_ End Function
Sub tt() Range("H2") = ИНТЕР(Range("E1"), Range("A1:A5"), Range("B1:B5")) End Sub
Спасибо Борода. Что бы я без Вас делал? Во-первых извиняюсь, что не привел файл Excel. Но тут я подумал, что для ответа достаточно было бы одной Вашей строчки. Во-вторых, к сожалению, Вы не учли одну маленькую особенность "моей" задачи. У меня исходные таблицы находятся на листе "а", исходные данные на листе "б", вывод значения функции нужно выполнить на листе "в", а активным является в настоящий момент лист "г". Вот такая "катавасия" получается... п.с. Ответ Вы можете дать одной или несколькими строчками. А впрочем, "как Вам удобнее будет".
Спасибо Борода. Что бы я без Вас делал? Во-первых извиняюсь, что не привел файл Excel. Но тут я подумал, что для ответа достаточно было бы одной Вашей строчки. Во-вторых, к сожалению, Вы не учли одну маленькую особенность "моей" задачи. У меня исходные таблицы находятся на листе "а", исходные данные на листе "б", вывод значения функции нужно выполнить на листе "в", а активным является в настоящий момент лист "г". Вот такая "катавасия" получается... п.с. Ответ Вы можете дать одной или несколькими строчками. А впрочем, "как Вам удобнее будет".Юрий_Нд
Спасибо Борода. Ещё подскажите пожалуйста, как ввести координаты не по именам ячеек "Н2", а по номеру строчки "2" и номеру колонки "7". И заодно, по всем остальным ячейкам тоже, чтобы больше уже Вас не беспокоить (Е1, А1, А5, В1, В5). Я вот начал придумывать, но что-то у меня ничего не получается: [vba]
[/vba] и ещё, вдобавок, какие-то закорючки вылазят. Но в коде всё выглядит прилично.
Спасибо Борода. Ещё подскажите пожалуйста, как ввести координаты не по именам ячеек "Н2", а по номеру строчки "2" и номеру колонки "7". И заодно, по всем остальным ячейкам тоже, чтобы больше уже Вас не беспокоить (Е1, А1, А5, В1, В5). Я вот начал придумывать, но что-то у меня ничего не получается: [vba]
Hugo, я был бы очень благодарен, если бы Вы чуть больше и конкретнее высказали свои мысли. Если Вы о том, что моя функция ничего не делает, согласен, в принципе она похожа на процедуру. Хотя вообще-то, она и на процедуру не похожа. Согласен, бред какой-то. Однако этот бред получился, когда я урезал свою прогу, "до не могу", чтобы влезть в 100 КБ. Кстати, в реальности, моя прога на 2.7 метра. Но. И моя инженерная расчетная программа на 2.7 метра, и этот бессмысленный, урезанный примитив дает одну и ту же ошибку. Поэтому прошу, закрыть глаза на смысловую нагрузку выложенного на форуме файла и сосредоточиться на ошибке 9.
Hugo, я был бы очень благодарен, если бы Вы чуть больше и конкретнее высказали свои мысли. Если Вы о том, что моя функция ничего не делает, согласен, в принципе она похожа на процедуру. Хотя вообще-то, она и на процедуру не похожа. Согласен, бред какой-то. Однако этот бред получился, когда я урезал свою прогу, "до не могу", чтобы влезть в 100 КБ. Кстати, в реальности, моя прога на 2.7 метра. Но. И моя инженерная расчетная программа на 2.7 метра, и этот бессмысленный, урезанный примитив дает одну и ту же ошибку. Поэтому прошу, закрыть глаза на смысловую нагрузку выложенного на форуме файла и сосредоточиться на ошибке 9.Юрий_Нд
Сообщение отредактировал Юрий_Нд - Четверг, 23.05.2019, 07:01
Function ИНТЕР(a As Range, b As Range, c As Range) '... ИНТЕР = x_ End Function
Мы обозвали функцию, а потом показали, что эта функция равна чему-то. А что у Вас? Вы назвали ее, но чему она в итоге равна? Читайте по общим вопросам иногда яндекс, это намного быстрее, чем ждать ответов здесь
Function ИНТЕР(a As Range, b As Range, c As Range) '... ИНТЕР = x_ End Function
Мы обозвали функцию, а потом показали, что эта функция равна чему-то. А что у Вас? Вы назвали ее, но чему она в итоге равна? Читайте по общим вопросам иногда яндекс, это намного быстрее, чем ждать ответов здесь_Boroda_
Доброго дня, Уважаемый Борода. Во-первых, я Вам крайне признателен, что до сих пор возитесь со мной и с моими "заморочками". Во-вторых, в отношении Вашего замечания:
о том, что моя функция ничего не делает, согласен, в принципе она похожа на процедуру. Хотя вообще-то, она и на процедуру не похожа. Согласен, бред какой-то.
но проблема, как я уверен, не в этом. И чтобы уже поставить точку, с Вашим замечанием, я полностью заменил свою функцию Вашей. Правда немножко подкорректировал только одну строчку, потому что мои принцип: "Никогда не применять того, в чём я на 100% не уверен, или не понимаю..." И что...? Да ничего... Как с яйцами, тоже фото, только в профиль... А поэтому, в-третьих, как я предполагаю, если Excel сам кричит, что Ошибка 9, нужно сосредоточиться именно на этом. Насколько я понял, ошибка 9, это когда мы допустим, в 7 элементный массив пытаемся впихнуть восьмой или девятый элемент. Или, допустим в качестве номера элемента пытаемся подсунуть дробное, а не целое число. Ну и все такое дальше. Но как всё это применить к моему конкретному случаю, я не понимаю... В-четвертых, можете поверить, я не сижу и не жду Вашего ответа. Да я пытаюсь что-то подправить, изменить, но у меня ничего не получается. Смысла информировать Вас о том, что у меня ничего не получается, не вижу. Поэтому решил эту проблему оставить "на потом", а пока решаю другие "кирпичики" моей инженерной задачи. А если, ничего не получится, я в конце концов прямо на расчетный лист размещу таблицу и прямо в процедуре несколько раз проинтерполирую мои табличные данные. Но очень надеюсь, что до этого не дойдёт. И пока надежда только на Вас.
Доброго дня, Уважаемый Борода. Во-первых, я Вам крайне признателен, что до сих пор возитесь со мной и с моими "заморочками". Во-вторых, в отношении Вашего замечания:
о том, что моя функция ничего не делает, согласен, в принципе она похожа на процедуру. Хотя вообще-то, она и на процедуру не похожа. Согласен, бред какой-то.
но проблема, как я уверен, не в этом. И чтобы уже поставить точку, с Вашим замечанием, я полностью заменил свою функцию Вашей. Правда немножко подкорректировал только одну строчку, потому что мои принцип: "Никогда не применять того, в чём я на 100% не уверен, или не понимаю..." И что...? Да ничего... Как с яйцами, тоже фото, только в профиль... А поэтому, в-третьих, как я предполагаю, если Excel сам кричит, что Ошибка 9, нужно сосредоточиться именно на этом. Насколько я понял, ошибка 9, это когда мы допустим, в 7 элементный массив пытаемся впихнуть восьмой или девятый элемент. Или, допустим в качестве номера элемента пытаемся подсунуть дробное, а не целое число. Ну и все такое дальше. Но как всё это применить к моему конкретному случаю, я не понимаю... В-четвертых, можете поверить, я не сижу и не жду Вашего ответа. Да я пытаюсь что-то подправить, изменить, но у меня ничего не получается. Смысла информировать Вас о том, что у меня ничего не получается, не вижу. Поэтому решил эту проблему оставить "на потом", а пока решаю другие "кирпичики" моей инженерной задачи. А если, ничего не получится, я в конце концов прямо на расчетный лист размещу таблицу и прямо в процедуре несколько раз проинтерполирую мои табличные данные. Но очень надеюсь, что до этого не дойдёт. И пока надежда только на Вас.Юрий_Нд
Что-то с цитатами не то получилось у Вас в посте. Если есть 2 или более цитаты, то при редактировании поста все ломается
По макросу 1. Или уберите Option Explicit, или объявите переменные 2. Проверьте название листа - Вы его переименовали, а в макросе не поправили 3. Вот так работает [vba]
Код
Function ИНТЕР(a As Range, b As Range, c As Range) ar1 = b ar2 = c ' For i = 1 To UBound(ar1) For i = 1 To 7 If ar1(i, 1) = a Then x_ = ar2(i, 1) Exit For End If Next i ИНТЕР = x_ End Function
Sub таб_парц_давл() With Sheets("Исх табл") Sheets("Экспер").Cells(71, 17) = ИНТЕР(Sheets("Экспер").Cells(71, 16), _ .Range(.Cells(7, 3), .Cells(10, 3)), .Range(.Cells(7, 4), .Cells(10, 4))) End With End Sub
[/vba]
Что-то с цитатами не то получилось у Вас в посте. Если есть 2 или более цитаты, то при редактировании поста все ломается
По макросу 1. Или уберите Option Explicit, или объявите переменные 2. Проверьте название листа - Вы его переименовали, а в макросе не поправили 3. Вот так работает [vba]
Код
Function ИНТЕР(a As Range, b As Range, c As Range) ar1 = b ar2 = c ' For i = 1 To UBound(ar1) For i = 1 To 7 If ar1(i, 1) = a Then x_ = ar2(i, 1) Exit For End If Next i ИНТЕР = x_ End Function
Sub таб_парц_давл() With Sheets("Исх табл") Sheets("Экспер").Cells(71, 17) = ИНТЕР(Sheets("Экспер").Cells(71, 16), _ .Range(.Cells(7, 3), .Cells(10, 3)), .Range(.Cells(7, 4), .Cells(10, 4))) End With End Sub
Да, вижу, подправил. В программе изменил только название листа. И всё закрутилось. Если можно, ещё два вопроса: 1. Это я такой рассеянный и невнимательный, или Вам всё-таки Excel как-то намекнул, что в коде обращение к несуществующему листу? 2. Я например в этом усматриваю конкретный косяк разработчиков Excel. Зачем было морочить голову с массивами, когда тут конкретная, элементарная ошибка? А в остальном, я Вам очень благодарен. Большое спасибо и низкий земной поклон. Должок вернул, С уважением __________ Юрий.
Да, вижу, подправил. В программе изменил только название листа. И всё закрутилось. Если можно, ещё два вопроса: 1. Это я такой рассеянный и невнимательный, или Вам всё-таки Excel как-то намекнул, что в коде обращение к несуществующему листу? 2. Я например в этом усматриваю конкретный косяк разработчиков Excel. Зачем было морочить голову с массивами, когда тут конкретная, элементарная ошибка? А в остальном, я Вам очень благодарен. Большое спасибо и низкий земной поклон. Должок вернул, С уважением __________ Юрий.Юрий_Нд
1. Я пошагово пошел в своей версии макроса и он поругался на строку с With. Там не может быть никакой иной, кроме названия листа, ошибки. Но даже если и с Вашей записью макроса работать, то см. п.2 2. Вам же написали "subscript out of range" - переводчик мне сказал (сам я вражеским языкам не обучен), что это означает "индекс вне диапазона". А в справке нужно все читать, а не только то, что нравится . Там не только про массивы, но и про коллекции. А листы книги - это как раз коллекция листов. Пункт 3 справки (снова через переводчик) "Вы ссылались на несуществующего члена коллекции".
По предыдущему посту - функция может ничего не делать, но если мы к ней обращаемся из другого места (макроса, функции), то она должна что-то возвращать. То есть обязательно должна быть запись ИНТЕР = что-нибудь
1. Я пошагово пошел в своей версии макроса и он поругался на строку с With. Там не может быть никакой иной, кроме названия листа, ошибки. Но даже если и с Вашей записью макроса работать, то см. п.2 2. Вам же написали "subscript out of range" - переводчик мне сказал (сам я вражеским языкам не обучен), что это означает "индекс вне диапазона". А в справке нужно все читать, а не только то, что нравится . Там не только про массивы, но и про коллекции. А листы книги - это как раз коллекция листов. Пункт 3 справки (снова через переводчик) "Вы ссылались на несуществующего члена коллекции".
По предыдущему посту - функция может ничего не делать, но если мы к ней обращаемся из другого места (макроса, функции), то она должна что-то возвращать. То есть обязательно должна быть запись ИНТЕР = что-нибудь_Boroda_