Я отвечаю за привлечение сотрудников на нашу платформу SSO. Я получаю файл CSV с информацией о сотрудниках в формате: Я уже обрезал данные, удалив пустые строки и уволив сотрудников. (Поскольку это перепись всех сотрудников с момента основания компании.)
Я никогда раньше не использовал макросы, но это становится обычной задачей для 300+ сотрудников и становится очень трудоемким. Теперь я хочу переименовать каждый из столбцов и упорядочить их в определенном порядке c. Первый: удалить столбец «Статус» (активно / прекращено) и столбец «Текущая дата начала работы и предпочтительное имя». Затем переименуйте столбцы следующим образом:
После того, как эти столбцы будут переименованы, я бы хотел, чтобы они были организованы, и чтобы между ними вводились пустые столбцы с указанными c заголовками столбцов. Есть 3 столбца, которые основаны на одной и той же информации на последнем листе: login, email и federation_id. Я хотел бы получить окончательный список в следующем порядке:
логин / имя_первой / фамилия / имя_почты / honorificPrefix / honorificSuffix / электронная почта / заголовок / displayName / никнейм / profileUrl / secondEmail / mobilePhone / primaryPhone / streetAddress / city / state / zipCode / countryCode / postalAddress / предпочитаемый язык / локаль / часовой пояс / userType / employeeNumber / costCenter / организация / подразделение / отдел / managerId / manager / adm_email / adm_username / tcheckAccess / Federation_ID / sshUserName / houstonEmail / activeDate
*
Вот мой код, который я написал до сих пор:
Option Explicit
Sub census_it()
'declare variables
Dim ws As Worksheet
Dim new_column_order As Variant, new_index As Integer
'set variables
Set ws = ThisWorkbook.Worksheets("test")
'clear all filters just incase
ws.ShowAllData
'select range, first column, show all blank,,,, diable alerts,,, delete all visible cells in range,,, enable alerts,,, clear filter
ws.Range("A:O").AutoFilter Field:=1, Criteria1:=""
Application.DisplayAlerts = False
ws.Range("A2:O9999").SpecialCells(xlCellTypeVisible).Delete
Application.DisplayAlerts = True
On Error Resume Next
ws.ShowAllData
On Error GoTo 0
'select range, first column, show all blank,,,, diable alerts,,, delete all visible cells in range,,, enable alerts,,, clear filter
ws.Range("A:O").AutoFilter Field:=13, Criteria1:="Terminated"
Application.DisplayAlerts = False
ws.Range("A2:O9999").SpecialCells(xlCellTypeVisible).Delete
Application.DisplayAlerts = True
On Error Resume Next
ws.ShowAllData
On Error GoTo 0
ws.Range("A:O").AutoFilter Field:=14, Criteria1:=">1/28/2020"
Application.DisplayAlerts = False
ws.Range("A2:O9999").SpecialCells(xlCellTypeVisible).Delete
Application.DisplayAlerts = True
On Error Resume Next
ws.ShowAllData
On Error GoTo 0
'everything below here doesnt work (and this is for reorganizing the data
iRow As Long
Dim iCol As Long’Constant values
data_sheet1 = InputBox(“Specify the name of the Sheet that needs to be reorganised:”) ‘Create Input Box to ask the user which sheet needs to be reorganised
target_sheet = “Final Report” ‘Specify the sheet to store the results
iRow = Sheets(data_sheet1).UsedRange.Rows.Count ‘Determine how many rows are in use’Create a new sheet to store the results
Worksheets.Add.Name = “Final Report”
‘Start organizing columns
For iCol = 1 To Sheets(data_sheet1).UsedRange.Columns.Count
‘Sets the TargetCol to zero in order to prevent overwriting existing targetcolumns
TargetCol = 0
‘Read the header of the original sheet to determine the column order
If Sheets(data_sheet1).Cells(1, iCol).Value = “First Name” Then TargetCol = 1
If Sheets(data_sheet1).Cells(1, iCol).Value = “Middle Name” Then TargetCol = 2
If Sheets(data_sheet1).Cells(1, iCol).Value = “Last Name” Then TargetCol = 3
If Sheets(data_sheet1).Cells(1, iCol).Value = “Date of Birth” Then TargetCol = 4
If Sheets(data_sheet1).Cells(1, iCol).Value = “Phone Number” Then TargetCol = 5
If Sheets(data_sheet1).Cells(1, iCol).Value = “Address” Then TargetCol = 6
If Sheets(data_sheet1).Cells(1, iCol).Value = “City” Then TargetCol = 7
If Sheets(data_sheet1).Cells(1, iCol).Value = “State” Then TargetCol = 8
If Sheets(data_sheet1).Cells(1, iCol).Value = “Postal (ZIP) Code” Then TargetCol = 9
If Sheets(data_sheet1).Cells(1, iCol).Value = “Country” Then TargetCol = 10
‘If a TargetColumn was determined (based upon the header information) then copy the column to the right spot
If TargetCol <> 0 Then
‘Select the column and copy it
Sheets(data_sheet1).Range(Sheets(data_sheet1).Cells(1, iCol), Sheets(data_sheet1).Cells(iRow, iCol)).Copy Destination:=Sheets(target_sheet).Cells(1, TargetCol)
End If
End Sub
Я получил код от http://www.winko-erades.nl/rearrange-columns-in-excel-using-vba/. Но я думаю, что проблема в том, что файл уже в формате CSV, и в нем есть какие-либо таблицы. И этот код предназначен для таблиц на листе, а не только на листе. Кроме того, я не знаю, как вводить в пустые столбцы данных с указанными c заголовками. Любая помощь или руководство, указывающее мне правильное направление для достижения sh того, что я хочу, будет высоко ценится! Спасибо!