Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.76/21: Рейтинг темы: голосов - 21, средняя оценка - 4.76
0 / 0 / 0
Регистрация: 20.01.2015
Сообщений: 30

Сравнить строки в 2 столбцах каждую с каждой

20.01.2015, 22:03. Показов 4740. Ответов 69
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Прошу помощи у опытных людей. данные формируются вот в таком виде (файл приложен). Задача: в столбцах F и G (это координаты Х и У) сравнить строки, т.е. точку с номером 1 (строка 3) сравнить именно по координатам в этих 2х столбцах со всеми последующими точками. При совпадении координат присваивать точкам одинаковый номер, но наименьший. после этого перенумеровать все номера точек, т.к. если например точка №1 совпала с точкой №20 то 20я точка становится тоже №1, а точки №20 нет в нумерации. нумерация должна поменяться на такую: 18, 19, 1, 20, 21... Соответственно после этого проверяется точка №2 со всеми последующими и все то же самое по кругу. Пустые строки при этом должны остаться, и вся другая информация тоже остается как есть.
Сижу несколько дней уже, никак не могу разобраться как сделать, даже примеры представленные на сайте не получается переделать. Сейчас делаю все это вручную, а точек бывает ну оочень много.. Помогите люди добрые))
Вложения
Тип файла: xlsx координаты.xlsx (22.8 Кб, 9 просмотров)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.01.2015, 22:03
Ответы с готовыми решениями:

Как сравнить элемент 0 строки матрицы с элементом каждой строки
Есть матрица int n = {{1,1,0},{0,0,1},{1,0,0}}; int a = new int; for (int i=0;i<n.length-1;i++){ ...

Сравнить каждое слово из заданной строки с первый словом каждой строки в файле
Ребят, помогите!!! Уже наверное неделю мучаюсь(( Что не так? все время какие то ошибки. Задача такова: Нужно сравнить каждое слово из...

Сравнить строки каждой матрицы
даны 2 массива сравнить строки каждрй матрицы если 1-й элемент 1-го массива больше чем у 2-го то нужно записать ее как 1а если меньше то 0,...

69
Заблокирован
21.01.2015, 08:08
Студворк — интернет-сервис помощи студентам
я и говорю, результаты совпадений можно переписать в столбец, а затем всё перенумеровать
в крайнем случае можно вести паралельную коллекцию, которая бы хранила нужный порядок

Добавлено через 15 минут
ладно, вы там пока догадывайтесь как сделать, у меня дела..
но на всякий случай я буду вносить свои изменения в этот файл который у меня с таким названием Kopchik.xls не срочно же
1
0 / 0 / 0
Регистрация: 20.01.2015
Сообщений: 30
22.01.2015, 09:02  [ТС]
ничего не выходит
0
Заблокирован
22.01.2015, 09:35
где что не выходит ?, что вы попытались сделать
и чего ожидаете ?

Добавлено через 25 секунд
у меня всё выходит
1
0 / 0 / 0
Регистрация: 20.01.2015
Сообщений: 30
22.01.2015, 09:37  [ТС]
плюнул уже. я в программировании не силен. пытался найти готовые алгоритмы и внедрить в этот.
0
Заблокирован
22.01.2015, 09:40
Цитата Сообщение от Kopchik Посмотреть сообщение
плюнул уже
ну плюнул, так плюнул, значит оно вам не особо надо, ну и я пойду тоже готовые файлы выброшу в корзину
1
0 / 0 / 0
Регистрация: 20.01.2015
Сообщений: 30
22.01.2015, 09:42  [ТС]
так а у вас получилось что ли?
0
 Аватар для Апострофф
9912 / 3933 / 743
Регистрация: 11.10.2011
Сообщений: 5,914
22.01.2015, 09:43
Без особых изысков -
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Sub renumb()
Dim r&, rr&
For r = 2 To ActiveSheet.UsedRange.Rows.Count
  If Cells(r, 3) > 0 Then
    For rr = r + 1 To ActiveSheet.UsedRange.Rows.Count
      If Cells(r, 6) = Cells(rr, 6) Then
        If Cells(r, 7) = Cells(rr, 7) Then
          Cells(rr, 3) = Cells(r, 3)
        End If
      End If
    Next rr
  End If
Next r
End Sub
надеясь, что правильно понял задачу?
2
Заблокирован
22.01.2015, 09:46
Цитата Сообщение от Kopchik Посмотреть сообщение
так а у вас получилось что ли?
ну вот смотрите, сначало нужно было найти совпадения
я это реализовал, вывел в столбик, затем произвёл расчет по порядку, так-же надо было ?
1
0 / 0 / 0
Регистрация: 20.01.2015
Сообщений: 30
22.01.2015, 09:52  [ТС]
Да! меняет нумерацию у совпадающих. осталось только чтобы у тех которые остаются неизменными нумерация была сплошная. чтобы нумерация менялась после каждой перенумерованной точки. тоесть точку 9 переименовал в точку 5 и нумерация во всем файле сдвинулась 7,8,5,9,10 и т.д. потом перенумеровал следующее совпадение, и снова перенумерация во всем файле
0
Заблокирован
22.01.2015, 09:56
Цитата Сообщение от Kopchik Посмотреть сообщение
тоесть точку 9 переименовал в точку 5 и нумерация во всем файле сдвинулась 7,8,5,9,10 и т.д.
ну есть такое дело у меня, я знаете почему это решил., потомучто уже делал такое задание
наподобие, только оно посложнее было, там нужно было в ворде найти страницы, автора
и список литературы, поэтому сейчас для меня подобные задачи не трудные
1
0 / 0 / 0
Регистрация: 20.01.2015
Сообщений: 30
22.01.2015, 09:56  [ТС]
там если сначала перенумеровать совпадения, а потом один раз весь файл целиком, то вся нумерация съедет и те номера точек которые совпадали уже совпадать не будут
0
 Аватар для Апострофф
9912 / 3933 / 743
Регистрация: 11.10.2011
Сообщений: 5,914
22.01.2015, 09:57
Цитата Сообщение от Kopchik Посмотреть сообщение
Да
это вы с кем сейчас говорили?
1
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
22.01.2015, 09:58
Сразу требуется уточнение: максимальновозможный размер таблицы?
При больших размерах цикл в цикле при таком способе обработки:
Visual Basic
1
 If Cells(r, 6) = Cells(rr, 6) Then
Может оказаться слишком длительным.
Массивы рулят
2
0 / 0 / 0
Регистрация: 20.01.2015
Сообщений: 30
22.01.2015, 10:00  [ТС]
я здесь с одним человеком разговариваю)

Добавлено через 59 секунд
строк в таблице всегда разное количество доходит и до 10000
0
Заблокирован
22.01.2015, 10:13
Цитата Сообщение от Kopchik Посмотреть сообщение
я здесь с одним человеком разговариваю)
на всякий случай, хочу вас предостеречь от подобных высказываний,
если в беседу еще ктото подключается, то оно может для Вас быть очень полезным

Добавлено через 1 минуту
Цитата Сообщение от Alex77755 Посмотреть сообщение
Массивы рулят
всё верно, соглашусь..
1
0 / 0 / 0
Регистрация: 20.01.2015
Сообщений: 30
22.01.2015, 10:18  [ТС]
нет нет! вы что! я имел ввиду что в беседе участвовали только вы (Night Ranger), а Апострофф процитировал мой ответ как то странно, я никому ничего не писал здесь больше, только на вопросы Night Ranger отвечал. Просто вопроса то не понял! а к Alex77755 моё высказывание вообще никак не относится. Простите, уважаемые форумчане, никого не хотел обидеть! это я недопонял. Не обижайтесь)
0
Заблокирован
22.01.2015, 10:28
Цитата Сообщение от Kopchik Посмотреть сообщение
Апострофф процитировал мой ответ как то странно
Ничего не странно, он прямо и сказал без изысков, а значит простым перебором

Добавлено через 3 минуты
Апострофф вообще молодец, я б ему везде где только можно спасибки ставил..
1
0 / 0 / 0
Регистрация: 20.01.2015
Сообщений: 30
22.01.2015, 10:35  [ТС]
"ДА" я ответил на ваш вопрос, поэтому показался странным вопрос "с кем говорили?" просто свой ответ я сформулировал не верно. не хотел обижать, грубо отвечать!
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
22.01.2015, 10:55
Лучший ответ Сообщение было отмечено Kopchik как решение

Решение

Мой "пятак" (применимо для больших объёмов)
Нумерация не нужна: ставится новая
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub QWERT()
Dim M(), K, r, T, OD: Set OD = CreateObject("Scripting.Dictionary")
M = Range("A1").Resize(Cells(Rows.Count, 1).End(xlUp).Row, 12)
    For r = 3 To UBound(M)
        If M(r, 6) <> "" Then
            T = M(r, 6) & ";" & M(r, 7)
            If Not OD.exists(T) Then K = K + 1: OD(T) = K
            M(r, 3) = OD(T)
        End If
    Next r
Range("A1").Resize(Cells(Rows.Count, 1).End(xlUp).Row, 12) = M
MsgBox "Уникальных точек " & K & " из " & UBound(M), 64, ""
End Sub
Добавлено через 6 минут
Сорри пустые строки из счётчика не исключил в сообщении
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Sub QWERT()
Dim M(), K, r, T, J, OD: Set OD = CreateObject("Scripting.Dictionary")
M = Range("A1").Resize(Cells(Rows.Count, 1).End(xlUp).Row, 12)
    For r = 3 To UBound(M)
        If M(r, 6) <> "" Then
        J = J + 1
            T = M(r, 6) & ";" & M(r, 7)
            If Not OD.exists(T) Then K = K + 1: OD(T) = K
            M(r, 3) = OD(T)
        End If
    Next r
Range("A1").Resize(Cells(Rows.Count, 1).End(xlUp).Row, 12) = M
MsgBox "Уникальных точек " & K & " из " & J, 64, ""
End Sub
1
0 / 0 / 0
Регистрация: 20.01.2015
Сообщений: 30
22.01.2015, 11:17  [ТС]
что то не пойму если открыть все в одном файле, что было и что стало, то вот например точек с обозначением в первом столбце [28] стало меньше чем было..

Добавлено через 5 минут
похоже на то что я как раз описывал. сначала программа находит все совпадения например 50я с 30й но потом когда создается новая нумерация, 30я становится 31ой и 50ю он совсем исключает
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.01.2015, 11:17

Для каждой строки матрицы найти и напечатать сумму значений элементов расположенных в столбцах с четными номерами
Помогите написать програму Для каждой строки матрицы найти и напечатать сумму значений элементов расположенных в столбцах с четными...

Как сравнить все числа каждой строки матрицы с заданным числом? VB 6.0
Даны натуральное число n, действительное число х, действительная матрица размера n х 2n .Получить последовательность b(1), ... , b(n) из...

В каждую из двух матриц вставить заданные числа перед максимальным элементом каждой строки.
1)Даны матрицы A и B при N=10,M=5,K=7,L=6 В каждую из двух матриц вставить заданные числа перед максимальным элементом каждой строки. ...

Сравнить длину строк, первый и последний символ каждой строки, вывести с заглавной буквы
Добрый вечер господа форумчане!Помогите решить задачу. Заранее спасибо. Запросите у пользователя две строки и сравните их длину, первый...

Процедуры и функции: Определить максимальный элемент каждой строки , отсортировать каждый столбец, затем каждую строку
Создать массив целых чисел 11 х 11 Определить максимальный элемент каждой строки , отсортировать каждый столбец, затем каждую строку


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru