2009. szeptember 30., szerda
Multiple Condition/criteria sum function for excel
Function SumByCriteria(Sum_Range As Range, Criteria1, Criteria1Range As Range, _
Criteria2, Criteria2Range As Range, Optional Criteria3, _
Optional Criteria3Range As Range, Optional Criteria4, _
Optional Criteria4Range As Range, Optional Criteria5, _
Optional Criteria5Range As Range) As Long
Dim lLoopStop As Long, lLoop As Long, rRange As Range, lRow As Long
Dim sTotal As Single, bVal1 As Boolean, bVal2 As Boolean, bVal3 As Boolean
Dim bVal4 As Boolean, bVal5 As Boolean, bVal1b As Boolean, bVal2b As Boolean, bVal3b As Boolean
Dim bVal4b As Boolean, bVal5b As Boolean, lCriteriaUsed As Long
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''Written by ozgrid.com''''''''''''''''''''''''''''''''''''''
'Sums Values in Sum_Range when up to 5 conditions are met in corresponding cells.
'All ranges used should as small as possible for efficieny
''IF YOU HAVE 2007 USE SUMIFS
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
lLoopStop = WorksheetFunction.CountIf(Criteria1Range, Criteria1)
bVal3 = Not Criteria3Range Is Nothing
bVal4 = Not Criteria4Range Is Nothing
bVal5 = Not Criteria5Range Is Nothing
If bVal5 = False Then lCriteriaUsed = 4
If bVal4 = False Then lCriteriaUsed = 3
If bVal3 = False Then lCriteriaUsed = 2
Set rRange = Criteria1Range(1, 1)
For lLoop = 1 To lLoopStop
Set rRange = Criteria1Range.Find(Criteria1, rRange, _
xlFormulas, xlWhole, xlByRows, xlNext, False)
lRow = rRange.Row
If bVal5 = True Then bVal5b = Criteria5Range(lRow, 1) = Criteria5
If bVal4 = True Then bVal4b = Criteria4Range(lRow, 1) = Criteria4
If bVal3 = True Then bVal3b = Criteria3Range(lRow, 1) = Criteria3
bVal2b = Criteria2Range(lRow, 1) = Criteria2
bVal1b = Criteria1Range(lRow, 1) = Criteria1
If lCriteriaUsed > 4 Then
If bVal5b And bVal4b And bVal3b And bVal2 And bVal1b Then
sTotal = WorksheetFunction.Sum(Sum_Range(lRow, 1), sTotal)
End If
ElseIf lCriteriaUsed > 3 Then
If bVal4b And bVal3b And bVal2b And bVal1b Then
sTotal = WorksheetFunction.Sum(Sum_Range(lRow, 1), sTotal)
End If
ElseIf lCriteriaUsed > 2 Then
If bVal3b And bVal2 And bVal1b Then
sTotal = WorksheetFunction.Sum(Sum_Range(lRow, 1), sTotal)
End If
ElseIf bVal2b And bVal1b Then
sTotal = WorksheetFunction.Sum(Sum_Range(lRow, 1), sTotal)
End If
Next lLoop
SumByCriteria = sTotal
End Function
Example usage;
=SumByCriteria(A1:A21,"cat",C1:C21,"furry",E1:E21,"fluffy",G1:G21,"persian",I1:I21)
2009. szeptember 21., hétfő
Excel: dupla kattintás letiltása
Application.EditDirectlyInCell = True
Range("A1").Activate
Cancel = True 'Cancel the default behaviour
End Sub
Forrás:
http://www.thecodecage.com/forumz/excel-vba-programming/91029-disable-cursor-when-double-click.html
2009. június 30., kedd
Excel: hang lejátszása adott feltétel teljesülésekor
Copy the code below to a VBA module in your workbook.
'Windows API function declaration
Private Declare Function PlaySound Lib "winmm.dll" _
Alias "PlaySoundA" (ByVal lpszName As String, _
ByVal hModule As Long, ByVal dwFlags As Long) As Long
Function Alarm(Cell, Condition)
Dim WAVFile As String
Const SND_ASYNC = &H1
Const SND_FILENAME = &H20000
On Error GoTo ErrHandler
If Evaluate(Cell.Value & Condition) Then
WAVFile = ThisWorkbook.Path & "\sound.wav" 'Edit this statement
Call PlaySound(WAVFile, 0&, SND_ASYNC Or SND_FILENAME)
Alarm = True
Exit Function
End If
ErrHandler:
Alarm = False
End Function
Following are examples of formulas that use this function:
=Alarm(A1,">=1000")
Forrás: Spreadsheetpage.com
Utolsó nem üres cella sorszáma, értéke
Function LASTINCOLUMN(rngInput As Range)
Dim WorkRange As Range
Dim i As Long, CellCount As Long
Application.Volatile
Set WorkRange = rngInput.Columns(1).EntireColumn
Set WorkRange = Intersect(WorkRange.Parent.UsedRange, WorkRange)
CellCount = WorkRange.Count
For i = CellCount To 1 Step -1
If Not IsEmpty(WorkRange(i)) Then
LASTINCOLUMN = WorkRange(i).Value
Exit Function
End If
Next i
End Function
Utolsó érték sorszáma esetén: LASTINCOLUMN = WorkRange(i).row
The LASTINROW function
Function LASTINROW(rngInput As Range) As Variant
Dim WorkRange As Range
Dim i As Long, CellCount As Long
Application.Volatile
Set WorkRange = rngInput.Rows(1).EntireRow
Set WorkRange = Intersect(WorkRange.Parent.UsedRange, WorkRange)
CellCount = WorkRange.Count
For i = CellCount To 1 Step -1
If Not IsEmpty(WorkRange(i)) Then
LASTINROW = WorkRange(i).Value
Exit Function
End If
Next i
End Function
Forrás: Spreadsheetpage.com
VBE ablak helyreállítása
- Close Excel and the VBE.
- Run RegEdit.
- Navigate to HKEY_USERS\.Default\Software\Microsoft\VBA\Office.
- Rename (or delete) the value Dock (e.g. ;Dock), Excel will recreate it when it starts next time.
- Close RegEdit.
- Open Excel and VBE, the windows are now at their default positions.
Forrás: exceltip.com
2009. június 22., hétfő
Excel Konvertálás UTF-8 -ra
Private Function UTF8_Encode(ByVal sStr As String)
' Kiegészítés Excel-hez, hogy tudjon UTF-8 kódlapra konvertálni
For l& = 1 To Len(sStr)
lChar& = AscW(Mid(sStr, l&, 1))
If lChar& < 128 Then
sUtf8$ = sUtf8$ + Mid(sStr, l&, 1)
ElseIf ((lChar& > 127) And (lChar& < 2048)) Then
sUtf8$ = sUtf8$ + Chr(((lChar& \ 64) Or 192))
sUtf8$ = sUtf8$ + Chr(((lChar& And 63) Or 128))
Else
sUtf8$ = sUtf8$ + Chr(((lChar& \ 144) Or 234))
sUtf8$ = sUtf8$ + Chr((((lChar& \ 64) And 63) Or 128))
sUtf8$ = sUtf8$ + Chr(((lChar& And 63) Or 128))
End If
Next l&
UTF8_Encode = sUtf8$
End Function
Forrás:
http://prog.hu/tudastar/91087/Excel+vba+utf8+export+bom+nelkul.html
2009. május 20., szerda
Excel: Könyvtár létezése függvény
On Error GoTo ErrNotExist
ChDir (Directory)
CheckDir = True
Exit Function
ErrNotExist:
CheckDir = False
End Function
Forrás: http://www.asap-utilities.com/excel-tips-detail.php?categorie=9&m=97
2009. május 12., kedd
Status bar információ
Sub CountDown()
Dim intCounter As Integer
Dim bln As Boolean
bln = Application.DisplayStatusBar
Application.DisplayStatusBar = True
For intCounter = 30 To 1 Step -1
Application.StatusBar = intCounter & " Seconds..."
Application.Wait Now + TimeSerial(0, 0, 1)
Next intCounter
Application.StatusBar = False
Application.DisplayStatusBar = bln
End Sub
' Forrás: http://www.exceltip.com/show_tip/Menus,_Toolbars,_Status_bar_in_VBA/Countdown_in_status_bar_using_VBA_in_Microsoft_Excel/347.html
2009. május 11., hétfő
Csatolt fájlokról lista Excelben
Sub Csatolt_fajlok()
' Csatolt fájlokról készít egy kimutatást
kjaktiv = ActiveWorkbook.Name
' megjeleníti a csatolt Excel fájlokat
aLinks = ActiveWorkbook.LinkSources(xlLinkTypeExcelLinks)
If Not IsEmpty(aLinks) Then
' For i = 1 To UBound(aLinks)
'MsgBox "Link " & i & ": " & aLinks(i)
' Next i
Windows("csatolt.xls").Activate
Sheets("csatolás").Select
kjdb = Worksheets("csatolás").Range("d1")
'Set NewSheet = Worksheets.Add
For i = 1 To UBound(aLinks)
Worksheets("csatolás").Cells(kjdb + i + 1, 1).Value = kjaktiv
Worksheets("csatolás").Cells(kjdb + i + 1, 2).Value = aLinks(i)
Next i
End If
End Sub
Excel konvertálása csv-be
Sub xls2csv()
vevo = Worksheets("ini").Range("A2") & ".txt"
Sheets("db").Select
Const DELIMITER As String = "|"
Dim myRecord As Range
kjfile = "Z:\konyvtar\" & kjev & "\txt\" & vevo
Dim myField As Range
Dim nFileNum As Long
Dim sOut As String
nFileNum = FreeFile
' Open "Test.txt" For Output As #nFileNum
Open kjfile For Output As #nFileNum
For Each myRecord In Range("A1:a" & _
Range("a" & Rows.Count).End(xlUp).Row)
With myRecord
For Each myField In Range(.Cells, _
Cells(.Row, Columns.Count).End(xlToLeft))
sOut = sOut & DELIMITER & myField.Text
Next myField
Print #nFileNum, Mid(sOut, 2)
sOut = Empty
End With
Next myRecord
Close #nFileNum
End Sub