Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 След.
Выделить повторяющиеся строки ячейки в каждой ячейке массива ячеек
 
 Спасибо, tolstak, все работает как надо
Выделить повторяющиеся строки ячейки в каждой ячейке массива ячеек
 
Исправил описание.
Выделить повторяющиеся строки ячейки в каждой ячейке массива ячеек
 
Добрый день. Прошу Вашей помощи. Вот похожая задача, но здесь речь идет об удалении повторяющихся значений. Описание ниже.

В столбце B есть несколько ячеек, каждая из которых содержит несколько строк, разделенных между собой символом новой строки.
Необходимо пробежать по массиву этих ячеек и выделить текст совпадающих в одной ячейке строк красным цветом. И так для каждой ячейки.
Файл-пример ниже. Там показан исходный файл и что стало потом.
Изменено: Piddy - 24.08.2017 16:16:34
Список наименований всех листов из нескольких книг
 
yozhik,подскажите пожалуйста, можно ли при генерации наименований листов сохранить также соответствующее файлу (в столбце B) содержание столбцов C,D,E?
Я правильно понял, что в этом фрагменте кода необходимо добавить для каждого дополнительного столбца (C, D, E) соответствующую строку: mass(3, a) = key и т.д.?
Код
Sub ls()
Dim dic, key As Variant, wb As Workbook, mass(), sh As Worksheet
Set dic = CreateObject("Scripting.Dictionary")
i = 2
Do While Cells(i, 2).Value <> ""
    V = dic.Item(Cells(i, 2).Value)
    i = i + 1
Loop
For Each key In dic.keys
    Set wb = Workbooks.Open(key)
    For Each sh In wb.Worksheets
        a = a + 1
        ReDim Preserve mass(1 To 5, 1 To a)
        mass(1, a) = sh.Name
        mass(2, a) = key
        mass(3, a) = key
        mass(4, a) = key
        mass(5, a) = key
    Next
wb.Close 0
Next
Range("A2").Resize(a, 2).Value = Application.Transpose(mass())
End Sub
Пробовал запустить исправленный макрос, но не получилось.
Переименовать диапазон ячеек к единому образцу на основе регулярного выражения
 
Добрый вечер.

В сводной таблице, которую делало несколько человек допущено много ручных ошибок. Задача - исправить эти ошибки, но не отфильтровывая каждый раз выделенный диапазон, а применяя регулярное выражение.

В файле-примере в столбце С приведен диапазон C2:C673, в котором необходимо произвести переименование. Уникальные значения столбца C приведены в листе "уник значения из ст. С". Например,
Код
наименование  муниципального района
Наименование  бюджетов муниципальных районов
Нименование  бюджетов муниципальных районов
Наименование  бюджета муниципального района
Эти ячейки имеют общую маску *менован*+*+мун*+рай*, где * - любое количество символов после слова, + означает пробел
После применения макроса все ячейки этой маски должны получить следующее название:
"Наименование бюджетов муниципальных районов"

Аналогично и с другими вариантами, то есть пользователю открывается диалоговое окно, где он вводит запрос "*менован*+*+мун*+рай*" в виде поиска и "Наименование бюджетов муниципальных районов" в виде ответа. Макрос пробегается по диапазону и переименовывает содержащие такой запрос ячейки к единому формату.

Есть ли какие идеи? На форуме есть вопросы о применении регулярок, но пример переименования диапазона ячеек отдельным запросом я не нашел.

Заранее благодарен.
Изменено: Piddy - 13.07.2017 21:04:11
Переименование листов из нескольких книг на основе данных ячейки, Рекурсивно, основой переименования служит таблица с данными.
 
Цитата
Piddy написал:
Заметил только, что 5% не обрабатываются, но это какие-то специфические книги. Имена у их листов не совсем стандартные.
Разобрался, дело было в том, что наименования листов имели длину выше нормы. Спасибо Вам за 100% рабочее решение.

Тему пока не закрывайте, так как есть предложения усовершенствовать макрос, чтобы им могли пользоваться и остальные форумчане. Я уверен, что у кого-то точно была потребность в соответствующем макросе.
Переименование листов из нескольких книг на основе данных ячейки, Рекурсивно, основой переименования служит таблица с данными.
 
Nordheim,макрос работает успешно. Заметил только, что 5% не обрабатываются, но это какие-то специфические книги. Имена у их листов не совсем стандартные.
yozhik, а access позволяет проводить аналогичные преобразования с именами листов до импорта в базу данных?
Переименование листов из нескольких книг на основе данных ячейки, Рекурсивно, основой переименования служит таблица с данными.
 
Nordheim,понял, сейчас проверю.
Переименование листов из нескольких книг на основе данных ячейки, Рекурсивно, основой переименования служит таблица с данными.
 
Nordheim,пока не знаю. Я правильно понял, что реализовать переименование сразу нескольких листов для всех книг - задача технически сложная и проще сделать ее ручками?
Переименование листов из нескольких книг на основе данных ячейки, Рекурсивно, основой переименования служит таблица с данными.
 
Nordheim,я проверил макрос, он работает, спасибо Вам за ваши труды. Сейчас буду детально разбираться в коде.
Что касается ситуации, когда для одной книги необходимо переименование нескольких листов, то здесь на реальных файлах следующая картина. Существует порядка 30 масок в столбце A, которые подставляются в качестве переименования листов, указанных в столбце B. В столбце B возможно порядка 200 различных наименований листов, которые должны быть обработаны.
Есть вариант отфильтровывать строки по каждой маске, создавать новый лист, содержащий в столбце A именно данную маску и применять к нему Ваш макрос. Но идея состояла в том, чтобы иметь возможность переименовывать имена листов по всем маскам разово, так как файлы приходят ко мне каждый день и я их обновляю.
Переименование листов из нескольких книг на основе данных ячейки, Рекурсивно, основой переименования служит таблица с данными.
 
Nordheim,значит мы оба идентично рассуждаем.
Цитата
Piddy написал:
есть книга "abc 215_215.2.xlsx" у него листы false_sample_2016, false_sample 2017, false_sample_2018 и каждому из них присваивается свое наименование, указанное в столбце A.
Прочитайте пожалуйста измененный комментарий выше.
Изменено: Piddy - 13.07.2017 10:33:42
Переименование листов из нескольких книг на основе данных ячейки, Рекурсивно, основой переименования служит таблица с данными.
 
Цитата
Nordheim написал:
бывает ситуация когда в одном файле нужно менять наименование 2 листов?
Я правильно вас понял, что вы имеете в виду изменять наименование 2 листов в одной книге? Объясню на примере, есть книга "abc 215_215.2.xlsx" у него листы false_sample_2016, false_sample 2017, false_sample_2018 и каждому из них присваивается свое наименование, указанное в столбце A. И может быть несколько таких файлов.
Или же вы имеете в виду ситуацию, когда нужно присвоить имена листам в одной книге, и получается, что им возможно могут присвоиться одинаковые имена?
Цитата
Nordheim написал:
если бывает больше одного листа то нужен пример во что.
И это совсем другой код и переменные!
Да, но ведь цикл в коде у вас пробегает по все листам книги
Код
With book2
        For Each sh In .Worksheets
            If sh.Name = dicOb.Item(ikey) Then sh.Name = dicOb1.Item(ikey)
        Next sh
        .Close True
    End With
Значит теоретически если он еще раз пробежится по столбцам A,B, то сможет присвоить новое наименования оставшимся листам.
Цитата
Nordheim написал:
Про 44-46 строки, там тоже один лист, разве не так?
Извините, не перезалил файл. См. к этому сообщению вложение.  
Изменено: Piddy - 13.07.2017 10:31:51
Переименование листов из нескольких книг на основе данных ячейки, Рекурсивно, основой переименования служит таблица с данными.
 
Nordheim,да, бывает, пример смотрите в строках 44-46
Переименование листов из нескольких книг на основе данных ячейки, Рекурсивно, основой переименования служит таблица с данными.
 
Nordheim,несовпадение, см. файл. example (1).xlsx  
Переименование листов из нескольких книг на основе данных ячейки, Рекурсивно, основой переименования служит таблица с данными.
 
Я для себя выделял в рабочем файле листы для переименования и соотвествующие им ячейки желтым, и в столбце A добавлял наименования листов которые должны быть, поэтому рационально взять в качестве критерия несовпадение.

Добавил файл, чтобы вы поняли.
Изменено: Piddy - 13.07.2017 09:40:20
Переименование листов из нескольких книг на основе данных ячейки, Рекурсивно, основой переименования служит таблица с данными.
 
Nordheim,изменения только в тех файлах, содержащих листы, переименование которых требуется согласно жёлтым ячейкам столбца B. Возможно я переборщил с желтым цветом, но на желтизну стоит смотреть только для ячеек в столбце В.
Изменено: Piddy - 13.07.2017 08:36:29
Переименование листов из нескольких книг на основе данных ячейки, Рекурсивно, основой переименования служит таблица с данными.
 
Nordheim,Во втором столбце. То есть например в строке 4 "false_sample_ad" должен замениться на "true sample". И так ещё для трёх строк.
Переименование листов из нескольких книг на основе данных ячейки, Рекурсивно, основой переименования служит таблица с данными.
 
Коллеги, спасибо за идеи
Nordheim,разобрался в Вашем коде.
Насколько я понял, код работает для значения ячейки b2, но суть в том, что сначала макрос должен пробегать по всем 51 строкам столбца B и если они помечены желтым/содержат заполенную ячейку в столбце A, то такому листу присваивается имя
kuklp, я пробовал запустить Ваш код
Код
Public Sub www()
    Dim wb As Workbook, i&
    On Error Resume Next
    For i = 2 To 52
        If Cells(i, 2).Interior.ColorIndex = 6 Then
            Set wb = Workbooks.Open(Cells(i, 7).Value, False)
            wb.Sheets(Cells(i, 2).Value).Name Cells(i, 1).Value
            wb.Close -1: Set wb = Nothing
        End If
    Next
End Sub

Он правильно запускает цикл по файлам, но не делает (судя по Debug) цикл по всем листам на предмет соответствия имен листов значению столбца B. Я попытался добавить цикл переименования листов по критерию, но пока получилось только так.
Код
Public Sub www()
    Dim wb As Workbook, i&
    On Error Resume Next
    For i = 2 To 52
        If Cells(i, 2).Interior.ColorIndex = 6 Then
            Set wb = Workbooks.Open(Cells(i, 7).Value, , False, , , , , , , True)
            For Each sh In wb.Worksheets
                sh(Cells(i, 2).Value).Name.Activate = Cells(i, 1).Value
            Next
            wb.Close 0
            End If
    Next
End Sub
Плюс надо учесть, что перед переименованием лист должен быть соответствующий лист должен быть открыт, что я попытался добавить в код
Изменено: Piddy - 13.07.2017 00:33:57
Создать строки данных из ячеек, содержащих массив данных
 
После обсуждения с исполнителем, мною было принято решение самостоятельно доработать макрос и отказаться от первоначального ТЗ. В переписке по почте изложил свою позицию и выражаю благодарность JeyCi за компетентность и знание нюансов, которые я не учел в ТЗ.
Переименование листов из нескольких книг на основе данных ячейки, Рекурсивно, основой переименования служит таблица с данными.
 
Добрый вечер.

Необходимо автоматически переименовывать листы книг из нескольких книг на основе ячеек таблицы.Данные по файлам и листам создаются на основе макросов.
Файл-пример приведен во вложении. Есть 4000 excel файлов с разным именованием листов книг. Я создаю структуру файлов книг и листов в таблице на основе макроса, но не знаю как реализовать рекурсивное переименование листов книг на основе критерия в таблице. Критерий следующий.

В столбце G указаны пути к файлам. Столбец B содержит имена листов в соответствии с именем файла. Некоторые файлы содержат более одного листа.
Листы, названия которых должны быть переименованы подсвечены желтым. Например, лист в именем "false_sample_ad" должен быть переименован в "true_sample". НО. Есть листы, которые называются "false_sample 2017", поэтому они должны быть переименованы в "true_sample_2"

