Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/26: Рейтинг темы: голосов - 26, средняя оценка - 4.85
0 / 0 / 0
Регистрация: 26.04.2010
Сообщений: 8

Обработка данных Excel в VBA

26.04.2010, 17:51. Показов 4761. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, у меня есть таблица в Excel из 3 столбцов (высота, широта, долгота неких точек поверхности), мне нужно рассчитать расстояние между каждой точкой и всеми остальными с помощью VBA c учетом географических координат и высоты каждой точки. Математическую часть расчета я сделать могу, но оформить в VBA обращение к каждой точке и работу с точками - нет.
Вложения
Тип файла: xls Пример1.xls (14.0 Кб, 70 просмотров)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.04.2010, 17:51
Ответы с готовыми решениями:

Обработка в Excel 2007 табличных данных с использованием макросов на VBA
Помоооогите пожалуйста, братцы, сделать лабораторку, ОЧЕНЬ СРОЧНО!!! Буду безумно благодарен, если она будет готовой к вечеру пятницы! Если...

Обработка формул Excel в VBA
Добрый вечер! Буду благодарен за любую помощь. Суть проблемы. Есть книга Excel с двумя листами. Первый лист ежедневно заполняется...

excel(?) vba обработка нажатий экрана
день добрый я не знаю, в какой это теме писать, поэтому написал в той, в которой у меня сделано подобие задача : утром неск раз в...

7
Частенько бываю
 Аватар для Vlanib
750 / 331 / 42
Регистрация: 20.06.2007
Сообщений: 854
26.04.2010, 18:12
Лучше будет если ты выложишь формулу расчета в общем виде, если она не сильно замороченная.
0
 Аватар для Toxa33rus
3921 / 922 / 125
Регистрация: 16.04.2009
Сообщений: 1,962
26.04.2010, 22:48
А поверхность какую форму имеет? Шар (Земля) или проскость (координаты парикмахерских в городе)?
0
306 / 187 / 26
Регистрация: 14.02.2010
Сообщений: 547
27.04.2010, 18:08
Цитата Сообщение от Михаил2011 Посмотреть сообщение
оформить в VBA обращение к каждой точке
Если точки у вас описаны в 3 ячейках Excel, то какая проблема -
ActiveSheet.Cells(rowIndex, colIndex).Value/Formula
0
0 / 0 / 0
Регистрация: 26.04.2010
Сообщений: 8
28.04.2010, 16:30  [ТС]
Спасибо всем кто ответил! Поверхность имеет форму шара (Земля естественно). Координаты не парикмахерских - тут задача где горизонт скрывает вышки связи и получается "мертвая зона".
Вот как выглядел мой код:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
Sub Hor()
Dim ft
Dim lt
Dim ht
Dim fi
Dim li
Dim hi
Dim Rng As Range
Dim iCell As Range
Open "D:\......csv" For Append As #1
l = 3.14159
Rl = 1738000
ft = 86.35
lt = 30.55
ht = -1210
Print #1, ft, lt
Set Rng = Range(Cells(2, 3), Cells(20259, 3))
 For Each iCell In Rng
  hi = iCell.Value
  If hi > 0 Then
   fi = Cells(iCell.Row, 1)
   li = Cells(iCell.Row, 2)
    If Abs(ht - hi) > 0 Then
 
    [COLOR="Blue"]x1 = (Cos((90 - ft) * l / 180) * Cos((90 - fi) * l / 180)) + (Sin((90 - ft) * l / 180) * Sin((90 - fi) * l / 180) * Cos((lt - li) * l / 180))
    D = (Atn(-x1 / Sqr(-x1 * x1 + 1)) + 2 * Atn(1)) * 180 / l
    t = Rl * Tan(D * l / 180)
    b = ((Rl + hi) ^ 2 + (Rl + ht) ^ 2 - 2 * ((Rl + hi) * (Rl + ht) * Cos(D * l / 180))) ^ 0.5
    a1 = (b ^ 2 + (Rl + hi) ^ 2 - (Rl + ht) ^ 2) / (2 * b * (Rl + ht))
    a = (Atn(-a1 / Sqr(-a1 * a1 + 1)) + 2 * Atn(1)) * 180 / l
    x2 = Cos((90 - ft) * l / 180) * Cos((90 - fi) * l / 180) + (Sin((90 - ft) * l / 180) * Sin((90 - fi) * l / 180) * Cos(Abs((lt - li) * l / 180)))
    La = (Atn(-x2 / Sqr(-x2 * x2 + 1)) + 2 * Atn(1)) * 180 / l
     If lt = li Then c = 0
    c1 = Sin(Abs((lt - li) * l / 180)) * Sin((90 - fi) * l / 180) / Sin(La * l / 180)
    c = (Atn(c1 / Sqr(-c1 * c1 + 1))) * 180 / l
     End If
      If fi < ft Then
       If li < lt Then
        Az = 360 - c
        Else: Az = c
       End If
      Else:
       If li > lt Then
        Az = 180 + c
       End If
        If li < lt Then
         Az = 180 - c
        End If
      End If
                       
     If 90 - a - D > 0 Then
      m = 90 - a - D
      Else: m = 0
     End If
     If Az > 360 Then Az = Az - 360[/COLOR]     
    A0 = Fix(Az)
  Print #1, fi, ",", li, ",", c, ",", A0, ",", m
 End If
Next
 
End Sub
Синим я выделил матем. часть, которая проблем не представляет, это чистый геом. расчет. Раньше я вводил координаты и высоту одной точки (ft,lt,ht), которая мне была нужна и потом обсчитывал относит. нее все остальные вот этим кодом. Теперь мне нужно обсчитать таким образом все точки относит. всех остальных. А количество их большое! Мне не удается обратиться к двум точкам из этого массива одновременно: я не могу их перебрать.
0
306 / 187 / 26
Регистрация: 14.02.2010
Сообщений: 547
28.04.2010, 22:17
Что-то тут у Вас не совсем понятно.
Первое - зачем принимать каждую ячейку в диапазоне за значение высоты, если высота расположена только в одном столбце.
Второе - зачем выводить на печать все значения. Вы их сумеете просмотреть? Не лучше ли выводить только те, которые удовлетворяют (или не удовлетворяют) какому-то условию.
Третье - все-таки Васик не отличается умом и сообразительностью, поэтому наверное вычисления крайне желательно подсократить.
Ну и напоследок - по поводу обращения к двум точкам (только не ячейкам а строкам - ячейка не описывает 3-D кординаты, ее описывает комбинация из 3 ячеек в одной строке)
примерно как:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
dim curRow as Long, r as Long
const LastRow = XXXXXXXX
 
curRow = 2
do while curRow < lastRow
   h1 = cells(curRow, 1).Value
   x1 = cells(curRow, 2).Value
   y1 = cells(curRow, 3).Value
  
  for r = curRow + 1 to lastRow
     h2 = cells(r, 1).Value
     x2 = cells(r, 2).Value
     y2 = cells(r, 3).Value
 
     и считаем что надо
 
  next r
  curRow = curRow + 1
loop
Добавлено через 2 минуты
Цитата Сообщение от Михаил2011 Посмотреть сообщение
If Abs(ht - hi) > 0 Then
это эквивалентно ht <> hi, но, скорее всего вычислятся будет быстрее

а нет. С "первое" маху дал. Там одна колонка. Но все равно совершенно незачем обращаться к свойствам ячейки для получения индекса строки, если можно вместо этого использовать простую переменную. Доступ к COM-объекту будет явно медленнее, причем значительно, нежели к переменной. И, кстати, кажется в Вашем файле высота не в 3 колонке, как в коде, а в первой ?
0
206 / 13 / 2
Регистрация: 10.10.2009
Сообщений: 154
28.04.2010, 23:15
Михаил2011, если проблема в переборе точек, то это комбинаторная задача. Перебрать пары точек из заданного массива можно с помощью генератора сочетаний.

Например, массив состоит из 3-ох точек. Перебираем все пары.

12
13
23

Таким образом для первой точки расстояния - 12, 13
для второй точки расстояния - 12, 23
для третьей точки расстояния - 13, 23

Для такой задачи проще будет Turbo Basic.
0
0 / 0 / 0
Регистрация: 26.04.2010
Сообщений: 8
29.04.2010, 19:17  [ТС]
Цитата Сообщение от kukuruku310 Посмотреть сообщение
Что-то тут у Вас не совсем понятно.
Второе - зачем выводить на печать все значения. Вы их сумеете просмотреть? Не лучше ли выводить только те, которые удовлетворяют (или не удовлетворяют) какому-то условию.
И, кстати, кажется в Вашем файле высота не в 3 колонке, как в коде, а в первой ?
Да, мне нужно вывести на печать только максимальные для каждого азимута значения высоты, но я этого сделать не сумел.
Высота в исходнике была в 3 колонке, поэтому я поторопился и ошибся.

Добавлено через 1 минуту
Цитата Сообщение от Mishel915 Посмотреть сообщение
Михаил2011, если проблема в переборе точек, то это комбинаторная задача. Перебрать пары точек из заданного массива можно с помощью генератора сочетаний.

Например, массив состоит из 3-ох точек. Перебираем все пары.

12
13
23

Таким образом для первой точки расстояния - 12, 13
для второй точки расстояния - 12, 23
для третьей точки расстояния - 13, 23

Для такой задачи проще будет Turbo Basic.
Тут я совсем не в теме и Turbo basic не владею вообще.Увы.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.04.2010, 19:17
Помогаю со студенческими работами здесь

Стандартные сообщения Excel, и их обработка с помощью VBA
Помогите. Как спомощью vba отлавливать стандартные сообщения excel. Например 'Сохранить как ' как узнать кая при этом будет нажата кнопка.

Загрузка данных из Excel в базу данных Access на VBA
Буду очень рад если кто-нибудь приведет более менее понятный код, как можно это реализовать средствами VBA

Vba excel windows и vba excel Mac Os - Макинтош корявит шрифт
Всем привет, столкнулся с такой ситуацией. Макросы написаны на Excel 2016 Windows. Когда файл открывается и сохраняется на маке, весь...

Обработка данных Excel документа, реально ли обработать такую структуру данных?
Добрый день. Посоветуйте ход решения задачи. Необходимо написать обработку которая будет экспортировать данные из Excel документа в базу...

Внесение данных vba excel
Друзья, выручайте. Есть такая проблема. В конце протоколов вставляются данные сотрудников, проводивших испытания. Получается у меня, что...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru