Aplikacje biznesowe w MS Office
[ostatnia aktualizacja 2010.12.02 22:52:49 ]MS OFFICE - Makra i skrypty VISUAL BASIC
- Marko VBA Excel - 2 ¦REDNIKI
' PRZYKLAD NA KOŁO - 2 ¦REDNIKI ' funkcja obrabia string, ' znajduje w nim 2 liczby ' znajduje w nim srednik, ' zwraca ich iloczyn ' dodatkowo jest podatek Function rozdzielacz(a As String) As Integer Dim d d = InStr(a, ";") Dim s1, s2, s3, s4 s1 = Mid(a, 1, d - 1) s2 = Mid(a, d + 1, Len(a)) d = InStr(s2, ";") s3 = Mid(s2, 1, d - 1) s4 = Mid(s2, d + 1, Len(s2)) d = (Val(s1) * Val(s3) * (1 + Val(s4) / 100)) rozdzielacz = d End Function - Marko VBA Excel - 2 ¦REDNIKI ver. 2
' funkcja obrabia string, ' znajduje w nim 2 liczby ' znajduje w nim srednik, ' zwraca ich iloczyn ' dodatkowo jest podatek Function rozdz(a As String) As Integer Dim d d = InStr(a, ";") Dim s1 Dim s2 s1 = Mid(a, 1, d - 1) s2 = Mid(a, d + 1, Len(a)) d = (Val(s1) * Val(s2)) rozdz = d End Function Sub Dodatek() ActiveCell.Offset(0, 1) = rozdz(ActiveCell.Value) End Sub - Marko VBA Excel - odwracanie kolejnosci znaków w napisie
Function rev(a As String) As String Dim i, s For i = Len(a) To 1 Step -1 s = s & Mid(a, i, 1) Next rev = s End Function
FUNKCJE OPERUJˇCE NA STRINGACH:
=Len(t) - zwraca dlugosc napisu
=Left(t,3) - zwraca 3 pierwsze znaki
=Rigtht (str,3) zwraca 3 ostatnie
=Mid(str, offset, length) - od ktorego znaku do ktorego cos zwraca
=InStr( str, substring) - będzie szukała substring w napisie str ... odo ddaje pierwsze zgodny index
=UCase(string)
=LCase(string)
napisac funkcje ktora zamienia kolejnosc liter w napisie
pętla for
For i = Len(a) To 0 Step -1 (...) Next
konkatenacja napisow:
t = t & "dodatkowy napis"
| kod visual basic | co ten kod robi... |
|---|---|
| Range("E20").Select ActiveCell.FormulaR1C1 = "dane" | wpisywanie danych do konkretnej komórki |
| MsgBox | okno informacyjne |
| InputBox | zczytywanie danych wejściowych |
| ActiveCell | bieżąca komórka |
| ActiveCell.Value | |
| ActiveCell.Offset(x,y) | |
| Option Explicit | marka wymagają deklarowania zmiennych (używane na samym początku) |
| dim myvar | deklaracja zmiennej |
| if (IsNumeric(MyVar)=True) then ... | |
| a = InputBox ("podaj coś","Pytanie",30) | |
| a = MessageBox("Wynik",vbOKonly [vbYesNo] [vbCancel]) | |
| ActiveCell.Interior.Color = vbBlue | |
| Worksheets(1).Range("a1:b10").Value = "rand()" | wypelnianie losowe |
| if (isNumeric(...) = true) then if ActiveCell.Value > 0 then ActiveCell.Offset(0,1).Value="wieksze" end if | czy komórka jest pusta, czy wartość w niej jest numeryczna |
| isEmpty() | czy komórka jest pusta |
| select case zmienna case is < 5 is = 7 case 10 to 20 | switch (...) |
| do while ... ... loop | pętla while (...) do (...) |
| do ... loop while ... | pętla do (...) while (...) |
| ActiveCell.CurrentRegion.Select | zaznacza przyległe |
| Selection.Rows.Count | liczy wiersze |
| OptionButton | |
| ComboBox | |
| TextBox | |
| SpinButton | |
| CheckBox | |
| CommandButton | |
| makro | makro sprawdzające czy tytuły kolumn są odpowiednio nazwana, dajel input-box'em wpisuje kolejne wiesze (wyszukując pierszy pusty) |
| Function brutto(a As Integer, b As Integer) As Integer brutto = a * b End Function | przykład funkcji, możliwości wywołania: wstaw|funkcję|uzytkownika - w menu exela x = brutto(cos,cos); - w markrze sub |
| MsgBox dodaj(6, 4) | wyświetla wynik funkcji dodaj(6,4) |
| function suma(s1 as integer, s2 as integer, optional s3=0) as integer suma = s1 + s2 + s3 end function | argument domyślny |
| funkcji dostępne są tylko te zmienne z zewnątrz które wrzucimy tam poprzez argumenty |
Powiedzmy, że mamy do czynienia z logami: 1 kolumna - data, 2 - ga czas, 3 - cia IP, 4 - domena, 5 - adres przychodzący, 6 - przeglądarka
- Marko VBA Excel - Usuwanie duplikatów
' Usuwanie duplikatów ' takich samych wierszy następujących po sobie ' każdorazowo usuwany jest pierwszy z tych dwóch Sub usunTakieSameWiersze() Dim ilewierszy ilewierszy = 0 Dim info As Boolean info = False Range("A1").Activate Do While (ActiveCell.Value <> "") If (ActiveCell.Offset(0, 2).Value = _ ActiveCell.Offset(1, 2).Value) Then If (ActiveCell.Offset(0, 3).Value = _ ActiveCell.Offset(1, 3).Value) Then If (ActiveCell.Offset(0, 4).Value = _ ActiveCell.Offset(1, 4).Value) Then If (ActiveCell.Offset(0, 6).Value = _ ActiveCell.Offset(1, 6).Value) Then ActiveCell.EntireRow.Delete ActiveCell.Offset(-1, 0).Activate ilewierszy = ilewierszy + 1 End If End If End If End If ActiveCell.Offset(1, 0).Activate Loop If (info = True) Then MsgBox ("Skasowano " + Str(ilewierszy) + _ " wierszy") End If End Sub - Marko VBA Excel - Zamiana adresu http na link
Sub adresRefNaLink() Dim ilewierszy ilewierszy = 0 Range("f1").Activate Do While (ActiveCell.Offset(0, -5).Value <> "") If (InStr(LCase(ActiveCell.Value), "http://") = 1) Then If (InStr(ActiveCell.Value, " ") < 1) Then ActiveSheet.Hyperlinks.Add _ Anchor:=Selection, _ Address:=ActiveCell.Value, _ TextToDisplay:=ActiveCell.Value ilewierszy = ilewierszy + 1 End If End If ActiveCell.Offset(1, 0).Activate Loop MsgBox ("Przerobiono " + Str(ilewierszy) + " wierszy") End Sub - Marko VBA Excel - Logi - skracanie nazw przeglądarek
Sub przegladarka() Range("a1").Activate Do While (ActiveCell.Value <> 0) If (InStr(LCase(ActiveCell.Offset(0, 6).Value), _ "firefox") > 0) Then ActiveCell.Offset(0, 6).Value = "Fx" ElseIf (InStr(LCase(ActiveCell.Offset(0, 6).Value), _ "opera") > 0) Then ActiveCell.Offset(0, 6).Value = "Opera" ElseIf (InStr(LCase(ActiveCell.Offset(0, 6).Value), _ "avant browser") > 0) Then ActiveCell.Offset(0, 6).Value = "Avant" ElseIf (InStr(LCase(ActiveCell.Offset(0, 6).Value), _ "msie") > 0) Then ActiveCell.Offset(0, 6).Value = "IE" ElseIf (InStr(LCase(ActiveCell.Offset(0, 6).Value), _ "googlebot") > 0) Then ActiveCell.Offset(0, 6).Value = "Gbot" ElseIf (InStr(LCase(ActiveCell.Offset(0, 6).Value), _ "yahoo! slurp") > 0) Then ActiveCell.Offset(0, 6).Value = "Yahoo" ElseIf (InStr(LCase(ActiveCell.Offset(0, 6).Value), _ "w3c_validator") > 0) Then ActiveCell.Offset(0, 6).Value = "W3C" ElseIf (InStr(LCase(ActiveCell.Offset(0, 6).Value), _ "onetszukaj") > 0) Then ActiveCell.Offset(0, 6).Value = "Onet" ElseIf (InStr(LCase(ActiveCell.Offset(0, 6).Value), _ "msnbot") > 0) Then ActiveCell.Offset(0, 6).Value = "MSN" ElseIf (InStr(LCase(ActiveCell.Offset(0, 6).Value), _ "mozilla") > 0) Then ActiveCell.Offset(0, 6).Value = "Mozilla" End If ActiveCell.Offset(1, 0).Activate Loop End Sub





