Помогни ни да направим Uroci.net по - богат! Добави урок

Excel - малко по-навътре

rupi   трудност:    видян: 100646

Занимавам се с електронни таблици от много години. Ако можете да разберете смисъла им, тяхното ползване несъмнено ще Ви направи много по-добри при работата с компютрите. А и не само. Идеята е проста, но страшно добра. Не знам дали имате представа наистина колко е добра.

Всичко в Електронните таблици се върти около една дума – Адрес. Адресът на една клетка в Excel е буквата на колоната, в която се намира и номерът на реда, на който е клетката. Колоните са букви от английската азбука, а редовете са арабски цифри. Например в клетка A1 (първа колона, ред 1)е числото 7, а в колона B2 (втора колона, ред 2) е текста „Маруля”. Съществува и друг тип адресиране, но засега това не е важно.

уроци - excel_1.JPG

Сега се замислете колко пъти правите едно и също нещо с различни начални данни. Например едно квадратно уравнение. Ами задавате параметрите a, b и c, смятате дискриминанта, намирате x1 и x2. Пресмятането на лихвите по заема, сметките за ток и вода, печалба на фирмата, данъка на заплатата Ви и т.н. примери, описани от колегите преди мен в раздела показват колко често се налага да смятаме едни същи алгоритми с различни входни данни. И ако мислите за тези данни като за адреси, а не за числа и текст, то с Електронните таблици ще може да правите доста неща.

уроци - excel_Curr.JPG

В уроците досега са написани доста неща и няма да ги повтаряме, но нека да Ви напомня най-важното :
В Електронните таблици се въвежда текст и числа. Въвеждат се нормално, без префикси или суфикси, т.е. (лв., год.) и т.н., като външният им вид се променя впоследствие с командите за форматиране на клетката. Ако напишете директно 20лева, то програмата разпознава това като текст и следователно не може да участва в следващи пресмятания.

Датата е вид число, което се използва основно при смятане на лихви, като 01.01.1900г. за Excel е числото 1.


уроци - excel_tabl_1.JPG

Освен текст и числа в Excel има формули и функции. Те се въвеждат с „=” в началото. За функциите ползвайте командата Insert/Function.

Помнете винаги за адресите. В колона F съм записал формулите, които са използвани на съответните редове в колона Е. Умножаваме адресът на клетката, а не числото, което е записано там. Така, ако впоследствие хранителните ни стоки намалят или увеличат количеството си, или се промени цената, то общата сума веднага ще се промени автоматично.

Относително и абсолютно адресиране. В клетка Е2 е записана формулата „=C2*D2”. Това означава, че в клетката Е2 се умножава клетка, която е на същия ред и две колони вляво(С2) с клетка, която е на същия ред и една колона вляво( D2) . Защо така абстрактно Ви го обяснявам. Защото ако напишем формулата „=C2*D2” и копираме в клетки Е3, Е4 и Е5, то ще се повтори същото действие за съответни ред. Това означава, че в клетката Е3 се умножава клетка, която е на същия ред и две колони вляво(С3) с клетка, която е на същия ред и една колона вляво( D 3 ) . Което е и целта на занятието. Така, ако напишем формулата само на първия ред(колкото и да е сложна), можем да я копираме за секунди на всичките 65536 реда на Excel. Това се нарича относително адресиране. Абсолютното адрсиране се използва, ако например тези цени трябва да ги умножим по курса на долара или еврото. Тогава в една клетка (например G1) пишем стойността на еврото, като във формулата в която участва ще се фиксират колоната и реда със знак $. Ако пишем $G$1 във формула, то при копиране по хоризонтала или вертикала този адрес винаги е $G$1 .

Накрая ще Ви дам два примера, които ще Ви помогнат да работите с Excel.

Първото е един код на VB, с който може да превръщате числа в словом. 124 – сто двадесет и четири. Това може да допълни урока за изготвянето на фактура.

Option Compare DatabaseOption ExplicitGlobal Rupi As VariantFunction Slovom(Fsum) Dim Ssum As SingleDim Pr1 As SingleDim Pr2 As IntegerDim Pr3 As SingleDim Slov2 As String 'Dim M(12) As StringStatic M(12) As StringM(1) = "edin"M(2) = "dva"M(3) = "tri"M(4) = "chetiri"M(5) = "pet"M(6) = "shest"M(7) = "sedem"M(8) = "osem"M(9) = "devet"M(10) = "deset"M(11) = "edinadeset"M(12) = "dvanadeset" On Error GoTo Err1 Ssum = Int(Fsum)If Ssum > 999999 Or Ssum < 0 Then If MsgBox("Stoinostta e izvyn obhvata!", vbCritical + _ vbOKOnly, "ERROR") = vbOK Then Exit Function End IfElseIf Ssum = 0 Then Slovom = "nula" Exit FunctionEnd If If Ssum < 13 Then Slov2 = M(Ssum)Else If Ssum < 20 Then Slov2 = M(Val(Mid(Ssum, 2, 1))) + "nadeset" Else If Ssum < 1000 Then If Ssum < 100 Then If ((Ssum / 10) - (Ssum 10)) = 0 Then Slov2 = M(Val(Mid(Ssum, 1, 1))) + "deset" Else Slov2 = M(Val(Mid(Ssum, 1, 1))) + "deset" + " i " + _ M(Val(Mid(Ssum, 2, 1))) End If Else If Ssum < 200 Then Slov2 = "sto " Else If Ssum < 300 Then Slov2 = "dvesta " Else If Ssum < 400 Then Slov2 = "trista " Else Slov2 = M(Val(Left(Ssum, 1))) + "stotin " End If End If End If Pr1 = Val(Right(Ssum, 2)) If (Pr1 <> 0) And ((Pr1 < 20) Or _ ((Pr1 / 10 - Pr1 10) = 0)) Then Slov2 = Slov2 + "i " End If If (Pr1 <> 0) Then Slov2 = Slov2 + Slovom(Pr1) + " " End If End If Else If Ssum < 2000 Then Slov2 = "hiliada " Else If Ssum < 3000 Then Slov2 = "dve hiliadi " Else If Ssum < 10000 Then Pr2 = 4 Else If Ssum < 100000 Then Pr2 = 5 Else Pr2 = 6 End If End If Slov2 = Slovom(Val(Left(Ssum, Pr2 - 3))) + " hiliadi " End If End If Pr3 = Val(Right(Ssum, 3)) If (Pr3 <> 0) And ((Pr3 < 100) Or _ (Pr3 / 100 - Pr3 100 = 0)) Then Slov2 = Slov2 + "i " End If If (Pr3 <> 0) Then Slov2 = Slov2 + Slovom(Pr3) End If End If End IfEnd IfSlovom = Slov2 Err1: Exit Function End Function


Поводът за втория пример е един файл на Excel, който се разпространява от Министерството на земеделието по земеделските производители, като те трябва от 60 страници таблица да попълнят само 4-5 реда и да го разпечатат. Таблицата има защита и не може да се коригира, т.е. за 5 цифри ще разпечатат 60 листа таблица. Ето как можем да се справим с това:


уроци - Protect.JPG

С командата Protect Sheets може да защитим таблицата от различни корекции, които са посочени в списъка – форматиране, вмъкване, изтриване редактиране на редове и колони и т.н. Няма защита за макроси. Правим следния макрос: Sub Macro1()'' Macro1 Macro' Macro recorded 18.3.2007 by rupi' ' Cells.Select Selection.Copy Workbooks.Add Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False Windows("Book1").Activate Cells.Select Application.CutCopyMode = False Selection.Copy Windows("Book2").Activate Range("A1").Select ActiveSheet.Paste Windows("Book1").ActivateEnd Sub

С две думи: Маркираме всичко, копираме, отваряме нов файл и в него копираме само ширината на колоните. После копираме всичко в новия файл. Така си имаме два еднакви файла, като вторият няма защита.

Накрая искам да кажа две думи за старите Електронни таблици, които хората ползваха преди Били Гейтс да прибере всичко.

Една от най-добрите такива през годините на DOS беше Lotus 1-2-3. Нашите програмисти през годините на комунизма я бяха откраднали(заедно с други програми като dBase, Clipper и Word) и я бяха кръстили „Микроплан” („запазена марка” на Микросистеми). Впоследствие излезе Quattro Pro на Borland, но 1-2-3 си остана класика. В първите версии на Excel имаше преведено меню на 1-2-3.



Коментари (9)

kiskin на 22.03 2007 в 19:12ч.
Извинявай, че питам може да ти се струва много просто, но моля обасни ми по-подробно как се прави формулата? Много ми трябва. Копирах маркираното в клетка и разбрах, че не се прави така. Прадварително ти благодаря!!!
rupi на 22.03 2007 в 20:07ч.
'Option Compare Database
Option Explicit
Global Rupi As Variant
Function Slovom(Fsum)

Dim Ssum As Single
Dim Pr1 As Single
Dim Pr2 As Integer
Dim Pr3 As Single
Dim Slov2 As String

'Dim M(12) As String
Static M(12) As String
M(1) = "edin"
M(2) = "dva"
M(3) = "tri"
M(4) = "chetiri"
M(5) = "pet"
M(6) = "shest"
M(7) = "sedem"
M(8) = "osem"
M(9) = "devet"
M(10) = "deset"
M(11) = "edinadeset"
M(12) = "dvanadeset"

On Error GoTo Err1

Ssum = Int(Fsum)
If Ssum > 999999 Or Ssum l(Mid(Ssum, 1, 1))) "deset" " i " _
M(Val(Mid(Ssum, 2, 1)))
End If
Else
If Ssum If Ssum Slov2 = "trista "
Else
Slov2 = M(Val(Left(Ssum, 1))) "stotin "
End If
End If
End If

Pr1 = Val(Right(Ssum, 2))

If (Pr1 0) And ((Pr1 000 Then
Slov2 = "hiliada "
Else
If Ssum If Ssum Pr2 = 4
Else
If Ssum Pr2 = 6
End If
End If

Slov2 = Slovom(Val(Left(Ssum, Pr2 - 3))) " hiliadi "
End If
End If

Pr3 = Val(Right(Ssum, 3))

If (Pr3 0) And ((Pr3 :
Exit Function

End Function
========
Ето по-нареден кода.
Съжалявам, но малко съм претупал нещата.
Първо изтрийте (или стопирайте с ') първия ред на кода - Option Compare Database.
Второ - ето как се ползва в Excel:
Копирате кода. Отваряте файл в Excel и избирате от менюто Tools/Macro/Visual Basic Editor (Alt F11)
Когато се отвори Редактора на VB избирате Insert/Module и пействате копирания модул. Тук може да кирилизирате цифрите - edin-един с вашия си шрифт на кирилица.
Затваряте модула и се връщате в Excel. Избирате една клетка (например Е1) и от менюто - Insert/Function/User Defined - Slovom. Поставете аргумент на функцията един адрес например A1 и готово. Сега като пишете в А1 1234, то в Е1 се изписва хиляда двеста тридесет и четири.
Като имам повече време ще взема да спретна един-два видеоурока....
rupi на 22.03 2007 в 20:15ч.
Не знам какво става, но кода на функцията се скапва като го изпратя като мнение. Губят се части. Това е втори опит, но ако искаш ми драсни на rupi@abv.bg да ти го пратя читав.

Option Explicit
Global Rupi As Variant
Function Slovom(Fsum)

Dim Ssum As Single
Dim Pr1 As Single
Dim Pr2 As Integer
Dim Pr3 As Single
Dim Slov2 As String

'Dim M(12) As String
Static M(12) As String
M(1) = "edin"
M(2) = "dva"
M(3) = "tri"
M(4) = "chetiri"
M(5) = "pet"
M(6) = "shest"
M(7) = "sedem"
M(8) = "osem"
M(9) = "devet"
M(10) = "deset"
M(11) = "edinadeset"
M(12) = "dvanadeset"

On Error GoTo Err1

Ssum = Int(Fsum)
If Ssum > 999999 Or Ssum 400 Then
Slov2 = "trista "
Else
Slov2 = M(Val(Left(Ssum, 1))) "stotin "
End If
End If
End If

Pr1 = Val(Right(Ssum, 2))

If (Pr1 0) And ((Pr1 lov2 = "hiliada "
Else
If Ssum
Else
If Ssum 4
Else
If Ssum Else
Pr2 = 6
End If
End If

Slov2 = Slovom(Val(Left(Ssum, Pr2 - 3))) " hiliadi "
End If
End If

Pr3 = Val(Right(Ssum, 3))

If (Pr3 0) And ((Pr3 n

End Function
rupi на 22.03 2007 в 20:17ч.
rupi@abv.bg
sunivo на 03.12 2007 в 14:53ч.
Къде се пейства този код?
Goshano1 на 05.04 2008 в 22:55ч.
Аз съм много доволен от този урок.Браво!
herlok на 06.01 2010 в 11:10ч.
Урокът е много хубав, но аз искам да ви помоля за малко помощ. Искам да направя така, че където и да се намирам в таблицата, на екрана отгоре винаги да се показва шапката на таблицата.
БЛАГОДАРЯ ПРЕДВАРИТЕЛНО
JC2k10 на 20.01 2010 в 09:06ч.
Здравейте,
може ли и аз да помоля за помощ?!
Търся макрос за EXCEL, който да скрива редовете в таблица, когато първата клетка от реда е празна (за да не се печатат). Когато се запише в първата клетка стойност (от списък), редът да се показва, за да се разпечата.
Beautifull на 17.05 2012 в 10:02ч.
Може ли да ми кажете как се прави таблица в която да речем първите 3 колони са статични и след това останалите колони да може да се скролват настрани.Т.е както е вашата таблица със продукти..тези продукти да се виждат винаги и да са статични но цените след тях (да си представим че са поне 50 колони само с цени) да може да се скролват. Благодаря

Регистрирайте се, за да добавите коментар


Калдейта ЕООД - © 2003-2010. Всички права запазени.
Препоръчваме: Национален Бизнес | Bomba.bg | IT Новини | Диплома.бг | TRAVEL туризъм | Реферати | AmAm.bg | Иде.ли | Курсови работи | Фото Форум | Spodeli.net | Фото-Култ | Atol.bg | Elmaz.com | MobileBulgaria.com | Казанлък.Com