decadence
Well-known Member
- Joined
- Oct 9, 2015
- Messages
- 525
- Office Version
- 365
- 2016
- 2013
- 2010
- 2007
- Platform
- Windows
Hi, Is it possible to sort columns via a bubble sort rather than excels standard sort? I am currently sorting columns using a helper column and I want to eliminate the helper columns process. It's basically an Alphanumeric sort which sorts by letter and/or number, the columns sort by A to Z / lowest to highest
I copy the original column to Column AA then Split the data into separate columns on the same row, then sort the columns to sort the original column of data
My code is below
Example to Use code on
I copy the original column to Column AA then Split the data into separate columns on the same row, then sort the columns to sort the original column of data
My code is below
VBA Code:
Option Explicit
Option Compare Text
Dim Match, Matches
Dim Arr As Variant
Dim MatchCount As Long, k As Long
Dim SortRng As Range, Fnd As Range, Rng As Range, Rng2 As Range, xVal As Range
Sub AlphaSort()
'Sorts AlphaNumerically (Decadence 01/2019)
If ActiveSheet Is Nothing Then
MsgBox "No Sheets"
Exit Sub
End If
Arr = Array("References", "Reference", "Ref's", "Refs", "Ref", "Ref-Designator", "MfrComments", "MfrComment", "MfgComments", "MfgComment")
For k = LBound(Arr) To UBound(Arr)
Set Fnd = ActiveSheet.Columns.Find(What:=Arr(k), LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext)
If Not Fnd Is Nothing Then
Set Rng = Range(Fnd.Offset(1), Cells(Rows.count, Fnd.Column).End(xlUp))
Exit For
End If
Next k
If Rng Is Nothing Then
Exit Sub
End If
Rng.Copy Range("AA" & Rng.row)
On Error Resume Next
With CreateObject("VBScript.RegExp")
.Pattern = "(\d+|\D+)"
.Global = True
LR = Range("A" & Rows.count).End(xlUp).row
Set Rng2 = Range("AA1:AA" & LR).SpecialCells(xlCellTypeVisible)
For Each xVal In Rng2
Set Matches = .Execute(xVal.Value)
For MatchCount = 1 To Matches.count
xVal.Offset(, MatchCount).Value = Matches(MatchCount - 1)
Next MatchCount
Next xVal
End With
If IsEmpty(Rng2.Value) Then
Exit Sub
Else
Range("AA1").EntireColumn.Delete
Columns("AA:AG").Replace "_", "", xlPart
Set SortRng = Range("AA1:AG" & LR).SpecialCells(xlCellTypeBlanks)
SortRng.Rows.Delete Shift:=xlToLeft
On Error Resume Next
If Range("A1").Value Like "Ref*" Or Range("A1").Value Like "Mfr*" Or Range("A1").Value Like "Mfg*" Then
With ActiveSheet
.Sort.SortFields.Clear
.Sort.SortFields.Add key:=Range("AA2:AA" & LR), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortTextAsNumbers
.Sort.SortFields.Add key:=Range("AB2:AB" & LR), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortTextAsNumbers
.Sort.SortFields.Add key:=Range("AC2:AC" & LR), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortTextAsNumbers
.Sort.SortFields.Add key:=Range("AD2:AD" & LR), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortTextAsNumbers
.Sort.SortFields.Add key:=Range("AE2:AE" & LR), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortTextAsNumbers
.Sort.SortFields.Add key:=Range("AF2:AF" & LR), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortTextAsNumbers
.Sort.SortFields.Add key:=Range("AG2:AG" & LR), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortTextAsNumbers
.Sort.SetRange Range("A2:AG" & LR)
.Sort.Header = xlGuess
.Sort.MatchCase = False
.Sort.Orientation = xlTopToBottom
.Sort.SortMethod = xlPinYin
.Sort.Apply
End With
Else
With ActiveSheet
.Sort.SortFields.Clear
.Sort.SortFields.Add key:=Range("AA3:AA" & LR), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortTextAsNumbers
.Sort.SortFields.Add key:=Range("AB3:AB" & LR), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortTextAsNumbers
.Sort.SortFields.Add key:=Range("AC3:AC" & LR), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortTextAsNumbers
.Sort.SortFields.Add key:=Range("AD3:AD" & LR), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortTextAsNumbers
.Sort.SortFields.Add key:=Range("AE3:AE" & LR), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortTextAsNumbers
.Sort.SortFields.Add key:=Range("AF3:AF" & LR), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortTextAsNumbers
.Sort.SortFields.Add key:=Range("AG3:AG" & LR), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortTextAsNumbers
.Sort.SetRange Range("A3:AG" & LR)
.Sort.Header = xlGuess
.Sort.MatchCase = False
.Sort.Orientation = xlTopToBottom
.Sort.SortMethod = xlPinYin
.Sort.Apply
End With
End If
End If
Range("AA1").Resize(, 10).EntireColumn.Delete
End Sub
Example to Use code on
Ref | Details | Quantity |
D1 | Apples | 3 |
R1 | Bananas | 4 |
C1 | Pears | 7 |
D2 | Oranges | 6 |