Вопросы

Автор serjche1991, 6 февраля 2014, 22:55

0 Пользователи и 1 гость просматривают эту тему.

serjche1991

Здравствуйте всем. Мне нужно кое-что реализовать, в BASIC я не разбираюсь совсем. Вот скачал пособие, собираюсь освоить на выходных. Для первого может и хватит встроенных формул, а вот на второе точно нет. Итак:
1. Есть некоторое количество опытов (приложенный файл), для каждого есть некоторое значений различных показателей. Нужен элемент управления (поле ввода, куда я мог бы ввести номер нужного опыта или счетчик с шагом 1, чтобы выбирать опыт или еще что-то) или может быть что-то еще, чтобы при вводе номера/выборе опыта значения показателей с него копировались в заданные ячейки.
2. Хотелось бы иметь кнопку, чтобы при нажатии появлялось окно открытия файла, выбирался файл таблицы и из этого файла копировались бы определенные ячейки в определенные ячейки в нашем файле (в котором кнопка находится).
Пока эти действия вручную делаю, а так экономило бы время.
Возможно такое реализовать с BASIC? Буду благодарен за советы и подсказки.
Спасибо за внимание.

[вложение удалено Администратором]

JohnSUN

#1
И тебе не хворать!
Что за книжку выбрал? Не слишком нудную для новичка? А то их много, ориентированы на разный уровень подготовки.

Абсолютно прав насчет первого вопроса: это действительно делается с помощью встроенных механизмов (Данные-Проверка-Диапазон ячеек для выбора нужного опыта и VLOOKUP() или HLOOKUP() для заполнения ячеек.

По второму вопросу - почти прав: макросом это действительно несложно сделать. Однако, попробуй заглянуть в меню Вставка-Лист из файла, а там обрати внимание на "птичку" Связь с файлом. А после загляни в Правка-Связи. Возможно, макрос не понадобится
(Я не говорю, что эти механизмы уже работают как надо! Сегодня все-таки многое приходится делать руками и контролировать глазами. Но есть надежда...)
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

serjche1991

Ну да. Решилось все через HLOOKUP. А можно ли как-нибудь реализовать HLOOKUP, чтобы критерий поиска находился не в первой строке, а в любой указанной? Нужно для диапазона с данными получить номер опыта при каком-либо значении одного из параметров. Ведь здесь номер опыта и есть в первой строке, а параметры ниже. Допустим, нужно вернуть номер опыта при, например, максимальном значении параметра A. Критерием поиска будет то MAX(A) а вот как дальше я не могу додуматься.

Вставка листа из файла не подходит. У меня имеется графики и в нем для рядов данных уже указаны диапазоны. Поэтому, если нужно сравнить результаты опытов наглядно, я подставляю данные в эти диапазоны и получаю графики. А если я вставлю новый лист, то придется указывать диапазоны из нового листа. Пробовал указать в ссылке имя несуществующего листа, чтобы потом вставить лист с этим именем. Не получается.

Книгу скачал StarOffice 8 Programming Guide for BASIC, перевод Д.Чернова.

JohnSUN

Цитата: serjche1991 от  8 февраля 2014, 15:23
А можно ли как-нибудь реализовать HLOOKUP, чтобы критерий поиска находился не в первой строке, а в любой указанной?
Увы, но нет. И для V-, и для H-lookup'а это главное ограничение: поиск ведется по первой строке/колонке. Нужно изобретать другой способ. Благо функций поиска и извлечения данных в электронных таблицах хватает.
Цитата: serjche1991 от  8 февраля 2014, 15:23
Нужно для диапазона с данными получить номер опыта при каком-либо значении одного из параметров. Ведь здесь номер опыта и есть в первой строке, а параметры ниже. Допустим, нужно вернуть номер опыта при, например, максимальном значении параметра A. Критерием поиска будет то MAX(A) а вот как дальше я не могу додуматься.
О! Хороший пример!
Для имеющегося образца максимум по А будет 34, это в седьмом опыте. Последовательность вычислений:
=MAX(B2:I2) // Максимум по параметру A
=MATCH(MAX(B2:I2);B2:I2;0) // Положение этого значения в строке (точнее, первое его вхождение) 7
=OFFSET(A1;0;MATCH(MAX(B2:I2);B2:I2;0)) // Номер опыта (опять 7, но это просто совпадение - был бы другой номер в первой строке получили бы его)
=OFFSET(A1;2;MATCH(MAX(B2:I2);B2:I2;0)) // Значение параметра B для опыта в котором A был максимальным и т.д.

Вместо OFFSET можно использовать, например, INDEX (но там немного другой смысл параметров)
=INDEX(B3:I3;MATCH(MAX(B2:I2);B2:I2))
Цитата: serjche1991 от  8 февраля 2014, 15:23
Вставка листа из файла не подходит. У меня имеется графики и в нем для рядов данных уже указаны диапазоны. Поэтому, если нужно сравнить результаты опытов наглядно, я подставляю данные в эти диапазоны и получаю графики. А если я вставлю новый лист, то придется указывать диапазоны из нового листа. Пробовал указать в ссылке имя несуществующего листа, чтобы потом вставить лист с этим именем. Не получается.
Да, как-то не очень удачно это всё получилось. Структура данных, наверняка, похожа, расположение параметров в таблицах одинаковое, но листы называются по разному и имена книг, само собой, тоже разные... А работа над этими книгами еще ведется или это уже просто архив данных для анализа? Почему спрашиваю... Когда-то делал нечто похожее, но там данные были очень строго структурированы изначально - простые плоские таблицы с одним и тем же составом заголовков. Так приемлемым оказалось такое решение: выгрузить каждый из листов в CSV с понятным уникальным именем, все в одну папку; создать базу данных Base (Соединиться с базой Текст и указать папку);в книге анализа в отдельный лист для данных обычным перетаскиванием нужной таблицы из браузера Источников данных (F4) подставлялись данные из нужного листа;формулы и графики с последующих листов ссылались только на этот лист данных... Пришлось повозиться, конечно, но главбух с экономистом очень быстро освоили приемы работы и довольно шустро находили какие-то свои потерянные суммы... Потом-то, конечно, появилась настоящая учетная система с базой данных, "но это уже совсем другая история" (с)
Цитата: serjche1991 от  8 февраля 2014, 15:23
Книгу скачал StarOffice 8 Programming Guide for BASIC, перевод Д.Чернова.
Хороший документ, добротный. В некоторых листингах встречаются ошибки-описки (так и в оригинале, кстати), но их мало и отлавливаются довольно просто.
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

ИСДС

Скажите, пожалуйста, выход из calc "без сохранения", есть ли возможность вернуть только что закрытый файл? Промахнулась закрывая((((

kompilainenn

Цитата: ИСДС от 12 февраля 2014, 11:23
Скажите, пожалуйста, выход из calc "без сохранения", есть ли возможность вернуть только что закрытый файл? Промахнулась закрывая((((
увы нет, все сохранения утеряны, ну если только вы оооочень долго его не закрывали и успела сработать функция автосохранение
Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут

JohnSUN

... если она была включена в Сервис - Параметры - Загрузка/сохранение - Общие флажок Всегда создавать резервную копию и/или Автосохранение каждые...минут
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

kompilainenn

Цитата: JohnSUN от 12 февраля 2014, 13:30
... если она была включена в Сервис - Параметры - Загрузка/сохранение - Общие флажок Всегда создавать резервную копию и/или Автосохранение каждые...минут
автосохранение включено по-умолчанию,  но минут там аж 15 установлено (при многомегабайтных документах дико раздражает кстати)
Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут