Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: формирование таблицы Excel из 2-х других файлов Ex Добавлено: 15.11.08 18:58  

Автор вопроса:  ЕвгеничЪ
Доброго времени суток!

господа, прошу помощи...
ситуация следующая, на работе приходится формировать одну таблицу эксель из двух других фалов эксель, т.к. работать с большими таблицами до 700-900 строк вручную достаточно тяжело, то есть острая необходимость автоматизировать (хотя бы частично) процесс...
суть такова:
из сетевой программы (сеть по многим предприятиям) выгружаются данные в таблицу эксель (отдельный файл естественно)... назовем его файл А.
там представленные данные об операциях, выполняемых определенными должностными лицами с затратами времени...
дело в том, что эти операции (в силу возможности сетевой программы видимо) имеют длинну не более 60 символов, т.е. полное название и описание на влезает...

так же имеется файл Б, т.н. "Классификатор операций", в котором все эти операции есть в полном объеме и с корректной длинной...
так же около каждой операции в соседней ячейке есть ее шифр...

конечный генерируемый файл должен содержать:

шифр операции (из фалй Б)...
Полное название самой операции (из Б)
и временные затраты (из А)


т.е. необходимо взять неполное (или такое какое там имеется) название операции из файла А, найти такое же (или же более полное) в файле Б... (в Б операции не повторяются)...

и сгенерировать таблицу в виде:
1 ячейка - Шифр (шифр находится в Б, рядом с названием операции... в соседней от нее ячейке)...
2 - полное название (из Б)
3 Временные затраты (из А)

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

Спасибо за внимание!


зы естественно можно фалы А и Б поместить в один на разные листы и сформировать лист 3... разницы нет, потом все "причешу" и "разгребу"...

  Ответы Всего ответов: 14  

Номер ответа: 1
Автор ответа:
 ЕвгеничЪ



Вопросов: 1
Ответов: 6
 Профиль | | #1 Добавлено: 15.11.08 19:22
http://slil.ru/26335714

тут в архиве 3 файла...
А, B и желаемый результат...
попрошу обратить внимание, что в фале А названия операций бывают не полные (хотя не всегда), надо найти полное название в файле Б и уже его поместить в конечный (желаемый) результат.
Номер ответа: 2
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #2 Добавлено: 15.11.08 19:37
ЕвгеничЪ, большое спасибо что подробно описали суть вашей проблемы.
Для того, чтоб можно было ее решить, не хватает совсем немного информации, а именно - размер гонорара тому, кто возьмется за ее решение, и условия работы - я уверен, исключительно из-за своей высокой занятости, вы забыли указать это в оригинальном сообщении.
Номер ответа: 3
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #3
Добавлено: 15.11.08 19:43
=) жжом) Хотя, ты, безусловно, прав)
Номер ответа: 4
Автор ответа:
 ЕвгеничЪ



Вопросов: 1
Ответов: 6
 Профиль | | #4 Добавлено: 15.11.08 19:55
хммм... тогда ответьте мне пожалуйста, идеология этого форума - коммерция?
если да, то вопросов больше не имею...
если нет, то для чего был ваш пост?
Номер ответа: 5
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #5 Добавлено: 15.11.08 20:16
Я думаю идеология форума - прежде всего - помощь в поиске ответов на вопросы, решении проблем.

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

Предполагать же, что сейчас все сломя голову бросят свои дела, пойдут качать ваши файлы и писать за вас код, я думаю, безперспективно.
Номер ответа: 6
Автор ответа:
 ЕвгеничЪ



Вопросов: 1
Ответов: 6
 Профиль | | #6 Добавлено: 15.11.08 20:34
хорошо, возможно первое мое сообщение было не достаточно корректным... точнее не достаточно полным...
ситуация в том, что я сам не имею опыта програмирования в VBA...
хотелось получить начальный толчек, т.е. от чего плясать и с какого конца начать...
если кто может наставить на путь истиннный буду благодарен!
 зы фалйлы были выложенны на случай, если кто то пожелает наглядно увидеть проблему...
вот так...
Номер ответа: 7
Автор ответа:
 Nytrogen



Вопросов: 18
Ответов: 186
 Профиль | | #7 Добавлено: 16.11.08 00:45
 
Steel Brand, у тебя однако есть чувство юмора. Я понимаю, что в мире кризис, но всё же надо держать себя в рамках разумного =)

