Страницы: Пред. 1 2
RSS
При наличии нескольких совпадений на двух листах, добавить строки на первый и скопировать данные
 
почитайте выше, я изменил своё сообщение выше (у вас Автофильтр включен в Дата выписки на листе Page1. - Снимете его)

P.S. Я смотрю у вас совсем плохо с Excel...
Изменено: New - 04.02.2021 22:47:12
 
Цитата
New написал:
P.S. Я смотрю у вас совсем плохо с Excel...
ну я с ним можно сказать не работаю сейчас, очень давно было
 
New, а как быть со сравнением двух столбцов (Вид ОМС(первый лист) и Код вида лечения(второй лист)), тобишь берем человека у которого только по одной записи в каждом листе, нужно сравнить эти два столбца(чтоб значения до нижнего подчеркивания были одинаковые)
каким способом это можно сделать?
 
объясню. для удобства фильтрации таблицы на листе Excel компания Microsoft придумала инструмент под названием Автофильтр (в быту просто Фильтр).
Допустим у вас есть большая таблица - как у вас на листе Page1 и ваша задача отфильтровать её оставив только людей, у которых регион страхования "г.Москва".
для этого вам нужно (если на листе ещё не установлен Автофильтр)
1. Выделить всю таблицу начиная с шапки (то есть начиная от ячейка А1 до конца вниз вправо, ячейка AB230)
2. далее меню Данные - Фильтр (в блоке Сортировка и Фильтр)
В шапке таблицы во всех столбцах появится значок фильтра (внизу справа ячейки)
Теперь вы можете устанавливать фильтры в каждом столбце вашей таблицы.
При установке фильтра - все строки, которые не подошли под ваше условие будут скрываться!
Установите фильтр в столбце G - г.Москва - часть строк останется видна, часть скроются.
Чтобы снять Фильтр - можно, как я уже показал выше в своих сообщениях, нажать на значок фильтра в шапке таблицы (ячейка G1) и выбрать "Выделить все" или Удалить фильтр из столбца.
Если вы установили фильтр на много столбцов сразу и хотите снять все фильтры со всех листов, то меню Данные - Очистить (в блоке сортировка и фильтр)
Изменено: New - 04.02.2021 23:08:56
 
Хорошо
Цитата
Tr Tr написал:
а как быть со сравнением двух столбцов (Вид ОМС(первый лист) и Код вида лечения(второй лист))
А с этим как быть? есть какой-то метод?
 
если просто ответить на ваш вопрос - как это сделать, то ответ - циклами. Как вы проверяете на задвоения.
Тут надо писать логику работы макроса (кода). Если коды совпадают, то что делаем? А если отличаются, то что делаем?
 
то что циклами это понятно, коды просто выглядят совсем по разному
в первом листе как пример вот так : 370_st37.007_Медицинская реабилитация.  или так 08.00.16.013_23681
во втором листе вот так: 370 или так 08.00.16.013

вопрос будет правильнее поставить так, как вытащить из первого листа значение до нижнего подчеркивания?
Изменено: Tr Tr - 04.02.2021 23:31:27
 
Привет!

Вытащить из "370_st37.007_Медицинская", "370":

Код
Function LeftFrom( _
   sValue As String, _
   separa As String) _
   As String

   LeftFrom = Split(sValue, separa)(0)

End Function
Сравнение прайсов, таблиц - без настроек
 
как пример, как вытащить значение до нижнего подчёркивания

Код
Sub test()
Dim LastRow As Long, i As Long, ValueFromA As String
Dim A As Worksheet, B As Worksheet
    
    Set A = Worksheets("Page1")
    Set B = Worksheets("Лист2")

    'снимаем фильтры
    If A.FilterMode = True Then A.ShowAllData
    If B.FilterMode = True Then B.ShowAllData

    LastRow = A.cells(Rows.count, 1).End(xlUp).Row
    For i = 2 To LastRow
        'если в ячейке есть нижнее подчёркивание
        If InStr(1, A.cells(i, 12), "_", vbTextCompare) > 0 Then
            ValueFromA = Split(A.cells(i, 12), "_")(0) 'разделяем строку через Split по знаку _ и берём первое значение
            'или так
            'ValueFromA = Left(A.cells(i, 12), InStr(1, A.cells(i, 12), "_", vbTextCompare) - 1)
        End If
    Next i

End Sub
 
Inexsu, а функция универсальна? там есть несколько видов как сделали вы, есть вот такой 08.00.16.013_23681 и вроде еще какой-то
и если не сложно, можете кратенько рассказать что из этого что?
заранее спасибо!
Изменено: Tr Tr - 04.02.2021 23:37:51
 
Inexsu, вернитесь!!! а то я устал уже
 
Цитата
New написал:
If InStr(1, A.cells(i, 12), "_", vbTextCompare) > 0 Then        
  ValueFromA = Split(A.cells(i, 12), "_")(0)
Если не сложно, можете объяснить что из этого что, а именно, vbTextCompare и на нижней строке (0)?
Это последние мои вопросы, в принципе остальное наверное сам додумаю
 
Цитата
Tr Tr написал:
что из этого что?
Код
Split(sValue, separa) 'разобьёт Svalue на массив одномерный по разделителю separa
Split(sValue, separa)(0) ' вернёт элемент массива с индексом 0
Сравнение прайсов, таблиц - без настроек
 
1. vbTextCompare это четвёртый аргумент функции InStr. Вот её описание
https://docs.microsoft.com/ru-ru/office/vba/language/reference/user-interface-help/instr-function

InStr([ начало ], строка1, строка2, [ сравнение ])

2. В C# тоже есть функция Split и она точно так же работает как и в VBA.
Вот её описание https://docs.microsoft.com/ru-ru/office/vba/language/reference/user-interface-help/split-function
(0) - это вернуть первый (начиная с нуля) аргумент после разбития строки на подстроки
Изменено: New - 04.02.2021 23:47:34
 
Inexsu, принцип понял.
Спасибо огромное!!!
 
New, а вас я вообще не знаю как отблагодарить, такие тупые вопросы терпели и мои кривые объяснения)
 
Ничего страшного. Как возникнет вопрос - создавайте новую тему и прикладывайте файл-пример (небольшой, всю таблицу не надо). Желательно один вопрос - одна тема. Цитировать полностью всё сообщение другого собеседника не надо. И всё будет хорошо и мы вам поможем
Страницы: Пред. 1 2
Наверх