Microsoft Office Forum [ www.Office-Fragen.de ] >> READONLY <<

Microsoft Office 2003-2019 => Excel => Thema gestartet von: CHR22 am April 29, 2017, 21:29:21 Nachmittag

Titel: Office 2013: Office 2013: VBA Code zum sortieren von Werten
Beitrag von: CHR22 am April 29, 2017, 21:29:21 Nachmittag
Hallo,

ich bin auf der suche nach einer makro mit der man werte einer Tabelle mithilfe eines Buttons sortieren kann. Im Internet habe ich dazu auch einen guten Code gefunden, traue mich aber nicht so recht ihn zu verwenden, da mir ein Studienkollege mal erzählt hat dass es auch gefährliche codes geben soll. Der code sieht sehr komplex aus, ich verstehe schon was von Excel und vba, nur Funktionen wie VBScript.Reg und Preserve sind mir nicht bekannt. Deswegen wollt ich mal die Experten hier fragen, ob der code so in Ordnung bzw ungefährlich ist.

Excel 2013

hier der code:

Code: Visual Basic
  1. Option Explicit
  2.  
  3. Sub test()
  4.     Dim temp(1 To 2), a, i As Long, ii As Long, n As Long
  5.     With Sheets("Sortieren")
  6.         For i = 1 To 2
  7.             With .ListObjects(i)
  8.                 a = .DataBodyRange.Value
  9.                 ReDim Preserve a(1 To UBound(a, 1), 1 To UBound(a, 2) + 1)
  10.                 For ii = 1 To UBound(a, 1)
  11.                     If a(ii, 2) = "" Then n = ii - 1: Exit For
  12.                     a(ii, UBound(a, 2)) = GetSortVal(a(ii, 2) & " " & ii)
  13.                 Next
  14.                 VSortM a, 1, n, UBound(a, 2)
  15.                 .DataBodyRange.Value = a
  16.             End With
  17.         Next
  18.     End With
  19. End Sub
  20.  
  21. Function GetSortVal(ByVal txt As String) As String
  22.     Dim i As Long, M As Object
  23.     With CreateObject("VBScript.RegExp")
  24.         .Global = True
  25.         .Pattern = "\d+"
  26.         If .test(txt) Then
  27.             For i = .Execute(txt).Count - 1 To 0 Step -1
  28.                 Set M = .Execute(txt)(i)
  29.                 txt = Application.Replace(txt, M.firstindex + 1, M.Length, Format$(M.Value, "0000000000"))
  30.             Next
  31.         End If
  32.     End With
  33.     GetSortVal = txt
  34. End Function
  35.  
  36. Private Sub VSortM(ary, LB, UB, ref)
  37.     Dim i As Long, ii As Long, iii As Long, M, temp
  38.     i = UB: ii = LB
  39.     M = ary(Int((LB + UB) / 2), ref)
  40.     Do While ii <= i
  41.         Do While ary(ii, ref) < M: ii = ii + 1: Loop
  42.         Do While ary(i, ref) > M: i = i - 1: Loop
  43.         If ii <= i Then
  44.             For iii = LBound(ary, 2) To UBound(ary, 2)
  45.                 temp = ary(ii, iii): ary(ii, iii) = ary(i, iii): ary(i, iii) = temp
  46.             Next
  47.             i = i - 1: ii = ii + 1
  48.         End If
  49.     Loop
  50.     If LB < i Then VSortM ary, LB, i, ref
  51.     If ii < UB Then VSortM ary, ii, UB, ref
  52. End Sub
  53.  

Gruß
Chris

Edit: Künftig bitte Code-Tag nutzen.
Titel: Antw: Office 2013: Office 2013: VBA Code zum sortieren von Werten
Beitrag von: maninweb am Mai 01, 2017, 09:22:09 Vormittag
Hallo,

was mich betrifft, sehe ich kein Problem mit dem Code. Der einzige externe Aufruf ist VBScript.RegExp, wo ein
regulärer Ausdruck ausgewertet wird, harmlos. Preserve ist ein VBA-Schlüsselwort, siehe VBA Hilfe.

Gruß