ЕвгеничЪ, вот мой вариант макроса. Он записывает результат на Лист2 файла А. Создайте в файле Б модуль в VBE и поместите туда этот макрос. Запускайте его при каждом обновлении файла А.

  1. Option Explicit
  2.  
  3. 'это путь к файлу А относительно файла Б;
  4. 'во время выполнения программы файл А должен быть открыт
  5. Const pathA As String = "A.xls"
  6. 'количество сверяемых символов слева для поиска операции
  7. Const patternLen As Byte = 25
  8.  
  9. Sub GenerateDataSheet()
  10.   Dim rangeA As Range
  11.   Dim rangeB As Range
  12.   Dim rangeRes As Range
  13.   Dim row As Integer
  14.   Dim searchRow As Integer
  15.   'запоминаем диапазон файла A
  16.   With Workbooks(pathA).Worksheets("Лист1")
  17.     Set rangeA = .Range("A2", .Range("B2").End(xlDown))
  18.   End With
  19.   'запоминаем диапазон файла Б
  20.   With ThisWorkbook.Worksheets("Лист1")
  21.     Set rangeB = .Range("A2", .Range("B2").End(xlDown))
  22.   End With
  23.   'запоминаем диапазон для вывода результата;
  24.   'в моём случае это Лист2 файла А
  25.   Set rangeRes = Workbooks(pathA).Worksheets("Лист2").Range("A2")
  26.  
  27.   'заполняем...
  28.   For row = 1 To rangeA.Rows.Count
  29.     'ищем искомую строку в файле Б
  30.     For searchRow = 1 To rangeB.Rows.Count
  31.       If Left(rangeA.Cells(row, 1).Value, patternLen) = Left(rangeB.Cells(searchRow, 2).Value, patternLen) Then
  32.         Exit For
  33.       End If
  34.     Next searchRow
  35.     'строка найдена, записываем строку результата
  36.     rangeRes.Cells(row, 1).Value = rangeB.Cells(searchRow, 1).Value
  37.     rangeRes.Cells(row, 2).Value = rangeB.Cells(searchRow, 2).Value
  38.     rangeRes.Cells(row, 3).Value = rangeA.Cells(row, 2).Value
  39.   Next row
  40.  
  41. End Sub
Номер ответа: 8
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #8
Добавлено: 16.11.08 00:55
Вот, накатал кое-что. Качайте =)
http://vbnet.ru/temp/Executioner.xls
Вознаграждение опционально.
Номер ответа: 9
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #9
Добавлено: 16.11.08 01:00
Nytrogen, вот покодишь ты с наше и поймешь, что на энтузиазме долго не проживешь =) Но сейчас выдалась свободная минутка, вот и сделал.
Номер ответа: 10
Автор ответа:
 ЕвгеничЪ



Вопросов: 1
Ответов: 6
 Профиль | | #10 Добавлено: 16.11.08 11:07
большое человеческое спасибо!
щас буду разбирацца!

а про интузиазм? хммм... по разным форумам ходил...
и ведь помогают, причем даже в жизни выручают... вот так..

про вознаграждение опционально...
говори, коли так, шо должон?
Номер ответа: 11
Автор ответа:
 ЕвгеничЪ



Вопросов: 1
Ответов: 6
 Профиль | | #11 Добавлено: 16.11.08 11:13
Nytrogen, примного благодарен!!!
Номер ответа: 12
Автор ответа:
 Nytrogen



Вопросов: 18
Ответов: 186
 Профиль | | #12 Добавлено: 16.11.08 11:35
Executioner:
вот покодишь ты с наше и поймешь, что на энтузиазме долго не проживешь

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

З.Ы. И много Вы наживаетесь на форумах?
Номер ответа: 13
Автор ответа:
 ЕвгеничЪ



Вопросов: 1
Ответов: 6
 Профиль | | #13 Добавлено: 16.11.08 11:53
подожди, мы просто еще не покодили с ихнее... потому не понимаем...
ну а вообще, местному админу должно быть лучше видно, что должно происхходить на форуме...

тем не менее всем большое спасибо, тему можно закрыть...
Номер ответа: 14
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #14
Добавлено: 16.11.08 13:19
Мы не жлобы и не жадные =) Мы тоже люди и хлеб трудом зарабатываем. Но на форуме я всегда помогаю на халяву =)
Тема закрыта.

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам