Огромна база???
18 отговора
841 прегледа
Огромна база???
Привет!
Имам един sheet в който вече има над 20,000 реда със записи. Има 5 колони, в които имам формули (и май всичките са Vlookup) но ексела постоянно калкулира (calculate ...% отдолу в прозорчето) Явно отнема доста време да пре-пресмята всички записи а това адски ме изнервя и бави.
Имате ли идея как да го улесня???
Имам един sheet в който вече има над 20,000 реда със записи. Има 5 колони, в които имам формули (и май всичките са Vlookup) но ексела постоянно калкулира (calculate ...% отдолу в прозорчето) Явно отнема доста време да пре-пресмята всички записи а това адски ме изнервя и бави.
Имате ли идея как да го улесня???
Re: Огромна база???
ако стойностите не ти трябва да се променят; маркираш областта с формулите даваш
Copy- Paste special- Value
така няма да "тегли" Vlookup, и ще е лесна за обработка
поне аз така правя де...
.xls
Copy- Paste special- Value
така няма да "тегли" Vlookup, и ще е лесна за обработка
поне аз така правя де...
.xls
Редактирано от kibik на
Re: Огромна база???
Неколкократно съм споменавал, че за такива случаи се ползва VBA код.
Разликата е в това, че VBA кода е само на едно място, а не е "клефнат" на цялата страница с 20 000 повторения. Според мен няма абсолютно никакъв смисъл от 20 000 еднакви на вид формули. С подходящо ограничение, кода може да се изпълнява като формула само за избрана клетка от страницата, в зависимост от конкретния случай. Адреса на клетката може да се вземе от събитието "Change". Разлика в скоростта на работа ще има заради това, че формулата ще пресмята само тогава, когато има редакция на клетка, и то ще извърши наново изчислението само за тези клетки, които са обвързани с формулата, но няма да обхожда цялата колона надолу (или нагоре) 20 000 реда.
По-конкретно не мога да кажа нищо, защото нямам и един байт от файла, за който споменаваш. ;о)
Успех.
Щирлиц
Разликата е в това, че VBA кода е само на едно място, а не е "клефнат" на цялата страница с 20 000 повторения. Според мен няма абсолютно никакъв смисъл от 20 000 еднакви на вид формули. С подходящо ограничение, кода може да се изпълнява като формула само за избрана клетка от страницата, в зависимост от конкретния случай. Адреса на клетката може да се вземе от събитието "Change". Разлика в скоростта на работа ще има заради това, че формулата ще пресмята само тогава, когато има редакция на клетка, и то ще извърши наново изчислението само за тези клетки, които са обвързани с формулата, но няма да обхожда цялата колона надолу (или нагоре) 20 000 реда.
По-конкретно не мога да кажа нищо, защото нямам и един байт от файла, за който споменаваш. ;о)
Успех.
Щирлиц
Re: Огромна база???
Мммдаааа, това ще е . Можеш ли ми дадеш идея как в ВБ да напиша формулата Vlookup която да връща стойности от предварително зададения списък - или просто пейстни един код който да разгледам и пригодя за моите"прости" формулки. 10х!!!
Re: Огромна база???
Можеш да започнеш с това:
Tool->Macro->Record New macro->OK Появява ти се едно малко прозорче.
След това започваш да си въвеждаш формулата vlookup. (
Накрая даваш Stop естествено.
Това е най-лесният начин да пишеш макроси. След като си го написал, можеш да влезнеш в кода му и да видиш какво представлява. най-вероятно няма да ти върши работа, но вече имаш някаква основа.
Шум в офиса? Слушайте Paul van Dyk
Tool->Macro->Record New macro->OK Появява ти се едно малко прозорче.
След това започваш да си въвеждаш формулата vlookup. (
Накрая даваш Stop естествено.
Това е най-лесният начин да пишеш макроси. След като си го написал, можеш да влезнеш в кода му и да видиш какво представлява. най-вероятно няма да ти върши работа, но вече имаш някаква основа.
Шум в офиса? Слушайте Paul van Dyk
Re: Огромна база???
Надявам се това да е достатъчно ясно:
кол А Име - идва с VLOOKUP от колона H, гледайки в "names" range
кол B Месец - идва с Month(col G )
кол C Година - идва с YEAR(col G )
Кол D Избран номер Име - идва с VLOOKUP от колона I, гледайки в "tel" range
кол Е Група - идва с VLOOKUP от колона J, гледайки в "type" range; 2
кол F Вид - идва с VLOOKUP от колона J, гледайки в "type" range; 3
кол G Дата и час (има си ги)
кол H Тел номер (има си ги)
кол I Избран номер (има си ги)
кол J Услуга и направление (има си ги)
кол K Количество (има си ги)
кол L Такса (лв.) (има си ги)
Идеята е , да се използва VB за формулите в първите 6 колони. Иначе ranges names, tel, type са в отделен sheet.
Ако не е достатъчно ясно, ще дообяснявам

кол А Име - идва с VLOOKUP от колона H, гледайки в "names" range
кол B Месец - идва с Month(col G )
кол C Година - идва с YEAR(col G )
Кол D Избран номер Име - идва с VLOOKUP от колона I, гледайки в "tel" range
кол Е Група - идва с VLOOKUP от колона J, гледайки в "type" range; 2
кол F Вид - идва с VLOOKUP от колона J, гледайки в "type" range; 3
кол G Дата и час (има си ги)
кол H Тел номер (има си ги)
кол I Избран номер (има си ги)
кол J Услуга и направление (има си ги)
кол K Количество (има си ги)
кол L Такса (лв.) (има си ги)
Идеята е , да се използва VB за формулите в първите 6 колони. Иначе ranges names, tel, type са в отделен sheet.
Ако не е достатъчно ясно, ще дообяснявам
Re: Огромна база???
Dim Nomenclature702 As Range
Dim LookUpValue As Variant
Set Nomenclature702 = Range("Nomenklatura702")
For i = 2 To Application.Count(Range("A:A")) + 1
LookUpValue = Application.VLookup(Range("F" & i).Value, Nomenclature702, 2, False)
Range("L" & i).Value = LookUpValue
Next i
Nomenclature702 е област от клетки в един шийт от която се прави сравнението
Това е нещо което писах преди няколко дни за един доста обемист файл с няколко хиляди реда данни.
Go Install Analysis Toolpack!
Dim LookUpValue As Variant
Set Nomenclature702 = Range("Nomenklatura702")
For i = 2 To Application.Count(Range("A:A")) + 1
LookUpValue = Application.VLookup(Range("F" & i).Value, Nomenclature702, 2, False)
Range("L" & i).Value = LookUpValue
Next i
Nomenclature702 е област от клетки в един шийт от която се прави сравнението
Това е нещо което писах преди няколко дни за един доста обемист файл с няколко хиляди реда данни.
Go Install Analysis Toolpack!
Редактирано от alexoff на
Re: Огромна база???
охооо, на МТел ми мирише тук.
Айде като се поосвободя ще помисля малко. Струва ми се, че има и други варианти за оптимизация освен VВА
Шум в офиса? Слушайте Paul van Dyk
Айде като се поосвободя ще помисля малко. Струва ми се, че има и други варианти за оптимизация освен VВА
Шум в офиса? Слушайте Paul van Dyk
Re: Огромна база???
Не мирише ами напрово смърди - това е разбивката по проведени разговори с всеки номер, който е избиран
Re: Огромна база???
Май се опитваш с леката си кола да пренасяш цимент.
Става за няколко торби. Може и тонове да пренесеш, ако имаш достатъчно време и гориво, но е по-добре да използваш камион
Искам да ти кажа, че не използваш подходящия инструмент (Excel). По-добре е да ползваш за целта база данни. Може би ще ти е най-лесно, щом добре работиш с ексел и бейсик, да го направиш на аксес. Ако ти е проблем, направи едно задание и лесно ще намериш някой, който ще ти го реализира за дребни пари и нула време
Става за няколко торби. Може и тонове да пренесеш, ако имаш достатъчно време и гориво, но е по-добре да използваш камион
Искам да ти кажа, че не използваш подходящия инструмент (Excel). По-добре е да ползваш за целта база данни. Може би ще ти е най-лесно, щом добре работиш с ексел и бейсик, да го направиш на аксес. Ако ти е проблем, направи едно задание и лесно ще намериш някой, който ще ти го реализира за дребни пари и нула време
Re: Огромна база???
NDeu е много прав. ще си решиш много проблеми, ако данните ги вкарваш в Аксес и от там със заявки си вадиш справките. Имай предвид, че каквито и решения да ти предложим във форума, всичките ще увиснат като прани гащи когато достигнеш 65536 реда.
Шум в офиса? Слушайте Paul van Dyk
Шум в офиса? Слушайте Paul van Dyk
Re: Огромна база???
Може и да не съм разбрал добре какъв е проблема, но доколкото схванах те изнервя бавенето на Excel, докато непрекъснато преизчислява променените от теб данни. Така ли е?
В този случай мога да предложа следното решение:
В Tools -> Options -> Calculation -> Calculation слагаш отметката на Manual. Taka Excel няма да пресмята всяка промяна, а само когато му кажеш (при мен поне е с F9).
Иначе съм съгласен, че за големите обеми информация Access е по-подходящо решение
В този случай мога да предложа следното решение:
В Tools -> Options -> Calculation -> Calculation слагаш отметката на Manual. Taka Excel няма да пресмята всяка промяна, а само когато му кажеш (при мен поне е с F9).
Иначе съм съгласен, че за големите обеми информация Access е по-подходящо решение
Re: Огромна база???
Пусни ми едно примерно файлче с примерни данни. Няколко реда поне.
Горе-долу ми е ясна идеята, но ми трябват и формулите в клетките.
Щирлиц
Горе-долу ми е ясна идеята, но ми трябват и формулите в клетките.
Щирлиц
Re: Огромна база???
Утре сутрин щом съм в офиса ще ти пратя файл - дай е-мейл. 10х!!!!
Re: Огромна база???
Много добре, но като не ми работи аксеса (дава някакви съобщения за Jet 4.0 service pack 8, а слд като го инсталирах ми говори за някакви unsafe expressions) ще му търся варианта през ексела.
Пък и това си е добро упражнение да науча нещо ново, което да използвам и в други файлове


Пък и това си е добро упражнение да науча нещо ново, което да използвам и в други файлове
Re: Огромна база???
Като използвам този код по-долу става.
Но сега се чудя как да ми дава "ЛИПСВА" когато vlookup=ISerror???????
Private Sub Worksheet_Activate()
Dim lookupValue As Variant
lookupValue = Application.VLookup(Range("J2:J20000").Value, Worksheets("parameters").Range("g2:H100"), 2, False)
Range("A2:A20000").Value = lookupValue
lookupValue = Application.VLookup(Range("k2:k20000").Value, Worksheets("parameters").Range("g2:H100"), 2, False)
Range("e2:e20000").Value = lookupValue
lookupValue = Application.VLookup(Range("l2:l20000").Value, Worksheets("parameters").Range("a3:c100"), 2, False)
Range("f2:f20000").Value = lookupValue
lookupValue = Application.VLookup(Range("l2:l20000").Value, Worksheets("parameters").Range("a3:c100"), 3, False)
Range("g2:g20000").Value = lookupValue
End Sub
Но сега се чудя как да ми дава "ЛИПСВА" когато vlookup=ISerror???????
Private Sub Worksheet_Activate()
Dim lookupValue As Variant
lookupValue = Application.VLookup(Range("J2:J20000").Value, Worksheets("parameters").Range("g2:H100"), 2, False)
Range("A2:A20000").Value = lookupValue
lookupValue = Application.VLookup(Range("k2:k20000").Value, Worksheets("parameters").Range("g2:H100"), 2, False)
Range("e2:e20000").Value = lookupValue
lookupValue = Application.VLookup(Range("l2:l20000").Value, Worksheets("parameters").Range("a3:c100"), 2, False)
Range("f2:f20000").Value = lookupValue
lookupValue = Application.VLookup(Range("l2:l20000").Value, Worksheets("parameters").Range("a3:c100"), 3, False)
Range("g2:g20000").Value = lookupValue
End Sub
Относно unsafe expressions
На ecurity Warning: Unsafe expressions are not locked даваш NO
На следващото съобщение - Yes
и след това Open
и бачкаш в Аксеса без никъв проблем.
Шум в офиса? Слушайте Paul van Dyk
На следващото съобщение - Yes
и след това Open
и бачкаш в Аксеса без никъв проблем.
Шум в офиса? Слушайте Paul van Dyk
Re: Огромна база???
пиша директно тук без да съм пробвал кода за това не съм на 100% сигурен за синтаксиса, но пробвай нещо от сорта на
If Iserror(lookupvalue) then
lookupvalue = "Липсва"
end if
Range().value = lookupvalue
Go Install Analysis Toolpack!
If Iserror(lookupvalue) then
lookupvalue = "Липсва"
end if
Range().value = lookupvalue
Go Install Analysis Toolpack!