Добро пожаловать!

Войдите или зарегистрируйтесь сейчас!

Войти

Решение геодезических задач в MS Excel

Тема в разделе "Другие программы", создана пользователем kub13, 5 янв 2013.

  1. kub13

    Форумчанин

    Регистрация:
    3 сен 2009
    Сообщения:
    115
    Симпатии:
    141
    Адрес:
    Липецк
    Я уже почти сделал, чтобы данный шаблон автоматически делал заготовку на нужное количество точек. Далее остаётся только ввести название, координаты и радиусы, и всё на печать. Не знаю, должно заработать.
     
    #41
  2. Lex K-G

    Форумчанин

    Регистрация:
    4 июл 2012
    Сообщения:
    1.610
    Симпатии:
    1.061
    Адрес:
    οἰκουμένη
    Ув. kub13, Выас не затруднит дать простой совет - чтобы фунции на VBA можно было вызывать в ячейках, как встроенные функции EXCELя, какие действия делаем?
    Я захожу в Редактор Вижл Бэйсик, создаю новый модуль -и все тогда работает (ОГРОМНОЕ ВАМ СПАСИБО!)
    А есть другие варианты и общие правила? Если сохранен макрос последовательности действий (когда записываются действия пользователя), то что с ним можно сделать дальше?
    Заранее спасибо.
     
    #42
  3. kub13

    Форумчанин

    Регистрация:
    3 сен 2009
    Сообщения:
    115
    Симпатии:
    141
    Адрес:
    Липецк
    Посмотрите, например мой последний файл, например Ведомость углов поворота.
    Если нажать на кнопку (или выбрать в меню) вставить функцию, то в появившемся окне можно выжрать категорию "определенные пользователем", там появятся все функции, которые уже созданы в текущей (или персональной) книге. Выбираем, например функцию "L", её код в VBA относительно простой и понятный:
    'Вычисление расстояния между двух точкек
    Function L(x1, y1, x2, y2) As Double
    L = Sqr((x2 - x1) ^ 2 + (y2 - y1) ^ 2)
    End Function
    Формула в ячейке будет выглядеть приблизительно так: =L(E12;F12;E14;F14) (тычем мышью в 4 ячейки с координатами, удерживая Ctrl).
    Для вычисления азимута =DUr(E12;F12;E14;F14).
    'Вычисление дирекционного угла по коорд. 2х точек в Радианах
    Function DUr(x1, y1, x2, y2) As Double
    dx = x2 - x1
    dy = y2 - y1 + 0.00000000000001
    DUr = Pi * Sgn(dy) / 2 - Atn((dx / dy)) ' Sgn (знак числа)
    If DUr >= 0 Then
    DUr = DUr
    Else: DUr = Pi * Sgn(dy) / 2 - Atn((dx / dy)) + 2 * 3.14159265358979
    End If
    End Function
    Тоже самое, но в ГГГ.ММСС использую функцию DU(x1, y1, x2, y2) As Double
    Если мне надо сделать, что-то новое, то я сначала записываю новый макрос (Начать макрос...) делаю приблизительную последовательность задуманных действий. Потом захожу в "Редактор VB", подглядываю и редактирую. И так многократно по вышеописанному кругу.

    Я не большой специалист в VBA, только в рамках того, что надо было решить. Для меня это решение головоломок (иногда с удовольствием или приятное с полезным). Так что описывайте свою задуманную задачу и попробуем решить совместно.
     
    #43
    Grandpa и Lex K-G нравится это.
  4. Lex K-G

    Форумчанин

    Регистрация:
    4 июл 2012
    Сообщения:
    1.610
    Симпатии:
    1.061
    Адрес:
    οἰκουμένη
    kub13, я открываю EXCEL редко, когда другое ПО не предоставляет мне нужных функций.
    Задач море. в данный момент задумался над такой:
    Поменять свойства ячейки (цвета, шрифт, рамки) с помощью функции, проверяющей условия.

    К примеру, нужно сравнить координаты пар точек.
    1. в столбцы A,B,C,D вставлен список координат точек (X1, Y1, X2, Y2)
    2. в столбце E рассчитывается расстояние для каждой пары точек ( SQR((X2-X1)^2+(Y2-Y1)^2) о определяется в какой диапазон попадает это расстояние (минимальное, в допуске, плохое, громадное) и результат пишется разным цветом
    3. Диапазон допусков задан в первой строке в ячейках A1, A2, A3,.. AN

    Это актуально при сравнении вариантов координат разных точек
    (Измерения в разное время, разными методами, разные исходные пункты, разные источники), когда их не одна сотня, а то и тысячи. Я по-быстрому в отдельной ячейке делал
    формулу, которая ставит звездочки (*********). Можно так же и менять цвета ячеек.
    Но, хотелось бы изящное решение- одну-единственную функцию на VBA, которая посчитает обратку, оценит результат и поменяет цвет заливки ячейки, в которую ее поместили. И все!
    Задача несложная, но мне нужно долго и нудно экспериментировать, читать справку. Может быть, у кого получится быстрее?
     
    #44
  5. kub13

    Форумчанин

    Регистрация:
    3 сен 2009
    Сообщения:
    115
    Симпатии:
    141
    Адрес:
    Липецк
    Lex K-G, Я бы скорее всего использовал "Условное форматирование + автофильтр" (см. файл).
    VBA имеет смысл заниматься, когда четко определены параметры функции, их количество и способ сравнения, а в основном универсальность (типичность) применения. Будет время, попробую. Если есть готовые таблицы (разные варианты) скиньте.
     

    Вложения:

    #45
    Lex K-G нравится это.
  6. kub13

    Форумчанин

    Регистрация:
    3 сен 2009
    Сообщения:
    115
    Симпатии:
    141
    Адрес:
    Липецк
    Pedro, Вроде бы добил "Ведомость углов поворота. прямых и кривых плана трассы".
    В левом верхнем углу есть кнопка "Подготовить", нажав на неё делается копия листа, затем в появившемся окне вводите количества точек (координат) для новой ведомости. Заготовка готова. Осталось в светло-жёлтые ячейки ввести (или скопировать значения) координаты и радиусы, исправит название объекта и на печать (проверьте параметры страницы).
    Ячейки с Красным шрифтом - это с формулами, для автоматического вычисления. Тоже самое на скрытом листе "Итоги" (до первого нажатия кнопки он отображен) откуда каждый раз копируется итоговая заготовка. При необходимости смените шрифт на чёрный. Проверьте почему-то разность углов на примере повторяется 2 раза. Сделал два шаблона, одинаковых по содержанию, но незначительно отличающихся по оформлению. Да ещё, лишние строки вверху удалять нельзя.
    Если используете Exsel 2007 или 2010, то предварительно сохраните как... книгу с макросами, закройте и откройте заново. Иначе при добавлении листа будет выходить сообщение об ошибке.
    Вопросы, отзывы, пожелания пишите.
     

    Вложения:

    #46
    Lex K-G нравится это.
  7. Alexandr-GR

    Форумчанин

    Регистрация:
    9 июн 2011
    Сообщения:
    1.192
    Симпатии:
    945
    Адрес:
    Новосибирск
    Помогите с макросом! Хотя для этой задачи может он и не нужен вовсе... В общем необходимо удалить повторяющиеся значения в указанном столбце (формат не важен, т.е. общий). Фильтр не подходит.
     
    #47
  8. В.Шуфотинский

    В.Шуфотинский Модератор
    Команда форума Форумчанин

    Регистрация:
    10 дек 2008
    Сообщения:
    17.307
    Симпатии:
    4.957
    Идея такая:
    1. Добавление первого столбца, для восстановления первоначального порядка. Нумерация строк. Если строки изначально пронумерованы, то этот пункт пропускается.
    2. Сортировка по столбцу, в котором надо убрать повторы.
    3. Добавление 2 столбца за этим столбцом.
    4. В первом из добавленных столбцов формула разницы каждого элемента с нижележащим.
    5. Копирование этого столбца и вставка во второй добавленный в виде "Вставить значения".
    6. Сортировка по второму добавленному столбцу.
    7. Удаление строк с результатом равным нулю или меньше определённой величины во втором добавленном столбце.
    8. Сортировка по столбцу А.
     
    #48
  9. Alexandr-GR

    Форумчанин

    Регистрация:
    9 июн 2011
    Сообщения:
    1.192
    Симпатии:
    945
    Адрес:
    Новосибирск
    В.Шуфотинский, спасибо за отклик!
    Я так и делаю, но это ж гораздо дольше нежели
    1. выбрал столбец,
    2. обратился к макросу - повторяющиеся значения в столбце удалились,
    3. сортировка по столбцу,
    4. удаление строк без первой ячейки.
     
    #49
  10. kub13

    Форумчанин

    Регистрация:
    3 сен 2009
    Сообщения:
    115
    Симпатии:
    141
    Адрес:
    Липецк
    Макрос скорее всего действительно не нужен.
    Я делаю так:
    -на всякий случай копирую лист,
    -добавляю столбец с нумерацией (чтобы восстановить порядок),
    -сортирую нужный столбец,
    -в новый после столбец ввожу формулу типа =ЕСЛИ(E6<>"";ЕСЛИ(E6=E5;"Повтор";"");"")
    -и размножаю до конца,
    -далее делаю автофильтр
    -выбираю в автофильтре "Повтор"
    -теперь можно выделить диапазон повторений и удалить и т.п.
    -при необходимости отсортировать по столбцу с нумерацией и удалить его
    См. пример в файле.
    Скидывайте файл может помогу на конкретном примере.
     

    Вложения:

    #50
  11. kub13

    Форумчанин

    Регистрация:
    3 сен 2009
    Сообщения:
    115
    Симпатии:
    141
    Адрес:
    Липецк
    Пока писал и готовил файл не заметил ответов.
    У меня методика аналогичная предложенной В.Шуфотинским.
    Если таблицы, которые надо модернизировать всегда схожие, то макрос сделать будет значительно проще, чем универсальный.
     
    #51
  12. В.Шуфотинский

    В.Шуфотинский Модератор
    Команда форума Форумчанин

    Регистрация:
    10 дек 2008
    Сообщения:
    17.307
    Симпатии:
    4.957
    Так я эту последовательность когда-то это в макрос записал. Давно это было. Сейчас этим не занимаюсь.
     
    #52
  13. Alexandr-GR

    Форумчанин

    Регистрация:
    9 июн 2011
    Сообщения:
    1.192
    Симпатии:
    945
    Адрес:
    Новосибирск
    вот и я тоже не занимаюсь.. думал у кого есть готовое решение..
    по формулам Excel - эту задачу решить, конечно, можно, но не хочется так заморачиваться) В конечном счете данные все-равно пойдут в формат csv или txt.
    я, если честно, не могу понять какой макрос универсальный, а какой нет в данном случае?
     
    #53
  14. kub13

    Форумчанин

    Регистрация:
    3 сен 2009
    Сообщения:
    115
    Симпатии:
    141
    Адрес:
    Липецк
    Alexandr-GR, Я делал схожий макрос, который находит комментарии в файле скачки сырых данных с тахеометра переносит их в новый столбец справа и на ячейку ниже, а пустую строку удаляет. Там конечно, для каждого тахеометра, немного свой подход и макрос.
    Давайте файл.
     
    #54
  15. Alexandr-GR

    Форумчанин

    Регистрация:
    9 июн 2011
    Сообщения:
    1.192
    Симпатии:
    945
    Адрес:
    Новосибирск
    четыре столбика с кодами(описаниями) - в конечном варианте мне необходим 1 с уникальными описаниями.

    Другой пример - необходимо удалить повторяющееся значения в первом(А) столбце
     

    Вложения:

    #55
  16. kub13

    Форумчанин

    Регистрация:
    3 сен 2009
    Сообщения:
    115
    Симпатии:
    141
    Адрес:
    Липецк
    Требуется уточнение:
    Не совсем понял, уникальность строки (комбинацию из 4 ячеек), а лишние идентичные строки удалить?
    Или поиск одинаковых данных только по первому столбцу, и удалять ячейки или строки все что ниже?
    Первоначальная очерёдность важна?, Или сортировка по столбам (кодам)?
    Как я догадываюсь здесь (в первом файле) идеально подойдет "Сводная таблица".
    Например 1003 повторяется 2 раза, первую строку оставляем с POS, а вторую (другие) с STN удаляем?
    Если да, то тогда поиск и удаление строк с кодом STN во втором столбце не подходит?
     
    #56
  17. Alexandr-GR

    Форумчанин

    Регистрация:
    9 июн 2011
    Сообщения:
    1.192
    Симпатии:
    945
    Адрес:
    Новосибирск
    В первом примере, да и в принципе необходимо удалить повторяющиеся значения оставив пустые ячейки. В конечном счете я это буду сводить в единый список(столбец), но это я могу сделать вручную. Никакой зависимости со строками, т.е. выделил диапазон повторяющиеся значения удалились. По такому же принципу во втором файле - выделяем первый столбец в качестве диапазона, а то что в других столбцах(строках) нас не интересует. В примере так совпало POS и STN, в основном все данные идентичны.
     
    #57
  18. kub13

    Форумчанин

    Регистрация:
    3 сен 2009
    Сообщения:
    115
    Симпатии:
    141
    Адрес:
    Липецк
    Alexandr-GR, Оцените так надо было или не так, так я понял и сделал?
    Для начала нажмите на большую кнопку с красным шрифтом.
     

    Вложения:

    #58
  19. thegeo

    Форумчанин

    Регистрация:
    19 фев 2012
    Сообщения:
    83
    Симпатии:
    15
    При операциях с диапазонами, особенно большими, эффективен следующий подход:
    1. переносим диапазон в массив
    2. обрабатываем массив
    3. возвращаем массив в диапазон (если нужно).
    Иллюстрация такого подхода для примера 17022013.xls, поле А в прилагаемом файле
    (предполагается что диапазон определен и отсортирован).
     

    Вложения:

    • forVBA.txt
      Размер файла:
      530 байт
      Просмотров:
      46
    #59
  20. Alexandr-GR

    Форумчанин

    Регистрация:
    9 июн 2011
    Сообщения:
    1.192
    Симпатии:
    945
    Адрес:
    Новосибирск
    kub13, для второго варианта (там где был каталог координат) идеально..
    Если б можно было удалять таким образом в выделенном диапазоне или с выбором столбца вообще было супер..
    В любом случае, уже этот вариант значительно облегчает для меня процесс.
    Спасибо, что не оставили без внимания!::smile24.gif:: Уже завтра пригодится..
     
    #60

Поделиться этой страницей

  1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление