Огромна база???

18 отговора 841 прегледа
#1

Огромна база???

Привет!

Имам един sheet в който вече има над 20,000 реда със записи. Има 5 колони, в които имам формули (и май всичките са Vlookup) но ексела постоянно калкулира (calculate ...% отдолу в прозорчето) Явно отнема доста време да пре-пресмята всички записи а това адски ме изнервя и бави.
Имате ли идея как да го улесня???

Отговор
в отговор на DDeli #2

Re: Огромна база???

ако стойностите не ти трябва да се променят; маркираш областта с формулите даваш
Copy- Paste special- Value

така няма да "тегли" Vlookup, и ще е лесна за обработка

поне аз така правя де...


.xls

Редактирано от kibik на

Отговор
в отговор на DDeli #3

Re: Огромна база???

Неколкократно съм споменавал, че за такива случаи се ползва VBA код.

Разликата е в това, че VBA кода е само на едно място, а не е "клефнат" на цялата страница с 20 000 повторения. Според мен няма абсолютно никакъв смисъл от 20 000 еднакви на вид формули. С подходящо ограничение, кода може да се изпълнява като формула само за избрана клетка от страницата, в зависимост от конкретния случай. Адреса на клетката може да се вземе от събитието "Change". Разлика в скоростта на работа ще има заради това, че формулата ще пресмята само тогава, когато има редакция на клетка, и то ще извърши наново изчислението само за тези клетки, които са обвързани с формулата, но няма да обхожда цялата колона надолу (или нагоре) 20 000 реда.

По-конкретно не мога да кажа нищо, защото нямам и един байт от файла, за който споменаваш. ;о)

Успех.


Щирлиц
Отговор
в отговор на Щиpлиц #4

Re: Огромна база???

Мммдаааа, това ще е . Можеш ли ми дадеш идея как в ВБ да напиша формулата Vlookup която да връща стойности от предварително зададения списък - или просто пейстни един код който да разгледам и пригодя за моите"прости" формулки. 10х!!!

Отговор
в отговор на DDeli #5

Re: Огромна база???

Дай някакъв пример все пак...


Щирлиц
Отговор
в отговор на DDeli #6

Re: Огромна база???

Можеш да започнеш с това:
Tool->Macro->Record New macro->OK Появява ти се едно малко прозорче.
След това започваш да си въвеждаш формулата vlookup. (
Накрая даваш Stop естествено.
Това е най-лесният начин да пишеш макроси. След като си го написал, можеш да влезнеш в кода му и да видиш какво представлява. най-вероятно няма да ти върши работа, но вече имаш някаква основа.

Шум в офиса? Слушайте Paul van Dyk
Отговор
в отговор на Щиpлиц #7

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.

Ако не е достатъчно ясно, ще дообяснявам


Отговор
в отговор на DDeli #8

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!

Редактирано от alexoff на

Отговор
в отговор на DDeli #9

Re: Огромна база???

охооо, на МТел ми мирише тук.
Айде като се поосвободя ще помисля малко. Струва ми се, че има и други варианти за оптимизация освен VВА

Шум в офиса? Слушайте Paul van Dyk
Отговор
в отговор на f(x)dx #10

Re: Огромна база???

Не мирише ами напрово смърди - това е разбивката по проведени разговори с всеки номер, който е избиран

Отговор
в отговор на DDeli #11

Re: Огромна база???

Май се опитваш с леката си кола да пренасяш цимент.
Става за няколко торби. Може и тонове да пренесеш, ако имаш достатъчно време и гориво, но е по-добре да използваш камион
Искам да ти кажа, че не използваш подходящия инструмент (Excel). По-добре е да ползваш за целта база данни. Може би ще ти е най-лесно, щом добре работиш с ексел и бейсик, да го направиш на аксес. Ако ти е проблем, направи едно задание и лесно ще намериш някой, който ще ти го реализира за дребни пари и нула време

Отговор
в отговор на NDeu #12

Re: Огромна база???

NDeu е много прав. ще си решиш много проблеми, ако данните ги вкарваш в Аксес и от там със заявки си вадиш справките. Имай предвид, че каквито и решения да ти предложим във форума, всичките ще увиснат като прани гащи когато достигнеш 65536 реда.

Шум в офиса? Слушайте Paul van Dyk
Отговор
в отговор на DDeli #13

Re: Огромна база???

Може и да не съм разбрал добре какъв е проблема, но доколкото схванах те изнервя бавенето на Excel, докато непрекъснато преизчислява променените от теб данни. Така ли е?
В този случай мога да предложа следното решение:
В Tools -> Options -> Calculation -> Calculation слагаш отметката на Manual. Taka Excel няма да пресмята всяка промяна, а само когато му кажеш (при мен поне е с F9).
Иначе съм съгласен, че за големите обеми информация Access е по-подходящо решение

Отговор
в отговор на DDeli #14

Re: Огромна база???

Пусни ми едно примерно файлче с примерни данни. Няколко реда поне.

Горе-долу ми е ясна идеята, но ми трябват и формулите в клетките.


Щирлиц
Отговор
в отговор на Щиpлиц #15

Re: Огромна база???

Утре сутрин щом съм в офиса ще ти пратя файл - дай е-мейл. 10х!!!!

Отговор
в отговор на f(x)dx #16

Re: Огромна база???

Много добре, но като не ми работи аксеса (дава някакви съобщения за Jet 4.0 service pack 8, а слд като го инсталирах ми говори за някакви unsafe expressions) ще му търся варианта през ексела.
Пък и това си е добро упражнение да науча нещо ново, което да използвам и в други файлове

Отговор
в отговор на DDeli #17

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

Отговор
в отговор на DDeli #18

Относно unsafe expressions

На ecurity Warning: Unsafe expressions are not locked даваш NO
На следващото съобщение - Yes
и след това Open
и бачкаш в Аксеса без никъв проблем.

Шум в офиса? Слушайте Paul van Dyk
Отговор
в отговор на DDeli #19

Re: Огромна база???

пиша директно тук без да съм пробвал кода за това не съм на 100% сигурен за синтаксиса, но пробвай нещо от сорта на

If Iserror(lookupvalue) then

lookupvalue = "Липсва"

end if

Range().value = lookupvalue

Go Install Analysis Toolpack!
Отговор