User Tools

Site Tools


vba:functions:inset

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
vba:functions:inset [11.09.2014 11:53:10]
yaslaw [Code]
vba:functions:inset [29.04.2015 11:03:29] (current)
yaslaw
Line 1: Line 1:
 +<​const>​
 +    version=1.3.0
 +    vdate=11.09.2014
 +    fname=udf_inset.bas
 +    ns=%NAMESPACE%
 +    fpath=/​vba/​functions
 +</​const>​
 +{{keywords>​vba,​dictionary,​cast,​create dictionary,​function}}
 +{{description>​Diese Funktion erstellt auf verschiedene Arten ein Dictionary. V-%%version%%}}
 +
 ====== [VBA] inSet() ====== ====== [VBA] inSet() ======
-Diese Funktion dient als IN(),wie man sie in vielen anderen Sprachen kennt. Sie kann aber auch ein in_array() abdecken. +//Diese Funktion dient als IN(),wie man sie in vielen anderen Sprachen kennt. Sie kann aber auch ein in_array() abdecken. 
- +// 
-{{:​vba:​functions:​udf_inset.bas|download udf_inset.bas}}+==Version %%version%% %%vdate%%== 
 +{{%%fname%%|Download %%fname%% (V-%%version%%)}}
  
 ===== Definition ===== ===== Definition =====
