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

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

  1. kub13

    kub13 Форумчанин

    Я уже почти сделал, чтобы данный шаблон автоматически делал заготовку на нужное количество точек. Далее остаётся только ввести название, координаты и радиусы, и всё на печать. Не знаю, должно заработать.
     
  2. Lex K-G

    Lex K-G Форумчанин

    Ув. kub13, Выас не затруднит дать простой совет - чтобы фунции на VBA можно было вызывать в ячейках, как встроенные функции EXCELя, какие действия делаем?
    Я захожу в Редактор Вижл Бэйсик, создаю новый модуль -и все тогда работает (ОГРОМНОЕ ВАМ СПАСИБО!)
    А есть другие варианты и общие правила? Если сохранен макрос последовательности действий (когда записываются действия пользователя), то что с ним можно сделать дальше?
    Заранее спасибо.
     
  3. kub13

    kub13 Форумчанин

    Посмотрите, например мой последний файл, например Ведомость углов поворота.
    Если нажать на кнопку (или выбрать в меню) вставить функцию, то в появившемся окне можно выжрать категорию "определенные пользователем", там появятся все функции, которые уже созданы в текущей (или персональной) книге. Выбираем, например функцию "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, только в рамках того, что надо было решить. Для меня это решение головоломок (иногда с удовольствием или приятное с полезным). Так что описывайте свою задуманную задачу и попробуем решить совместно.
     
    Grandpa и Lex K-G нравится это.
  4. Lex K-G

    Lex K-G Форумчанин

    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, которая посчитает обратку, оценит результат и поменяет цвет заливки ячейки, в которую ее поместили. И все!
    Задача несложная, но мне нужно долго и нудно экспериментировать, читать справку. Может быть, у кого получится быстрее?
     
  5. kub13

    kub13 Форумчанин

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

    Вложения:

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

    kub13 Форумчанин

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

    Вложения:

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

    Alexandr-GR Форумчанин

    Помогите с макросом! Хотя для этой задачи может он и не нужен вовсе... В общем необходимо удалить повторяющиеся значения в указанном столбце (формат не важен, т.е. общий). Фильтр не подходит.
     
  8. В.Шуфотинский

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

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

    Alexandr-GR Форумчанин

    В.Шуфотинский, спасибо за отклик!
    Я так и делаю, но это ж гораздо дольше нежели
    1. выбрал столбец,
    2. обратился к макросу - повторяющиеся значения в столбце удалились,
    3. сортировка по столбцу,
    4. удаление строк без первой ячейки.
     
  10. kub13

    kub13 Форумчанин

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

    Вложения:

  11. kub13

    kub13 Форумчанин

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

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

    Так я эту последовательность когда-то это в макрос записал. Давно это было. Сейчас этим не занимаюсь.
     
  13. Alexandr-GR

    Alexandr-GR Форумчанин

    вот и я тоже не занимаюсь.. думал у кого есть готовое решение..
    по формулам Excel - эту задачу решить, конечно, можно, но не хочется так заморачиваться) В конечном счете данные все-равно пойдут в формат csv или txt.
    я, если честно, не могу понять какой макрос универсальный, а какой нет в данном случае?
     
  14. kub13

    kub13 Форумчанин

    Alexandr-GR, Я делал схожий макрос, который находит комментарии в файле скачки сырых данных с тахеометра переносит их в новый столбец справа и на ячейку ниже, а пустую строку удаляет. Там конечно, для каждого тахеометра, немного свой подход и макрос.
    Давайте файл.
     
  15. Alexandr-GR

    Alexandr-GR Форумчанин

    четыре столбика с кодами(описаниями) - в конечном варианте мне необходим 1 с уникальными описаниями.

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

    Вложения:

  16. kub13

    kub13 Форумчанин

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

    Alexandr-GR Форумчанин

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

    kub13 Форумчанин

    Alexandr-GR, Оцените так надо было или не так, так я понял и сделал?
    Для начала нажмите на большую кнопку с красным шрифтом.
     

    Вложения:

  19. thegeo

    thegeo Форумчанин

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

    Вложения:

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

    Alexandr-GR Форумчанин

    kub13, для второго варианта (там где был каталог координат) идеально..
    Если б можно было удалять таким образом в выделенном диапазоне или с выбором столбца вообще было супер..
    В любом случае, уже этот вариант значительно облегчает для меня процесс.
    Спасибо, что не оставили без внимания!::smile24.gif:: Уже завтра пригодится..
     
  1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление
  1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление