У меня данных много бывает, самое большое, что было - это порядка 8000 значений, из них уникальных около 1200, если ничего не путаю. Раньше прописывал ручками через фильтрацию, но пришел к выводу, что время от времени попадаются одни и те же значения, поэтому надо как-то автоматизировать процесс, чтобы не выполнять двойную работу изо дня в день.
Знаю, что есть какие-то надстройки на эксель, но это не мой вариант. Не всегда есть под рукой комп, а устанавливать на чужую машину доп софт не всегда удобно.
Hugo, все работает отлично. Спасибо большое за решение.
Остается вопрос только с самим макросом. Уж очень сильно он нагружает проц, работает в 12 потоках ((( Может быть у кого-то есть менее требовательный код ?
Юрий М, слова "томат" и "свежий" должны тянуться из столбцов L и M. Но не тянутся, поэтому я их задал руками для примера, чтобы было понятно, какие данные туда должны идти. Но видимо я всех этим только запутал (((
Сложная у меня конструкция вырисовывается, но логика такая, к уникальным параметрам подставляем значения из словаря, если они имеются, потом из уникальных разбрасываем параметры по основному списку.
Юрий М, так я с этими ошибками и пришел. В столбцах F и G выделил значения желтым, их задал вручную и они подставляются. Но мне надо связать их со словарем, а при связки выдается ошибка ((( Поэтому и поднял эту тему.
Андрей_26, из этих уникальных значений я и формирую словарь для однотипных данных. Если их нет в словаре, то я буду видеть, для каких значений их необходимо добавить. Как-то так.
Работаю с большим объемом однотипных данных. Стоит задача, чтобы к каждому уникальному значению присвоить 2 параметра.
Частично задачу реализовал, но есть 2 проблемы, с которыми самостоятельно справиться мне не под силу (((
1. Нашел в сети макрос, который вычленяет уникальные значения и выводит их в отдельный столбец. Работает вроде как исправно, но при большом объеме данных перегружает процессор i7 вешает комп ((( Буду признателен, если кто-нибудь предложит более оптимизированную альтернативу ему.
Скрытый текст
Код
Function listUnique(rng As Range) As Variant
Dim val As String
Dim elements() As String
Dim elementSize As Integer
Dim newElement As Boolean
Dim i As Integer
Dim distance As Integer
Dim allocationChunk As Integer
Dim uniqueSize As Integer
Dim r As Long
Dim lLastRow As Long
lLastRow = rng.End(xlDown).Row
elementSize = 1
unqueSize = 0
distance = Range(Application.Caller.Address).Row - rng.Row
If distance <> 0 Then
If Cells(Range(Application.Caller.Address).Row - 1, Range(Application.Caller.Address).Column).Value = "" Then
listUnique = ""
Exit Function
End If
End If
For r = 1 To lLastRow
val = rng.Cells(r)
If val <> "" Then
newElement = True
For i = 1 To elementSize - 1 Step 1
If elements(i - 1) = val Then
newElement = False
Exit For
End If
Next i
If newElement Then
uniqueSize = uniqueSize + 1
If uniqueSize >= elementSize Then
elementSize = elementSize * 2
ReDim Preserve elements(elementSize - 1)
End If
elements(uniqueSize - 1) = val
End If
End If
Next
If distance < uniqueSize Then
listUnique = elements(distance)
Else
listUnique = ""
End If
End Function
2. Формулой реализована подстановка параметров к каждому уникальному значению. С решением помогли тут. Это работает. Но когда пытаюсь аналогичным способом подставить данные - выходит #ССЫЛКА!.
И наверное 3-я проблема, которая плавающая, иногда ячейка E3 оказывается пустой, хотя в E2, E4 и далее есть данные. Не могу сейчас получить пустоту, но пару раз проскакивала. Грешу на макрос или затуп компа.
Прикрепляю пример моего файла https://yadi.sk/d/p_kZ1x6v2CxNHg. Логика работы такая, столбец А содержит данные, столбец E - только уникальные из столбца А. Столбцы F и G -параметры, которые подставляются в столбцы B-C на основе уникальных значений. Задача, связать столбцы E и K, для подстановки параметров из словаря.
Благодарю.
Много букв, наверное ничего не понятно написал, но как смог - так и объяснил свою проблему.
aequit, супер. спасибо. Одним головняком меньше. Но все же, какие параметры менять, чтобы менять столбец вывода ? Мне в следующий раз будет уже не удобно Вас просить поменять столбец в случае чего (((
aequit, чет сравнивал я два кода и так и не разобрался ((( В моем обновленном варианте появился столбец, где формулой делается первая буква заглавной. Прикрепляю мой обновленный пример и на всякий случай код, как я пытался модифицировать.
Скрытый текст
Код
Sub Zamena()
'aequit 24.02.2020
Dim k&, l&, sl, s$
Dim w As Worksheet
Set w = Worksheets("Лист1")
sl = Range("Словарь")
For l = 2 To w.Cells(Rows.Count, 3).End(xlUp).Row
s = w.Cells(l, 3)
For k = 1 To UBound(sl)
If InStr(1, w.Cells(l, 3), sl(k, 1)) > 0 Then
s = Replace(s, sl(k, 1), sl(k, 2))
End If
Next k
w.Cells(l, 4) = s
Next l
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("C:C")) Is Nothing Then Exit Sub
Application.ScreenUpdating = False
Call Zamena
Application.ScreenUpdating = True
End Sub
Буду признателен, если укажите, где у меня ошибка, чтобы самостоятельно мог менять столбцы и не надоедать своими просьбами подправить
aequit, в том-то и дело, что структуры финальной нет ((( Пока только формирую файлик, поэтому меняю постоянно туда-сюда для оптимизации своей работы )))
Доброго времени суток. Либо лыжи не едут, либо пора в отпуск. Никак не могу победить стоящую задачу.
Есть список со значениями (столбец А). Формулой вытаскиваю из него только уникальные значения (Столбец I). Задача состоит в том, чтобы рядом с каждым уникальным значением я прописал 2 параметра и они автоматически передались в основной список (Столбцы В и С).
Наверное непонятно объяснил, поэтому прикрепляю пример, на отдельный лист вынес, какой результат хочу получить в итоге.
Последний вопрос. Сейчас немного модернизировал свою таблицу, никак не пойму, как изменить столбец вывода ((( В данный момент данные должны браться из столбца В и с корректировками отображаться в столбце С.
Nordheim, если честно, так и не понял, как он работает
aequit, супер, то, что надо. Вот только хотелось бы, чтобы без кнопки все работало, на полном автомате. Если в рамках одной страницы полную автоматизацию реализовать нельзя, то результаты с корректировками можно вынести на отдельную страницу, это не принципиально.
Андрей VG, Вы правы. Я гуманитарий до мозга костей, код дается очень тяжко. Если с формулами еще хоть как-то могу разобраться на основе готовых решений в сети, то с VBA вообще не ладится (((
Nordheim, aequit, спасибо большое. Вечером протестирую и отпишусь
Доброго времени суток. Вторые сутки пытаюсь нагуглить подобный функционал, но пока безуспешно. Вдруг у кого-то есть что-то подобное.
Суть задачи, есть 2 страницы, одна с исходными данными, вторая со словариком. Макрос должен найти на странице точные совпадения со словами из словаря (столбец А) и в случае нахождения совпадения заменить найденное слово на соответствующее (столбец B). В процессе "словарь" будет расширяться. Будет использоваться, как кириллица, так и латиница, если это конечно важно )))
Заранее благодарю всех, кто не прошел мимо и помог в реализации задуманного.
Kuzmich, разобрался. Спасибо. А нельзя сделать так, чтобы макрос был всегда активен ? А то получается, что каждый раз при внесении изменений его надо заново запускать.
Доброго времени суток. Подскажите пожалуйста, как сделать проверку на наличие спец. символа с строке, и если он есть - ничего не трогать, если нет - поставить знак плюса перед каждым словом.
Пример:
[мама мыла раму] -> [мама мыла раму] - есть спец символ квадратная скобка. Если она есть, то данную строку (ячейку) не трогаем маша ела кашу -> +маша +ела +кашу - в строке нет спецсимвола в виде квадратной скобки, следовательно ставим перед каждым словом плюсик
В данный момент у меня плюсы подставляет вот такая формула:
День добрый. Есть файл поручений, где за каждым сотрудником записывается, какое он выполнил. Мне необходимо автоматом посчитать, количество выполненных поручений. В арсенале имею только один столбец в таблице.