господа, прошу помощи...
ситуация следующая, на работе приходится формировать одну таблицу эксель из двух других фалов эксель, т.к. работать с большими таблицами до 700-900 строк вручную достаточно тяжело, то есть острая необходимость автоматизировать (хотя бы частично) процесс...
суть такова:
из сетевой программы (сеть по многим предприятиям) выгружаются данные в таблицу эксель (отдельный файл естественно)... назовем его файл А.
там представленные данные об операциях, выполняемых определенными должностными лицами с затратами времени...
дело в том, что эти операции (в силу возможности сетевой программы видимо) имеют длинну не более 60 символов, т.е. полное название и описание на влезает...
так же имеется файл Б, т.н. "Классификатор операций", в котором все эти операции есть в полном объеме и с корректной длинной...
так же около каждой операции в соседней ячейке есть ее шифр...
конечный генерируемый файл должен содержать:
шифр операции (из фалй Б)...
Полное название самой операции (из Б)
и временные затраты (из А)
т.е. необходимо взять неполное (или такое какое там имеется) название операции из файла А, найти такое же (или же более полное) в файле Б... (в Б операции не повторяются)...
и сгенерировать таблицу в виде:
1 ячейка - Шифр (шифр находится в Б, рядом с названием операции... в соседней от нее ячейке)...
2 - полное название (из Б)
3 Временные затраты (из А)
возможно буддет не понятно, если так, то могу создать фалы для примера... для наглядности...
очень надеюсь на помощь, дыбы уже все глаза стер об этот эксель, а еще очень много надо наделать таблиц...
Спасибо за внимание!
зы естественно можно фалы А и Б поместить в один на разные листы и сформировать лист 3... разницы нет, потом все "причешу" и "разгребу"...
тут в архиве 3 файла...
А, B и желаемый результат...
попрошу обратить внимание, что в фале А названия операций бывают не полные (хотя не всегда), надо найти полное название в файле Б и уже его поместить в конечный (желаемый) результат.
ЕвгеничЪ, большое спасибо что подробно описали суть вашей проблемы.
Для того, чтоб можно было ее решить, не хватает совсем немного информации, а именно - размер гонорара тому, кто возьмется за ее решение, и условия работы - я уверен, исключительно из-за своей высокой занятости, вы забыли указать это в оригинальном сообщении.
Я думаю идеология форума - прежде всего - помощь в поиске ответов на вопросы, решении проблем.
Впрочем, в вашем оригинальном сообщении ни одного вопроса не было озвучено, т.е. не понятно даже на каком этапе все затормозилось - вы хотите оптимизировать быстродействие своего кода, котоырй это делает, или же все остановилось намного раньше и вы не знаете как запустить программу Excel.
Предполагать же, что сейчас все сломя голову бросят свои дела, пойдут качать ваши файлы и писать за вас код, я думаю, безперспективно.
хорошо, возможно первое мое сообщение было не достаточно корректным... точнее не достаточно полным...
ситуация в том, что я сам не имею опыта програмирования в VBA...
хотелось получить начальный толчек, т.е. от чего плясать и с какого конца начать...
если кто может наставить на путь истиннный буду благодарен!
зы фалйлы были выложенны на случай, если кто то пожелает наглядно увидеть проблему...
вот так...
Steel Brand, у тебя однако есть чувство юмора. Я понимаю, что в мире кризис, но всё же надо держать себя в рамках разумного
ЕвгеничЪ, вот мой вариант макроса. Он записывает результат на Лист2 файла А. Создайте в файле Б модуль в VBE и поместите туда этот макрос. Запускайте его при каждом обновлении файла А.
Option Explicit
'это путь к файлу А относительно файла Б;
'во время выполнения программы файл А должен быть открыт
Const pathA AsString = "A.xls"
'количество сверяемых символов слева для поиска операции
Const patternLen AsByte = 25
Sub GenerateDataSheet()
Dim rangeA As Range
Dim rangeB As Range
Dim rangeRes As Range
Dim row AsInteger
Dim searchRow AsInteger
'запоминаем диапазон файла A
With Workbooks(pathA).Worksheets("Лист1")
Set rangeA = .Range("A2", .Range("B2").End(xlDown))
EndWith
'запоминаем диапазон файла Б
With ThisWorkbook.Worksheets("Лист1")
Set rangeB = .Range("A2", .Range("B2").End(xlDown))
EndWith
'запоминаем диапазон для вывода результата;
'в моём случае это Лист2 файла А
Set rangeRes = Workbooks(pathA).Worksheets("Лист2").Range("A2")
'заполняем...
For row = 1 To rangeA.Rows.Count
'ищем искомую строку в файле Б
For searchRow = 1 To rangeB.Rows.Count
If Left(rangeA.Cells(row, 1).Value, patternLen) = Left(rangeB.Cells(searchRow, 2).Value, patternLen) Then
вот покодишь ты с наше и поймешь, что на энтузиазме долго не проживешь
Вот моё личное мнение: форум создан для того, чтобы бескорыстно делиться опытом и пополнять собственные навыки, а написание элементарных программ за деньги на форуме - это ужо буржуйство. Я не спорю, что мне действительно было нечего делать, однако ж я наоборот доволен, что мне выдалась возможность снова проверить себя во владении VBA на конкретном примере.
подожди, мы просто еще не покодили с ихнее... потому не понимаем...
ну а вообще, местному админу должно быть лучше видно, что должно происхходить на форуме...
тем не менее всем большое спасибо, тему можно закрыть...