VBA-Excel Rearrange columns in alphabetical order when new column is added
I´m having issues on my file when adding a new column through VBA. When clicking on a button it gets a process ID number and creates a column on table from a different sheet.
How can I rearrange the columns order alphabetically (By header value) each time a new column is added.
The number of columns is dynamic and I can´t know the header name until the user creates a process.
This is my current code:
'Create a new column on the process assignment table
Sheets("T_PRAS").ListObjects("T_PRAS").ListColumns.Add.Name = "PR_" & Sheets("Administrador").Range("B53").Value
excel vba excel-vba
add a comment |
I´m having issues on my file when adding a new column through VBA. When clicking on a button it gets a process ID number and creates a column on table from a different sheet.
How can I rearrange the columns order alphabetically (By header value) each time a new column is added.
The number of columns is dynamic and I can´t know the header name until the user creates a process.
This is my current code:
'Create a new column on the process assignment table
Sheets("T_PRAS").ListObjects("T_PRAS").ListColumns.Add.Name = "PR_" & Sheets("Administrador").Range("B53").Value
excel vba excel-vba
Record a macro while sorting the table (use the "Sort left to right" option) and use that as a starting point.
– Tim Williams
Nov 19 '18 at 20:52
add a comment |
I´m having issues on my file when adding a new column through VBA. When clicking on a button it gets a process ID number and creates a column on table from a different sheet.
How can I rearrange the columns order alphabetically (By header value) each time a new column is added.
The number of columns is dynamic and I can´t know the header name until the user creates a process.
This is my current code:
'Create a new column on the process assignment table
Sheets("T_PRAS").ListObjects("T_PRAS").ListColumns.Add.Name = "PR_" & Sheets("Administrador").Range("B53").Value
excel vba excel-vba
I´m having issues on my file when adding a new column through VBA. When clicking on a button it gets a process ID number and creates a column on table from a different sheet.
How can I rearrange the columns order alphabetically (By header value) each time a new column is added.
The number of columns is dynamic and I can´t know the header name until the user creates a process.
This is my current code:
'Create a new column on the process assignment table
Sheets("T_PRAS").ListObjects("T_PRAS").ListColumns.Add.Name = "PR_" & Sheets("Administrador").Range("B53").Value
excel vba excel-vba
excel vba excel-vba
edited Nov 20 '18 at 7:18
Pᴇʜ
22.4k42850
22.4k42850
asked Nov 19 '18 at 20:10
Luis CamachoLuis Camacho
82
82
Record a macro while sorting the table (use the "Sort left to right" option) and use that as a starting point.
– Tim Williams
Nov 19 '18 at 20:52
add a comment |
Record a macro while sorting the table (use the "Sort left to right" option) and use that as a starting point.
– Tim Williams
Nov 19 '18 at 20:52
Record a macro while sorting the table (use the "Sort left to right" option) and use that as a starting point.
– Tim Williams
Nov 19 '18 at 20:52
Record a macro while sorting the table (use the "Sort left to right" option) and use that as a starting point.
– Tim Williams
Nov 19 '18 at 20:52
add a comment |
2 Answers
2
active
oldest
votes
This is mildly tested, but I've done a similar thing when sorting worksheets and this appears to work with your table as well.
Dim x As Long, y As Long, tbl As ListObject
Set tbl = ActiveSheet.ListObjects("T_PRAS")
' Loop through each column
With tbl.ListColumns
For x = 1 To tbl.ListColumns.Count
For y = x + 1 To tbl.ListColumns.Count
If .Item(y).Name < .Item(x).Name Then
.Item(y).Range.Cut
.Item(x).Range.Insert xlRight
End If
Next y
Next x
End With
Essentially, you have two loops. The first loop is comparing the column name with the second, and if the name of the 2nd loop comes before the first, then it will move that column.
Thank you very much, this works perfect
– Luis Camacho
Nov 20 '18 at 20:48
add a comment |
Try
Sub test()
Dim Ws As Worksheet
Dim obj As ListObject
Dim rng As Range
Set Ws = Sheets("T_PRAS")
Set obj = Ws.ListObjects("T_PRAS")
Set rng = obj.DataBodyRange.CurrentRegion
With Ws.Sort
.SetRange rng
.Header = xlGuess
.MatchCase = False
.Orientation = xlLeftToRight
.SortMethod = xlPinYin
.Apply
End With
End Sub
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53381921%2fvba-excel-rearrange-columns-in-alphabetical-order-when-new-column-is-added%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
This is mildly tested, but I've done a similar thing when sorting worksheets and this appears to work with your table as well.
Dim x As Long, y As Long, tbl As ListObject
Set tbl = ActiveSheet.ListObjects("T_PRAS")
' Loop through each column
With tbl.ListColumns
For x = 1 To tbl.ListColumns.Count
For y = x + 1 To tbl.ListColumns.Count
If .Item(y).Name < .Item(x).Name Then
.Item(y).Range.Cut
.Item(x).Range.Insert xlRight
End If
Next y
Next x
End With
Essentially, you have two loops. The first loop is comparing the column name with the second, and if the name of the 2nd loop comes before the first, then it will move that column.
Thank you very much, this works perfect
– Luis Camacho
Nov 20 '18 at 20:48
add a comment |
This is mildly tested, but I've done a similar thing when sorting worksheets and this appears to work with your table as well.
Dim x As Long, y As Long, tbl As ListObject
Set tbl = ActiveSheet.ListObjects("T_PRAS")
' Loop through each column
With tbl.ListColumns
For x = 1 To tbl.ListColumns.Count
For y = x + 1 To tbl.ListColumns.Count
If .Item(y).Name < .Item(x).Name Then
.Item(y).Range.Cut
.Item(x).Range.Insert xlRight
End If
Next y
Next x
End With
Essentially, you have two loops. The first loop is comparing the column name with the second, and if the name of the 2nd loop comes before the first, then it will move that column.
Thank you very much, this works perfect
– Luis Camacho
Nov 20 '18 at 20:48
add a comment |
This is mildly tested, but I've done a similar thing when sorting worksheets and this appears to work with your table as well.
Dim x As Long, y As Long, tbl As ListObject
Set tbl = ActiveSheet.ListObjects("T_PRAS")
' Loop through each column
With tbl.ListColumns
For x = 1 To tbl.ListColumns.Count
For y = x + 1 To tbl.ListColumns.Count
If .Item(y).Name < .Item(x).Name Then
.Item(y).Range.Cut
.Item(x).Range.Insert xlRight
End If
Next y
Next x
End With
Essentially, you have two loops. The first loop is comparing the column name with the second, and if the name of the 2nd loop comes before the first, then it will move that column.
This is mildly tested, but I've done a similar thing when sorting worksheets and this appears to work with your table as well.
Dim x As Long, y As Long, tbl As ListObject
Set tbl = ActiveSheet.ListObjects("T_PRAS")
' Loop through each column
With tbl.ListColumns
For x = 1 To tbl.ListColumns.Count
For y = x + 1 To tbl.ListColumns.Count
If .Item(y).Name < .Item(x).Name Then
.Item(y).Range.Cut
.Item(x).Range.Insert xlRight
End If
Next y
Next x
End With
Essentially, you have two loops. The first loop is comparing the column name with the second, and if the name of the 2nd loop comes before the first, then it will move that column.
edited Nov 20 '18 at 22:07
answered Nov 19 '18 at 21:04
K.DᴀᴠɪsK.Dᴀᴠɪs
7,229112439
7,229112439
Thank you very much, this works perfect
– Luis Camacho
Nov 20 '18 at 20:48
add a comment |
Thank you very much, this works perfect
– Luis Camacho
Nov 20 '18 at 20:48
Thank you very much, this works perfect
– Luis Camacho
Nov 20 '18 at 20:48
Thank you very much, this works perfect
– Luis Camacho
Nov 20 '18 at 20:48
add a comment |
Try
Sub test()
Dim Ws As Worksheet
Dim obj As ListObject
Dim rng As Range
Set Ws = Sheets("T_PRAS")
Set obj = Ws.ListObjects("T_PRAS")
Set rng = obj.DataBodyRange.CurrentRegion
With Ws.Sort
.SetRange rng
.Header = xlGuess
.MatchCase = False
.Orientation = xlLeftToRight
.SortMethod = xlPinYin
.Apply
End With
End Sub
add a comment |
Try
Sub test()
Dim Ws As Worksheet
Dim obj As ListObject
Dim rng As Range
Set Ws = Sheets("T_PRAS")
Set obj = Ws.ListObjects("T_PRAS")
Set rng = obj.DataBodyRange.CurrentRegion
With Ws.Sort
.SetRange rng
.Header = xlGuess
.MatchCase = False
.Orientation = xlLeftToRight
.SortMethod = xlPinYin
.Apply
End With
End Sub
add a comment |
Try
Sub test()
Dim Ws As Worksheet
Dim obj As ListObject
Dim rng As Range
Set Ws = Sheets("T_PRAS")
Set obj = Ws.ListObjects("T_PRAS")
Set rng = obj.DataBodyRange.CurrentRegion
With Ws.Sort
.SetRange rng
.Header = xlGuess
.MatchCase = False
.Orientation = xlLeftToRight
.SortMethod = xlPinYin
.Apply
End With
End Sub
Try
Sub test()
Dim Ws As Worksheet
Dim obj As ListObject
Dim rng As Range
Set Ws = Sheets("T_PRAS")
Set obj = Ws.ListObjects("T_PRAS")
Set rng = obj.DataBodyRange.CurrentRegion
With Ws.Sort
.SetRange rng
.Header = xlGuess
.MatchCase = False
.Orientation = xlLeftToRight
.SortMethod = xlPinYin
.Apply
End With
End Sub
answered Nov 20 '18 at 0:56
Dy.LeeDy.Lee
3,6421510
3,6421510
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53381921%2fvba-excel-rearrange-columns-in-alphabetical-order-when-new-column-is-added%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Record a macro while sorting the table (use the "Sort left to right" option) and use that as a starting point.
– Tim Williams
Nov 19 '18 at 20:52