-<​code>​found = inSet(search,​ value1 [,value2... [,​value#​]])</​code>​+<​code>​found = inSet(search,​ value1 [,value2... [,value#]]
 +found = inSet(search,​ valueList)</​code>​
 <code vb>​Public Function inSet(ByRef iSearch As Variant, ParamArray iItems() As Variant) As Boolean</​code>​ <code vb>​Public Function inSet(ByRef iSearch As Variant, ParamArray iItems() As Variant) As Boolean</​code>​
  
 ==== Parameters ==== ==== Parameters ====
   ***iSearch** Wert der gesucht wird   ***iSearch** Wert der gesucht wird
-  ***ParamArray iItems*** Werte gegen die geprüft wird. Sind die Werte Arrays, werden die Arrays durchsucht+  ***%%ParamArray iItems%%*** Werte gegen die geprüft wird. Sind die Werte Arrays, werden die Arrays durchsucht
  
 ==== Rückgabewert ==== ==== Rückgabewert ====
Line 19: Line 31:
 debug.print inset(2, array(1, 2, 3))  ' true debug.print inset(2, array(1, 2, 3))  ' true
 debug.print inset(2, array(1, 2), 3)  ' true debug.print inset(2, array(1, 2), 3)  ' true
-debug.print inset(3, array(1, 2), 3)  ' true</​code>​+debug.print inset(3, array(1, 2), 3)  ​' true 
 +debug.print inset("​d",​ "​a,​b,​c,​d,​e"​) ​  ' true</​code>​
  
 ===== Code ===== ===== Code =====
-<code vb udf_inset.bas>​Attribute VB_Name = "​udf_inSet"​ +<source ​'%%fpath%%/%%fname%%' ​vb>
-'------------------------------------------------------------------------------- +
-'​File ​        : udf_inSet.bas +
-' ​              ​Copyright mpl by ERB software +
-' ​              All rights reserved +
-' ​              http://​wiki.yaslaw.info/​dokuwiki/​doku.php/​vba/​cast/​strtodate +
-'Environment ​ : VBA 2007 + +
-'​Version ​     : 1.2.0 +
-'​Name ​        : inSet +
-'​Author ​      : Stefan Erb (ERS) +
-'​History ​     : 30.04.2014 - ERS - Creation +
-' ​              ​27.06.2014 - ERS - Die Mögliche hinzugefügt,​ Arrays zu übergeben +
-' ​              ​28.08.2014 - ERS - Neu mit Listenstring als Paramter: inset(2, "​1,​2,​3"​) +
-'​------------------------------------------------------------------------------- +
-Option Explicit +
- +
-'/** +
-' * Prüft ein Wert gegen eine Liste von Werten. +
-' * Dient als Ersatz des Befehls IN(), den man in vielen anderen Sprachen kennt +
-' * Kann auch als in_array dienen +
-' * Bei Objekten geht es nur auf dieselbe Instanz. +
-' * +
-' *     found = inSet(search,​ value1 [,value2... [,​value#​]]) +
-' *     found = inSet(search,​ valueList) +
-' * +
-' * @example ​   inset(2, 1, 2, 3)  => true +
-' * @example ​   inset(2, array(1, 2, 3))  => true +
-' * @example ​   inset(2, array(1, 2), 3)  => true +
-' * @example ​   inset(3, 1, array(2, 3))  => true +
-' * @example ​   inset(3, "​1,​2,​3,​4,​5"​) +
-' * +
-' * @param ​ Variant ​    Wert der gesucht wird +
-' * @paramArray ​        Werte gegen die geprüft wird. Sind die Werte Arrays, werden die Arrays durchsucht +
-' * @return Boolean ​    Flag ob der Wert gefunden wird +
-Public Function inSet(ByRef iSearch As Variant, ParamArray iItems() As Variant) As Boolean +
-    inSet = inSetArray(iSearch,​ CVar(iItems)) +
-End Function +
- +
-' * @param ​ Variant ​    Wert der gesucht wird +
-' * @param ​ Array       Werte gegen die geprüft wird. Sind die Werte Arrays, werden die Arrays durchsucht +
-' * @return Boolean ​    Flag ob der Wert gefunden wird +
-Private Function inSetArray(ByRef iSearch As Variant, ByRef iItems As Variant) As Boolean +
-    If TypeName(iItems(0)) = "​String"​ And UBound(iItems) = 0 Then +
-        iItems = Split(iItems(0),​ ","​) +
-    End If +
-    Dim item As Variant: For Each item In iItems +
-        'Null Vergleich +
-        If IsNull(iSearch) Or IsNull(item) Then +
-            inSetArray = IsNull(iSearch) = IsNull(item) +
-        'Array Vergleich +
-        ElseIf IsArray(item) Then +
-            inSetArray = inSetArray(iSearch,​ item) +
-        '​Objekt-Vergleich +
-        ElseIf IsObject(iSearch) And IsObject(item) Then +
-            inSetArray = (iSearch Is item) +
-        '​Value-Vergleich +
-        ElseIf Not IsObject(iSearch) And Not IsObject(item) Then +
-            Dim search As Variant: search = Nz(iSearch) +
-            Dim find As Variant: find = cast(VarType(search),​ Nz(item)) +
-            inSetArray = search = find +
-        End If +
-        If inSetArray Then Exit Function +
-    Next item +
-End Function +
- +
-'/** +
-' * Wandelt einen String wenn möglich in das angegebene Format um +
-' * @param ​ VbVarType +
-' * @param ​ Variant +
-' * @return Variant +
-' */ +
-Private Function cast(ByVal iType As VbVarType, ByVal iFind As Variant) As Variant +
-    If IsNumeric(iFind) Then +
-        Select Case iType +
-            Case vbInteger: ​    cast = CInt(iFind) +
-            Case vbLong: ​       cast = CLng(iFind) +
-            Case vbDouble: ​     cast = CDbl(iFind) +
-            Case vbDecimal: ​    cast = CDec(iFind) +
-            Case vbByte: ​       cast = CByte(iFind) +
-            Case vbSingle: ​     cast = CSng(iFind) +
-            Case vbCurrency: ​   cast = CCur(iFind) +
-            Case Else:          cast = CVar(iFind) +
-        End Select +
-    ElseIf IsDate(iFind) And iType = vbDate Then +
-        cast = CDate(iFind) +
-    Else +
-        cast = iFind +
-    End If +
-End Function +
-</code>+
vba/functions/inset.1410429190.txt.gz · Last modified: 11.09.2014 11:53:10 by yaslaw