如何使用所有可用的 headers 的列表根据 Headers 对列进行排序?
How to sort Columns based on Headers using a list of all headers that are available?
我收到了几个不同的 excel 电子表格,其中包含多达 30 个不同的列 headers。我真的只需要每个电子表格中的大约 8 或 10 列。我厌倦了左右滚动以找到我需要的列。我想要一个弹出对话框的宏,其中包含所有可用的 headers。我想要 select 我想要的 headers 并让它从左到右剪切和粘贴它们,使它们彼此相邻。
我是 VBA 的新手,正在尝试学习它,但这有点让我头疼。帮助任何人??
我找到了每次都以相同方式组织我的列的方法,但每个电子表格都有不同的列和顺序,所以我需要能够 select 它们。
我建议使用带有列表框的用户表单,您可以在其中 select header。
您可以试试下面的代码。
要求:
用户表单
ListBox > Multiselect 属性 应该是 = 1
按钮 > 将 selected 数据加载到新工作表
Dim mySH As Worksheet
Dim oSH As Worksheet 'Output Worksheet
Private Sub cmd_load_Click()
Dim i As Integer
Dim col_count As Integer
col_count = 1
Dim col_header As String
Dim ns_srow As Integer
ns_srow = 1
'LOOP THRU ALL ITEMS IN LISTBOX AND GET ALL SELECTED
For i = 0 To lst_header.ListCount - 1
If lst_header.Selected(i) Then
col_header = lst_header.List(i)
'FIND THE COLUMN HEADER POSITION AND TRANSFER TO NEWSHEET THE DATA
For a = 1 To mySH.Cells(1, Columns.Count).End(xlToLeft).Column
If mySH.Cells(1, a).Value = col_header Then
For b = 1 To mySH.Cells(Rows.Count, a).End(xlUp).Row
oSH.Cells(ns_srow, col_count).Value = mySH.Cells(b, a).Value
ns_srow = ns_srow + 1
Next b
col_count = col_count + 1
ns_srow = 1
Exit For
End If
Next a
End If
Next i
MsgBox "Data Completed"
End
End Sub
Private Sub UserForm_Initialize()
Set mySH = ThisWorkbook.Sheets("Data") 'name of your raw data worksheet
Set oSH = ThisWorkbook.Sheets("Output") 'output worksheet
'Assuming that column header is at row 1
For a = 1 To mySH.Cells(1, Columns.Count).End(xlToLeft).Column
lst_header.AddItem mySH.Cells(1, a).Value
Next a
End Sub
我收到了几个不同的 excel 电子表格,其中包含多达 30 个不同的列 headers。我真的只需要每个电子表格中的大约 8 或 10 列。我厌倦了左右滚动以找到我需要的列。我想要一个弹出对话框的宏,其中包含所有可用的 headers。我想要 select 我想要的 headers 并让它从左到右剪切和粘贴它们,使它们彼此相邻。
我是 VBA 的新手,正在尝试学习它,但这有点让我头疼。帮助任何人??
我找到了每次都以相同方式组织我的列的方法,但每个电子表格都有不同的列和顺序,所以我需要能够 select 它们。
我建议使用带有列表框的用户表单,您可以在其中 select header。 您可以试试下面的代码。
要求: 用户表单 ListBox > Multiselect 属性 应该是 = 1 按钮 > 将 selected 数据加载到新工作表
Dim mySH As Worksheet
Dim oSH As Worksheet 'Output Worksheet
Private Sub cmd_load_Click()
Dim i As Integer
Dim col_count As Integer
col_count = 1
Dim col_header As String
Dim ns_srow As Integer
ns_srow = 1
'LOOP THRU ALL ITEMS IN LISTBOX AND GET ALL SELECTED
For i = 0 To lst_header.ListCount - 1
If lst_header.Selected(i) Then
col_header = lst_header.List(i)
'FIND THE COLUMN HEADER POSITION AND TRANSFER TO NEWSHEET THE DATA
For a = 1 To mySH.Cells(1, Columns.Count).End(xlToLeft).Column
If mySH.Cells(1, a).Value = col_header Then
For b = 1 To mySH.Cells(Rows.Count, a).End(xlUp).Row
oSH.Cells(ns_srow, col_count).Value = mySH.Cells(b, a).Value
ns_srow = ns_srow + 1
Next b
col_count = col_count + 1
ns_srow = 1
Exit For
End If
Next a
End If
Next i
MsgBox "Data Completed"
End
End Sub
Private Sub UserForm_Initialize()
Set mySH = ThisWorkbook.Sheets("Data") 'name of your raw data worksheet
Set oSH = ThisWorkbook.Sheets("Output") 'output worksheet
'Assuming that column header is at row 1
For a = 1 To mySH.Cells(1, Columns.Count).End(xlToLeft).Column
lst_header.AddItem mySH.Cells(1, a).Value
Next a
End Sub