Kuzmich, ну просто шик! Даже без прогрузки процесса! Запустил макрос и ничего не произошло. Красотища! Сегодня всё протестим, если будут вопросы, в ближайшие дни отпишусь.
Kuzmich написал: Столбец А был занят вашим примером, переделайте на А
Параметры заменил, всё отлично.
Цитата
Kuzmich написал: Так можно сделать ширину ячейки на 300 символов
Если не ошибаюсь, растягивается ячейка по ширине на 255 символов в Excel 2019. Возможно, не прав в самой цифре. Но точно знаю, что есть ограничение. Растянуть могу, но текст последней строки будет сильно заходить на соседнюю ячейку. Так ОГРОМНЫЕ текстовые значения. Скорее всего уплывет закрашенная ячейка. Завтра проверю, отпишусь.
А всё таки, можно узнать: "А возможно без сдвига?"
Так, Kuzmich, огромная благодарность за помощь! Кудесник, не иначе.. +++
а) На листе ОТКУДА берутся данные. После применения макроса заполненная правая ячейка сдвигается влево, если есть пустая ячейка (-и) слева. Я, конечно, сохраню этот вариант, на всякий случай. Но, желательно, чтобы сдвигов не было. Просто будет лютая путаница по вертикали (визуально для глаз). Я так понимаю, Вы сделали процесс таким: сначала сдвиг влево (чтобы заполненные ячейки прижались друг к другу и не было пробелов), потом копирование на нужный лист. А возможно без сдвига?
б) Не пойму, почему на конечном листе отображение идёт со столбца B? Со столбца А было бы привычнее.. Мне главное одна строчка сверху, чтобы дать шапку. Но это уже есть, всё отлично. А вот почему с В-столбца?
в) Заливка всей строки возможна? В оригинале в любой одной ячейке слов будет на 300-400 символов, поэтому закрашенная одна ячейка вообще погоды не сделает. Она растворится. Хотелось бы всю строку.
Kuzmich написал: Исходную таблицу можно видоизменять?
А есть в этом смысл? Диапазон же ведь всё время будет разный. По ширине он максимально может быть 15 столбцов. Может быть и меньше. А по высоте - и 30 строк (товаров), и 3000 строк.
И внутри диапазона ячейки, как я написал выше, непостоянны.
Попробуйте, если это так важно. Просто мне кажется в этом нет смысла, так как мой первоначальный файл не шаблон, ни в коем разе.
На этом листе "Исходные данные (2)" я произвольно удалил текст в ячейках. Пустые ячейки будут постоянно меняться. Вы можете взять мой полностью заполненный Лист 1 (12х15) из примера и произвольно удалить в любых местах текст.
Нет конкретного шаблона. Я просто в качестве первоначального примера постарался показать плюс-минус приближенный вариант того, с чем работаю. Вот допустим, другой пример. Файл.
p.s. Не я это ручками удаляю данные в ячейках, а такие исходные данные приходят со стороны.
Всех приветствую! И особенно пользователя Kuzmich!
Пару месяцев назад данный пользователь помог мне с одним макросом, указанным в этой теме.
До сих пор пользуюсь этим решением в личных целях, всё отлично! Очень рад.
Но тут на другом фронте потребовался данный макрос с небольшими доработками. Поэтому вопросы по большей части адресованы к Kuzmich'у.
Прикрепляю файл-пример. На первых двух листах показаны идеальные условия, исходные данные и что должно получиться в конечном итоге. Но подобного никогда не будет. Оставил листы просто для понимания идеальной ситуации. Будет приблизительно как на листе номер три. Не во всех ячейках всех столбцов и строк будут указаны текстовые данные.
а) В товарах 5 и 6 образовались пробелы - строки 40-42 и 56,57. Возможно ли сделать так, чтобы текст в блоке всегда шёл "друг к другу" как на листе 2. Т.е. "Товар 5 Текст 7" на 40-й строке, "Товар 5 Текст 8" на 41-й, а "Товар 6 Текст 6" соответственно поднялся бы до 53-й строки. Сохранялась бы "блочность-кучность" вне зависимости от наличия пустот в исходных данных.
б) Возможно ли увеличить пробел между блоками с 1-й строки (7,15,24) до 3-х (7-9, 17-19 и т.д.)? Желательно с "ручной настройкой" в самом макросе. Соответственно, не конфликтуя с пунктом а). Т.е. должно быть все "кучками", но с большим интервалом.
в) Возможно ли залить любым цветом вот это пробел в три строки в автоматическом режиме? Желательно, конечно, обычным красным для наглядности.
=== Это нужно для того, чтобы видеть разделение меж блоками при большом количестве строк. В данном примере я внес 12 товаров (13 строк с шапкой), а по факту их будет как минимум 1500 (1500 строк), а в худшем несколько тысяч. И нужно, чтобы а) сохранилась "кучность" (без пробелов); б) был бОльший интервал между блоками и эти пробелы были более менее видны цветом.
Вывод итога в файле поставил со второй строки. Пусть так и останется.
=== Сегодня (10.02) "на связи" до часу ночи по МСК. Завтра уже ограничен просмотр-ответ с рабочего места после 10:00 по МСК. После 19:00 снова полноценно "в сети".
То. что ручками заносил от нескольких часов до нескольких дней теперь буду делать автоматически за пару минут. Занес данные в начале и получил готовый текст в конце.
p.s. В ближайшие пару дней возможны какие-либо мелкие правки/вопросы по макросу. Но на данный момент всё работает и всё идеально!
Спасибо за предложенный вариант. Понял свои косяки, не всё в условиях указал. Во-первых, столбцы должны идти друг за другом, а у меня в огромном основном примере было не так. Исправил это. В-вторых, макрос из первых трех и пятого столбцов перенес сами формулы, а нужно, видимо, значения. И получилось так. https://postimg.cc/n9Bc72cg
По скрину видно, с первых трёх - "сцепки", а с 5-го формулу, которая ссылается на другой лист.
И в-третьих, не указал в условиях задачи, что в макросе, наверное, лучше ввести переменную (которую я буду менять ручками), чтобы перенос данных был только по кол-ву "рабочих" строк. А то "рабочих" строк у меня, к примеру, 30, а он копирует и дальше, все последующие, к примеру, 70 ошибок (пустые значения в ячейках - #ЗНАЧ! , 0 и прочее подобное).
Есть задача. Всё очень подробно расписал и показал, что должно получить в итоге, но в автоматическом (если это возможно) режиме. В прикрепленном ниже файле. Объяснить текстом это очень сложно, нужно видеть.
БМВ написал: TotalCommander + плагин tcmediainfo. правильно ли понимать, что никакого интерфейса к excel тут нет?
Не совсем понял вопрос. Там вся информация из Тotal Сommander банально ручками (копипаст) копируется в Excel. В Excel появляются все эти данные уже в виде значений, что очень удобно. И после настраивается ширина-высота ячеек и прочие "украшательства".
Если вдруг нужно будет в подробностях, пишите в ЛС. А то это совсем не по теме. Раз. И не по Excel в целом - два. Заругают..
БМВ, Итак. Мне больше всего из всех 3 предложенных вариантов понравился второй. Почему в нём не подцеплялись данные по разрешению файла? Предполагаю у нас с Вами разные операционные системы, у меня Win7.
Соответственно методом тыка (подстановки) обнаружил, что 285 - Ширина кадра; 283 - Высота кадра; 284 - Частота кадров видео (fps); 282 - Битрейт видео; 27 - Битрейт аудио.
Самое интересное, что Частоту дискретизации аудио (44100Hz, 48000Hz и т.д.) я найти параметр не смог. Проверил с 1-го по 800-й, два раза. Хотя в свойствах файлов она (Чд) есть.
Код
Private RestFolderToProc As String
Private Sub CommandButton1_Click()
FolderToProc = GetFolderPath(, RestFolderToProc)
If FolderToProc <> "" Then
Application.EnableEvents = False
RestFolderToProc = FolderToProc
Range("A11:F344").ClearContents
i = 21
' Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objShellApp = CreateObject("Shell.Application")
Set objFolder = objShellApp.Namespace(FolderToProc)
Set objFolderItems = objFolder.items()
objFolderItems.Filter 64 + 128, "*.avi;*.mp4;*.wmv;*.vob"
For Each File In objFolderItems
' Cells(i, 1) = objFSO.GetBaseName(File.Path)
Cells(i, 1) = Left(File.Name, InStrRev(File.Name, ".") - 1)
' Cells(i, 2) = objFSO.GetExtensionName(File.Path)
Cells(i, 2) = Mid(File.Name, InStrRev(File.Name, ".") + 1)
With objFolder
Cells(i, 3) = .GetDetailsOf(File, 1)
Cells(i, 4) = .GetDetailsOf(File, 27)
Cells(i, 5) = .GetDetailsOf(File, 285)
Cells(i, 6) = .GetDetailsOf(File, 283)
Cells(i, 7) = .GetDetailsOf(File, 284)
Cells(i, 8) = .GetDetailsOf(File, 282)
Cells(i, 9) = .GetDetailsOf(File, 28)
End With
i = i + 1
Next
Application.EnableEvents = True
End If
End Sub
Private Function GetFolderPath(Optional ByVal Title As String = "Выберите папку", _
Optional ByVal InitialPath As String = "c:\") As String
With Application.FileDialog(msoFileDialogFolderPicker)
If Not Right$(InitialPath, 1) = PS Then InitialPath = InitialPath & PS
.ButtonName = "Выбрать": .Title = Title: .InitialFileName = InitialPath
If .Show <> -1 Then Exit Function
GetFolderPath = .SelectedItems(1)
End With
End Function
Добавил 7, 8 и 9-й столбцы.
Вот сам файл (прикрепил к этому посту).
1) Не знаю, что делать с Частотой дискретизации аудио. Все параметры есть, кроме этого. А он (параметр) тоже нужен. 2) Как изменить размер и расположение самой кнопки Folder? Мне бы её куда-нибудь на ячейку Е2 сдвинуть. 3) 19-ю строку закрепить на 9-й (переместить и закрепить). Чтобы при ручной очистке всех ячеек на странице эта шапка оставалась на месте. 4) Ну и начало списка с 11 строки. Это как я понял параметр i = 21 (11 и пр.).
======= Третий вариант, как я понимаю, не сможет показать вот эти прочие свойства файлов? Если так, то вариант этот не подходит. Остановлюсь на втором.
И надо пробовать:
Цитата
ixet написал: Для аудио-видеофайлов давно использую TotalCommander. Плагин tcmediainfo прекрасно выводит метаинформацию. В Excel перекидывается штатными средствами TC из меню Иструменты
Всё идеально, кроме одного момента. Ни один из этих двух предложенных вариантов не подцепляет ширину и высоту кадров. Название, расширение, продолжительность - да, ширина и высота - нет.
Попробовал использовать несколько папок. И с разношёрстными форматами, и только лишь с mp4 ==> всё равно нет. В чём может быть причина?
БМВ написал: ..Только их надо прикормить шаблоном в файле формата XLS и более четким описанием задачи..
А шаблона как-такового нет, потому как директория папки (путь) будет постоянно меняться. Я это не указал в первом сообщении, потому как подумал, что знающие люди (здесь на форуме) будут отталкиваться от той формулы и полученного ею списка. Немного подкорректирую описание задачи:
1) Директория (путь) папки с файлами будет постоянно меняться. Один раз "H:\Разное\блаблабла", в другой раз "С:\Видео\блаблабла" и т.д. 2) Количество файлов (в моём случае только видеофайлы) опять же будет постоянно меняться. Максимум 333 файла (беру значение с запасом, на всякий случай). Сегодня в одной папке 10 видео, завтра в другой - 225, послезавтра в третьей - 101 и т.д. 3) В моём представлении в идеале должно всё выглядеть так. Либо на листе2 в ячейке А1, либо в макросе я вношу сам путь папки: (например "H:\Разное\блаблабла") и мне на листе2 (лист1 занят другими текстовыми данными) выдаётся информация как на данном скриншоте:
Скрытый текст
Структурно точь в точь как здесь. Обязательно с 11-й строчки и вниз. Не с 10 как на скриншоте, а с 11 и вплоть до 343 строки включительно. #ИМЯ? - с той формулы, хорошо, если подобного не будет.
а) Первый столбец - названия файлов; желательно без разрешения (без последних 4 символов: .mp4, .avi и т.д.). Но это, если что, решается формулой
Код
=ЛЕВСИМВ(адрес_ячейки;ДЛСТР(адрес_ячейки)-4)
б) Второй столбец (B11-B343) - Продолжительность, в) Третий (C11-C343) - Размер И так до столбца F (всё как на скрине выше).
Вроде бы все условия теперь указал. Что есть и что нужно получить. На скрине - как выглядит это визуально.
БМВ, снизим уровень ваших ожиданий о моих знаниях Excel практически до нуля. От этого и оттолкнёмся.
Не понял, что нужно было мне сделать.
1) В какой момент прописать этот макрос? До той формулы (с pikabu) или можно уже и после применения (получения списка)? 2) Или одно от другого вообще никак не зависит и можно без той формулы (списка) обойтись? 3) В третьей строке указать свой путь - это понятно. В четвертой и пятой строке названия двух ваших фильмов указаны (видимо, скопированы) вручную. Тут вообще ничего понял, какой порядок моих действий? Пошагово.
Так я попробовал прописать путь и названия первых двух файлов из папки --> Save Module --> Exit VBA --> Любая пустая ячейка --> Макросы-test-выполнить. Естественно, ничего. И с формулой (до и после), и без.
БМВ написал: ..MKV сложный формат, метаданные просто так vjuen светятся, но их можно разобрать или вроде если открыть его медиаплеером, то объект может дать к ним доступ..
Крайне редко у меня встречается, поэтому забудем про него. Мне бы и без него получить нужный результат.
Создал новый модуль, прописал данный текст, заменил в нём путь, сохранил. На нужном листе запустил и получилось следующее:
Скрытый текст
А я в итоге хотел бы получить следующий вид, это возможно?
Скрытый текст
Желтым идёт то, что дано на том портале, а розовым фоном то, что хотелось бы получить в итоге данной темой. Ширина и высота кадра, видимо, не подцепляются, правильно понял? Цифровые значения даны "от балды". ___ Вот эти полученные свойства для каждого файла (вся строка) потом перейдут в единую текстовую ячейку. Но это так, к слову.
Копировать чужой текст, мне кажется, не имеет смысла, там всё подробно расписано, что и для чего делается. Потому сразу вопрос.
Возможно ли добавить в соседние справа ячейки ещё и информацию о свойствах файла? Понимаю, что файлы бывают разные, но в моём случае нужны (будут) свойствавидеофайлов (avi,mp4,wmv и т.д.): Продолжительность (в виде 1:13:35 (ч/м/с)); Ширина кадра; Высота кадра; Размер; Тип.
Т.е. рядом в столбцах B-F вся эта информация. Если так (любым возможным способом), то распишите, пожалуйста, как это сделать.
Нюансы, что формат mkv не отображает всю эту информацию в проводнике и размер файла идёт в КБ. Ну да ладно, не страшно.
JayBhagavan написал: я не понимаю смысл такого извращённого ввода данных..
Все вручную начал вносить, очень удобно получается и информативно. Картинки, текст, картинки, текст. Жаль потом придется сортировать вручную на 4 листе, но да ладно.
Цитата
JayBhagavan написал: Остальные молчат, т.к., скорее всего, тоже не видят логики в таком хранении данных. И алгоритма тоже не видят.
JayBhagavan написал: Объясните, что Вы вообще делаете..
Ввожу адреса (текст) и личные данные (название). На третьем листе для каждого адреса должен быть перечень ЛД. Там где пробелы в 4 ячейки - там будут мини скрины объектов.
Цитата
JayBhagavan написал: Вам нужно менять подход к вводу..
Тут подумал, что если убрать Вариант 1 у двойного текста и оставить только второй. И получается определенная структура (промежутки) между этими подразделами (подпунктами). На 2-м и 3-м листе тоже всё в определенной последовательности. Может диапазоны как-нибудь использовать?
Скрытый текст
Если так и не появятся варианты, буду вносить всё вручную. Рассчитывал, что хоть с 4 листом смогу облегчить себе ввод.
JayBhagavan написал: по какому принципу макрос будет идентифицировать где Текст, а где Название
"как только я ввел второй раз.." - это видимо надо считать как по самому тексту, не по заливке. Заливку я сделал только для того, чтобы показать на какую ширину может идти текст по максимуму. Возможно это и не надо было делать, чтобы не путать, но всё же для наглядности. И из этого должен был вытекать ответ на второй вопрос..
Цитата
JayBhagavan написал: К чему Вы форматируете текст в ячейках пробелами
.. но я только сейчас, прочитав последние 2 слова "объединение ячеек", вспомнил, что действительно, надо было их просто объединить. Вот сейчас ещё понял, что нужно связать сам текст с названием (желтое с фиолетовым) для каждого, не знаю как обозвать, подраздела, подпункта (синим на рис. ниже). Но опять же не по заливке, её в работе вообще не будет.
Цитата
JayBhagavan написал: За хорошо составленную тему от меня лично Вам 4 из 5.
Всем доброй ночи. Вопрос сложный, надеюсь на помощь, если это вообще возможно. Суть такова.
наглядно
Вношу данные "Текст" 1, 2, 3, 4...11.. (это будут слова) и к ним "Названия". Текстов, относящихся к одному названию может быть максимум 4 (как на рис.1 справа). И вот как только я ввел второй раз "Текст" 1, 2, 4, 5... на скрине 2 автоматически в ячейку сносилось это слово "Текст n" и списком рядом (фиолетовым) названия. "Текст 1" можете видеть за все 3 листа (лист "Для 2-х", "Для 3-х" и "Для 4-х") повторился 3 раза и поэтому список "Название 1,7,9", а вот "Текст 5" повторился 6 раз - список из 6 названий. Т.е. в первые 3 листа я забиваю всё вручную, а на 4-м листе должно всё появляться автоматически. Для 2 текстов может быть 2 варианта (если, конечно, это технически возможно). Файл-пример прикрепил.