Collapse column

Autor Thema: Office 2013: Office 2013: VBA Code zum sortieren von Werten  (Gelesen 655 mal)

Offline CHR22

  • Newbie
  • *
  • Beiträge: 5
    • Profil anzeigen
  • Office-KnowHow: Fortgeschritten
  • VBA-KnowHow- : Mittelmäßig
  • Version [Office] : Office 2016
Office 2013: Office 2013: VBA Code zum sortieren von Werten
« 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.
« Letzte Änderung: April 30, 2017, 04:33:43 Vormittag von mumpel »

Keine Lösung gefunden? Du kannst Dich gerne an unser erfahrenes Experten-Team wenden und Dein Anliegen in Auftrag geben.
>>> Schnell und einfach ein unverbindliches Angebot anfordern. Per E-Mail an anfrage@excel-inside.de oder per Online-Formular
<<<

!!! Wichtige Information
!!! Dieses Forum steht aus technischen Gründen ab dem 11. September 2019 nur noch im Lesemodus zur Verfügung.
Das NEUE Office-Fragen-Forum kannst du aber unter der gewohnten Domain https://office-fragen.de wie gewohnt nutzen.

- Wir freuen uns auf deinen Besuch im neuen Forum.

Offline maninweb

  • Global Moderator
  • Hero Member
  • *****
  • Beiträge: 1.063
    • Profil anzeigen
    • Excel Formula Translator
  • Office-KnowHow: Experte
  • VBA-KnowHow- : Sehr gut
  • Version [Office] : Office 2016
Antw: Office 2013: Office 2013: VBA Code zum sortieren von Werten
« Antwort #1 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ß
Microsoft Excel Expert · Microsoft Most Valuable Professional (MVP) from 01/2011 - 06/2019
https://de.excel-translator.de :: Online Excel-Formel-Übersetzer :: Alle Übersetzungen der Excel Funktionen & Fehlerwerte

Wenn du dich noch intensiver mit Excel beschäftigen möchtest, dann empfiehlt sich ein Online-Kurs,
in dem du sehr viel über Excel erfährst und das gelernte umgehend in der Praxis anwenden kannst.