У друга возникла проблема, ему нужно данные переносить с экселя на сайт по работе. И таких строк данных там на часов 20 ручной работы.
И мне самому стало интересно, может ли эксель производить подобный алгоритм работы с браузером, желательно с хромом конечно. Спасибо заранее за любые подсказки Видео алгоритма приложил: https://www.youtube.com/watch?v=OEXXKKl_K4o
Как сделать что бы формулы эти работали в любом выделенном диапазоне. У меня они работаю только в том диапазоне в котором я записывал рекордером. На сколько я понимаю диапазон тут проставляется: "RC[-1]" но как правильно прописать, для формулы работу с выделенным диапазоном?
Код
Sub ПРОПНАЧ()
Selection.FormulaR1C1 = "=PROPER(RC[-1])"
End Sub
Sub ПРОПИСН()
Selection.FormulaR1C1 = "=UPPER(RC[-1])"
End Sub
Просьба помочь с этим кодом. Принцип работы: Берет значения из столбца С (у меня макрос реагирует тут на изменение в ячейке, т.к каждый раз добавляется новое слово и его нужно найти) и ищет их в столбце B, далее помечает найденные ячейки желтым. Все работает как надо, только есть одно НО. При большом кол-ве текста и при добавлении искомых слов (они регулярно добавляются) И чем больше искомых слов то тем дольше он думает. Я так понял, он каждый раз заново все искомые слова обрабатывает и ищет в тексте, хотя он уже их находил и уже пометил цветом, и вот нужно объяснить ему что бы он эти слова больше не искал если он их уже нашел и пометил один раз. Получается ему нужно реагировать на каждое искомое слово только один раз и больше не искать его. Заранее большое спасибо кто сможет помочь!
Есть макрос - он сцепляет между собой слова между строками. Нужно переделать, что бы он сцеплял между собой слова из столбцов. Самое главное сохранить нынешние функции макроса и его скорость обработки.
Пример: Сейчас макрос сцепляет все слова из первой строки со словами из следующих. Нужно все тоже самое только между столбцами. Что бы слова из первого столбца сцеплялись со всеми словами из последующих заполненных столбцов.
Приложил пример, там более понятно все. На первом листе как все работает сейчас, а на втором как все должно быть.
Такой проблем у меня. Не могу понять почему этот макрос срабатывает при изменении на всем листе, а не в прописанном в коде диапазоне (A9:A10000). В итоге при любом изменении на листе срабатывает макрос.
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Range("A9:A10000"), Target) Is Nothing Then
del_space ' - тут все нормально, этот код никак не воздействует
End If
If Not Intersect(Target, Columns(1)) Is Nothing Then
Dim arrA(), I&, J&, splitA
On Error Resume Next
arrA = Range("A9:A" & Cells(Rows.Count, "A").End(xlUp).Row).Value
With CreateObject("Scripting.Dictionary")
For I = 1 To UBound(arrA)
splitA = Split(arrA(I, 1))
For J = 0 To UBound(splitA)
If Not IsEmpty(splitA(J)) Then
iTemp = .Item(splitA(J))
End If
Next
Next
Application.EnableEvents = False
Application.ScreenUpdating = False
Range("B9:C9").Resize(UBound(.Keys) + 1) = Application.Transpose(.Keys)
End With
With Me.Sort
.SortFields.Add Key:=Range("B:C"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.Apply
End With
End If
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
Макрос работает так: Берет значение в столбце Б - слова которые нужно заменить, на слова из столбца С и он меняет все эти слова в тексте в столбце E.
1. сделать чтобы учитывался регистр *(если в B указано заменить "ВаСя!" то только это слово должно быть заменено а не другие ваСи тоже) 2. сделать условие при котором не учитывались слова, если они идентичны (в столбце В и С - одинаковые слова) 3. настроить на работу именно с отдельными словами (если пишу "сони" то должно заменится именно слово "сони" - а не все слова в которых есть сочетание этих букв) 4. нужно максимально ускорить работу макроса (работает с большим объемом данных)
Интересует такой функционал, в интернете вроде ничего такого нет.
Так вот суть: Имеем диапазон заполненных ячеек с каким то текстом к примеру: А9:A20. В каждой ячейке небольшие предложение от 1-20 слов. И нужно допустим перенести определенные слова (которые мы укажем в диапазоне ячеек B9:B20 к примеру) допустим эти слова в ячейке в середине предложения или в конце и их нужно перенести вперед предложения (тут наверное нужно будет как то либо по словам определятся или пробелам).
В примере подробнее все расписал, разрисовал. Как говорится, прошу к шалашу)
P.S. Столбец С эксперементальный, не обязательный, кто захочет может поигратся. Основной функционал макроса перенос определенного слова если оно есть в ячейке, перед первым словом
Добрый вечер. В файл-примере код с примером фраз для обработки, макрос удаляет последний символ в словах. Но он подтормаживает и это всего на 200 строках, про большие данные я вообще промолчу. Как можно ускорить данный макрос для максимальной производительности с большими данными?
И так, после некоторых раздумий по данной довольно непростой задаче, пришла довольно простая идея решения этой проблемы. И в примере я детально и очень емко описал два коротких условия которые решают эту проблему. *(Вкладка "Условия") Теперь только нужно их перевести в работу макроса и протестировать. *(Примечание: объем данных бывает большим от 1000 слов до 50.000 и больше - нужно это учесть, т.к очень важна максимальная скорость работы с большими данными)
Заранее благодарю всех кто откликнется!
P.S. про совпадения типа: торт и торг... Такие слова в моих данных почти не попадаются и если попадаются то это не критично. Так что данные слова не стоят отдельного создания для них условий. И даже если они попадутся такие слова то вряд ли они пересекутся т,к они по описанным условиям работы будут поподать под свои категори торт к ктортам а торг к торгам и торгошам.
В предоставленном файле-примере есть код который нужно адаптировать на счет не слов в строке а символов. Подскажите пожалуйста как это сделать. Работает он с большим кол-вом данных, самое главное сохранить его скорость работы. Спасибо заранее!
Есть у меня такой файлик с формулами которые помогают распределить фразы по столбцам. В первый столбец поподают фразы из А2 - фразы которые содержат от 1 до 3 слов. Во второй столбец уже по тойже схеме переносит от 3 до 10 слов и т.д (в примере все настроено только для отделения фраз от 0 до 3)
Так вот проблема в том что вся эта бандура сильно тормозит при большом объеме данных.
Нужно реализовать этот функционал в макросе с максимально быстрой обработкой изначальных данных.
Либо попробовать уместить все формулы в одну и попробовать запихнуть ее в код и уже в массиве все обрабатывать. Но как склеить эти формулы пока нету догадок.
Добрый вечер, нашел макрос тут. Так вот хотел бы узнать как проще его переделать так что бы он помечал не ячейки в которых он находит словосочетания, а именно эти слова которые и находит. Пробовал рекордером и переделками своими что то сваять, но выходит слишком огромный и идиотский код)
Так вот как он работает, он ищет по списку слов в одном столбце и помечает в другом столбце те ячейки в которых нашел то или иное слово. Так вот нужно чуть переделать, что бы он как раз эти слова и помечал в ячейках. К примеру в списке для поиска есть слова - словоформы (Екатери, Евгени, Анатол и т.д - так он находит все склоненные слова с этим корнем) ищет совпадения в столбце с фразами и вот в каждой ячейке где он нашел он помечает красным те слова которые были в списке для поиска (Анатолий, Анатолия, Екатерины, Екатерина, Евгения, Евгений) - вот тут как раз нужно уточнить, что бы он пометил полностью слово до конца а не его словоформу типо: Анатолий, Екатерины и т.д
Пример приложил
P.S желательно не менять структуру всего кода, я в нем только разобрался и он мне удобен, работает все как надо) Только нужно поменять последние строки отвечающие за определение слов и пометку их цветом.
P.S.S да он щас не помечает ячейки а слова, я немного поменял функцию
Добрый день уважаемые форумчане. Такой вопрос возник. Есть список на Листе 1 и вот с этого списка нужно из первого столбца перенести (в данном случае имена сотрудников) ячейки на против которых в строке есть от 5 и более (цифра условная тоже - пока неизвестно сколько не пустых ячеек нужно находить - диапазон поиска будет менятся неоднократно)заполненых ячеек ( не пустых ). Столбцов всего планируется около 7- 10 в которых будут эти данные (в примере 7). Получается нужен ВПР только по горизонтали и который будет считать не пустые ячейки. Вот такая вот интересная задумка. Буду рад любой помощи. Пример приложил. На листе1 исходный список, на листе2 то что должно получится.
Добрый день. Нашел на просторах интернета данный макрос. Реализован он в OpenOffice. Нужно его перенести в Excel. Подскажите как правильно все переписать, что бы работал абсолютно идентично и без лишних багов.
Принцип действия: Два листа (Ядро,Карта). В листе Карта берутся словоформы из столбца А, С, Е и т.д (при добавление в 1 строку названия столбца, он становится активным для макроса, значит по нему тоже нужно осуществлять поиск в ключевых словах) Эти словоформы макрос ищет в листе Ядро в столбце А. После того как он находит соответствующую словоформу в ключевых словах, то он напротив ячейки где нашел словоформу подставляет маркер который прописан для этой словоформы в листе с Картой (Маркеры ставятся в соседних столбцах справа от словоформ в листе Карта - это столбцы B, D, F) - (к словоформе в столбце А, подставляется маркер из столбца B и т.д). Результат в примере:
Код
Sub Categorize
Dim Cursor As Object, Map As Object, Range As Object
Dim NumColumns As long, Col As long, NumRows As long
Dim Head As String
Map = ThisComponent.Sheets.getByName("Карта")
Cursor = Map.createCursor
Cursor.gotoEndOfUsedArea(True)
NumColumns = Cursor.Columns.Count
For Col = 0 To NumColumns - 1 Step 2
Head = Map.getCellByPosition(Col, 0).String
If Head <> "" Then
NumRows = LastRowWithData(Col) + 1
ParseMap(Head, Col, NumRows)
End If
Next Col
MsgBox "Готово! Теперь можно посетить https://devaka.ru/ :)"
End Sub
Sub ParseMap (ByVal Head as String, ByVal Col as long, ByVal NumMarks as long)
Dim Names(1 To NumMarks) As String, Keys(1 To NumMarks) As String
Dim Core As Object, Map As Object, Cell As Object, Source As Object, Cursor As Object
Dim I, J, NumRows, CellIndex
CellIndex = GetCellByName(Head)
Core = ThisComponent.Sheets.getByName("Ядро")
Map = ThisComponent.Sheets.getByName("Карта")
For I = 1 To NumMarks
Keys(I) = Map.getCellByPosition(Col, I-1).String
Names(I) = Map.getCellByPosition(Col + 1, I-1).String
Next I
Cursor = Core.createCursor
Cursor.gotoEndOfUsedArea(True)
NumRows = Cursor.Rows.Count
For I = 1 To NumRows
Source = Core.getCellByPosition(0, I)
Cell = Core.getCellByPosition(CellIndex, I)
For J = 1 To NumMarks
If InStr(LCase(Source.String), LCase(Keys(J))) > 0 Then
Cell.String = Names(J)
End If
Next J
Next I
End Sub
Function GetCellByName (Head as String)
Dim Core As Object, Cursor As Object
Dim J
Core = ThisComponent.Sheets.getByName("Ядро")
Cursor = Core.createCursor
Cursor.gotoEndOfUsedArea(True)
NumColumns = Cursor.Columns.Count
For J = 1 To NumColumns
If Core.getCellByPosition(J - 1, 0).String = Head Then
GetCellByName = J - 1
Exit Function
End If
Next
Core.Columns.insertByIndex(1, 1)
Core.getCellByPosition(1, 0).String = Head
GetCellByName = 1
End Function
Function LastRowWithData (ColumnIndex as long) as long
Dim Cursor As Object, Range As Object, Map As Object
Dim LastRowOfUsedArea as long, R as long
Dim RangeData
Map = ThisComponent.Sheets.getByName("Карта")
Cursor = Map.createCursor
Cursor.gotoEndOfUsedArea(False)
LastRowOfUsedArea = Cursor.RangeAddress.EndRow
Range = Map.getCellRangeByPosition(ColumnIndex, 0, ColumnIndex, LastRowOfUsedArea)
Cursor = Map.createCursorByRange(Range)
RangeData = Cursor.getDataArray
For R = UBound(RangeData) To LBound(RangeData) Step - 1
If RangeData(R)(0) <> "" then
LastRowWithData = R
Exit Function
End If
Next
End Function
Искал что то похожее в Екселе никто этим не занимался вроде, только в этом же источнике кто то выложил нечто подобное видимо, но сайт не рабочий у них да и старая тема.. до автора той ссылки вряд ли докопаться можно.
Добрый вечер всем. Появилась надобность в макросе который работает как обычный инструмент удаления дубликатов в екселе, только он удаляет дубли которые идентичны на 100%.. можно ли сделать все тоже самое только, что бы он удалял похожие дубли на 70-80%.
Как должно получаться: есть три слова: "процент" "процентов" "процентная" он проверяет все слова ПО НАЧАЛУ слова, на сколько они похожи, берет последнее слово, т.к оно самое длинное, от него берет 80% и смотрит если остальные под них подходят.
Приложил пример с тем как это должно выглядеть.
P.S Все должно работать с кириллицей и латинницей Ну и если слова одинаковые на 100% то понятно, что удаляются. А цифры должны удаляться только по 100% совпадению. Т.к есть даты и года. К примеру 2018 год и 201 номер. может совпасть и удалить год
Он по исходнику со значениями ищет в искомом столбце совпадения и помечает их желтым. Так вот нужно последние действие заменить не на пометку желтым а на вырезание (вместе с ячейкой, что бы пустая ячейка не оставалась посреди искомого столбца) и перенос в другой столбец(к примеру в Е5)
В столбец в который он будет переносить будут еще другие данные, и если они там есть, то нужно что бы он ставил найденные данные в конце после существующих а не ставил поверх них или удалял их.
Так вот главное для меня это скорость работы макроса, помогите правильно все это прописать так, что бы все работало правильно и быстро. Сам не знаю как такое прописать адекватно. Написал пару вариантов но они ужасные)
Может что то непонятно объяснил, в примере нагляднее все расписал.
P.S данный макрос почти никакого отношения не имеет к другой недавно созданной теме, они предназначены для разных вещей и выполняют разные задачи, и в них так же разные проблемы.
Всем привет, такой вопрос. Как ограничить макрос, что бы он не срабатывал при удалении данных.
У меня в листе стоит макрос на срабатывании при событии в диапазоне. Все отлично только когда я удаляю данные в том диапазоне он срабатывает (это мне не нужно) еще и багуется и ексель зависает. Как тут прописать, что бы он не работал при очистке данных из диапазона его работы?
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Range("A1:B1000"), Target) Is Nothing Then Macros1
End Sub
Здравствуйте, подскажите пожалуйста, что в этом макросе не так. Должен протягивать ячейки диапазона (от G8 до AC8)до последней заполненной строки (заполненные столбцы от 1 до 6)
По идее верно записал, но работает только до 86 строки. Подскажите что не так и почему именно до 86 заполняет? Спасибо!
Код
Sub prot()
Dim LastRow As Long
LastRow = Cells(Rows.Count, 1).End(xlUp).Row
With Range("G8:AC8")
.AutoFill Destination:=Range("G8:AC8" & .End(xlUp).Row)
End With
End Sub
Добрый день. Есть несколько формул которые взаимодействуют друг с другом.
Пробовал по разному все делать но пока никак не могу придумать как реализовать все до автоматизма. Сейчас я в ячейке подгоняю значения в ручную. Там все получается зависит друг от друга и получается срабатывают циклические ссылки. Нужно этого как то избежать.
Так вот в ячейке Е34 =значение из ячейки Е33*-умножается на значение 30 в среднем (в данный момент в примере) Вот это значение 30 должно менятся в зависимости от ячейки G34 в которой должен быть показатель от 0,2 до 0,9. А в этой чейке эти показатели высчитываются ссылаясь как раз на Е34 и поэтому полчается все зацикливается.
Возможно тут не все понятно объяснил в примере все проще и нагляднее. Прошу к шалашу *(в пример).
У кого какие идеи есть выкладывайте, я уже кучу вариантов перепробовал, не знаю уже как сделать.
Такая задача встала. В приложении к теме есть файл. В нем есть функция. Нужно перенести эту функцию полностью в макрос. Нужно что бы макрос работал именно как эта функция. Т.к работать нужно с большими объемами, а протягивать так формулами все неудобно да и это сильно нагружает файл и систему. И еще эта функция не работает с латинницей. Нужно добавить еще латинницу.
Есть такая проблемка которая уже долгая время доводит до белого кипения.
Есть тип файлов с которым я постоянно работаю, это статистика с данными по фразам из яндекс директа выгружаемая непосредственно из специального сервиса яндекса.
Так всегда данные файлы крашат Ексель при выделении и копировании.. по моим замечаниям. (По моему предположению данное явление связано с выделением простых ячеек и дальнейшем заходом на объединенные ячейки- чисто замечание..возможно не из за этого.. но внимание пало на это)
Так вот эти данные нужно постоянно копировать, и файл раз через раз ломает Ексель и приходится делать все заного и это очень напрягает делать по 50 раз.
P.S Замечалось данное явление на нескольких компах с разными версиями екселя (новые и старые). Писал в поддержку Яндекса но пока внятного ответа не дали.
Буду очень благодарен кто сможет найти причину данной проблемы. Пример приложил. (Достаточно повыделять данные и копировать)
Нужен простой парсер сайта сервиса Яндекс.Директ по контекстной рекламе, Парсер сайта с предварительным заполнением полей и последующей выгрузкой данных после обработки
Я делаю свой проект для контекстной рекламы в екселе. Для него мне нужно дополнение в виде парсера сайта Яндекс.Директ. Я мог бы попробовать замарочиться и сам сделать но пока нету времени. Нужно получать с него данные и загружать уже в мой рабочий файл для дальнейшей обработки данных. Нужен простенький парсер, который я смогу адаптировать и внедрить уже к своему файлу
1. Парсер заходит на сайт https://direct.yandex.ru/registered/main.pl?cmd=advancedForecast 2. Проверяет если есть авторизация (если нету то ошибку выбивать должен) 3. Должен заполнить три поля с данными. (Все эти данные будут находится в рабочем файле, их он и должен будет вставлять в сайт для последующей обработки) 3.1 Поле с регионом 3.2 Поле с фразами 3.3 Еще одно поле с фразами другого характера 4. После обработки сайтом данных, сайт предоставляет выгрузки этих данных с разными настройками. Нужно получить три выгрузки из предложенных. (Проблема в том что бы получить каждый расчет, уходит много времени, Сервис сильно тормозит)
Единственная проблема в том что сервис адово тормозит при каждом обновлении этих данных. Если у кого то получится быстро получать данные сразу по всем выгрузкам и что бы это все было скомпановано красиво в рабочем файле, еще немного добавлю. Для подробностей пишите в ЛС, свяжусь по скайпу объясню подробнее какие данные нужно заполнять и получать. Задача вроде не тривиальная и максимально простая, хочу уложится в бюджет около 400-500 рублей. Если сработаемся, то будем в будущем еще сотрудничать. Пока бюджет маленький, проект начинающий. Кто согласиться пишите в ЛС всем отвечу. Если работа не стоит назначенного бюджета, просьба аргументированно ответить по каким причинам, без агрессии и злобы. Опишите если возможно такое сделать или нет. Повторюсь парсер должен быть максимально простым (в рабочем файле и так очень много макросов взаимодействующих друг с другом постоянно.) Пишите свои идеи и мысли, возможно все это упростить и какими методами.
Добрый день. Такая проблема: Макрос работает с диапазоном только до 99 строки, если я до 99 строки вставляю текст он срабатывает как надо, разделяет текста и по словам отдельно вставляет их в столбец "I". Если же я в изначальном диапазоне поставлю текста больше чем 99 строк, то уже ничего не работает. Покажите, ткните носом пожалуйста, что тут не так. Вот код: (пример так же приложил)
Код
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo err
If Not Intersect(Target, Columns(1)) Is Nothing Then
If IsEmpty(Range("A5:A10")) Then
End
Else
Dim arrA(), I&, J&, splitA
On Error Resume Next
arrA = Range("A5:A" & Cells(Rows.Count, "A").End(xlUp).Row).Value
With CreateObject("Scripting.Dictionary")
For I = 1 To UBound(arrA)
splitA = Split(arrA(I, 1))
For J = 0 To UBound(splitA)
If Not IsEmpty(splitA(J)) Then
iTemp = .Item(splitA(J))
End If
Next
Next
Application.ScreenUpdating = False
Range("I5").Resize(UBound(.Keys) + 1) = Application.Transpose(.Keys)
End With
With Me.Sort
.SortFields.Add Key:=Range("I:I"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.Apply
End With
End If
End If
Application.ScreenUpdating = True
err:
End Sub