Пока получилось набросать только вариант с переименованием листов текущей книги на основе одной ячейки. Как это оформить в виде цикла для пробега по столбцам - не додумал.
Код
Sub RS()
For i = 1 To Sheets.Count
If Worksheets(i).Range("A1").Value <> "" Then
Sheets(i).Name = Worksheets(i).Range("A1").Value
End If
Next
End Sub

Есть ли какие-то идеи? Сам процесс также тяжело проделать вручную, так как файлов очень много.

Заранее благодарен.
Создать книгу из отсортированных по имени листов, взятых с нескольких книг
 
Позднее идея состояла в том, чтобы в уже разработанный макрос добавить необходимый параметр, который принимает в качестве фильтра несколько аргументов. Коллеги, есть ли у кого идеи как доработать макрос без потери его функционала, но с учетом возможности фильтровать подгружаемые листы из нескольких аргументов?
Изменено: Piddy - 07.07.2017 20:01:17
Создать книгу из отсортированных по имени листов, взятых с нескольких книг
 
JeyCi,я проверил макрос - к сожалению генерация не работает и видимо это связано с тем, что первоначальный макрос не подразумевал ситцации, когда у нас названия листов в книге совпадают.
Изменено: Piddy - 07.07.2017 20:00:34
Список наименований всех листов из нескольких книг
 
yozhik,спасибо Вам большое - получилось решить задачу
Список наименований всех листов из нескольких книг
 
yozhik, при открытии файла из которого берутся наименования листой выдает такую ошибку

Пока пытаюсь разобраться в коде
Изменено: Piddy - 07.07.2017 16:41:01
Список наименований всех листов из нескольких книг
 
Владимир, вы не совсем поняли. Необходимо, чтобы в столбце A были наименования листов для соотвествующего наименования файла excel - выделено желтым. И так для всех файлов столбца B согласно столбцу C.
Изменено: Piddy - 07.07.2017 15:23:40
Список наименований всех листов из нескольких книг
 
Добрый день.

На сайте есть отличный макрос, который позволяет делать список excel файлов. Вопрос, можно ли приспособить данный макрос. чтобы он выгружал для каждого excel файла наименования всех его листов? Скрытых листов нет.
Насколько я понял нужно в код макроса добавить цикл пробега по содержимому файла excel, а уже потом отдельными строками делать вывод под наименованиями этих файлов.  
Создать строки данных из ячеек, содержащих массив данных
 
На все вопросы ответил в личку
Создать строки данных из ячеек, содержащих массив данных
 
Цитата
JeyCi написал:
Piddy  я не знаю, что вы смотрели и что у вас получилось и что хорошо?.. там есть код по ветке и мой линк на ветку, где есть мой код - это разные коды!... 1-й код работает с массивом - т.е. всё ваше форматирование - полетит!.. и формулы не вставяться там...
по моей схеме могу сделать (но там передЕлывать или тоже с нуля) под ваш файл...
Переписал макрос Sub ReTable() - поменял столбцы и диапазон. Генерация происходит, но макрос не решает задачу удаления старых строк, работы в отфильтрованном диапазоне и т.д.

Если делать с сохранением формул будет дольше, тогда компромисс - формулы убираем, но сгенерированные строки как-то помечаем, например если в столбце А номер строки был 465 и содержал в массиве два значения, то нужно убрать 465 и сделать 465.1 и 465.2 соотвественно.

Оплата картой сбера, могу конечно на wmr скинуть если есть сервис карта сбера -> webmoney. По бюджету не знаю, но давайте определимся как решить задачу максимально проще. В-общем в личку написал вам.
Создать строки данных из ячеек, содержащих массив данных
 
Цитата
JeyCi написал:
можете посмотреть  пример здесь
Посмотрел пример, применил к своим данным, все хорошо, но формулы не сохраняются, а это важно, так как генерация 8000 строк со значениями создаст большой файл с которым будет трудно работать, нежели с файлом содержащим те же строки, но с формулами. Исправьте пожалуйста, если не прав.
Создать строки данных из ячеек, содержащих массив данных
 
Цитата
JeyCi написал:
там ведь всё равно задвоения в столбце О строках 8-12?
В листе "Исх" изначально были скрыты строки с номером более 474, поэтому обработка была осуществлена только для выделенных строк.
Страницы: 1 2 След.
Наверх