在新工作簿中设置列数据类型 VBA
Set columns datatype in new workbook VBA
我有一个这样的宏,我从一个工作表加载数据,用它做一些事情,然后创建新的工作簿,我在其中保存转换后的数据。
我的问题是:如何在新工作簿中设置整个列的格式(数据类型,如日期、百分比、整数、字符串、(...))?
例如,我希望 col1
即 column A
为 int
,因为它是 ID,col2
为 date
和 col3
percentage
例如。
提一下:我将所有数据保存在最终工作簿中,从第三行开始 - 第一行是空的,第二行有列名 (headers),从第三行到第 N 行我有我的数据。
Sub new_worksheet()
Dim harm As Worksheet, ids As Worksheet
Set harm = Sheets("harm + rmk")
Dim wb As Workbook, wb_new As Workbook
Set wb = ActiveWorkbook
Set wb_new = Workbooks.Add()
Dim lastRow As Long, arr, arrFin, i As Long, dict As Object
lastRow = harm.Range("A" & harm.Rows.Count).End(xlUp).Row 'last row
nr_x = harm.Range("F2:H" & lastRow).Value
arr_ids = harm.Range("L2:L" & lastRow).Value
Set dict = CreateObject("Scripting.Dictionary") 'set the dictionary
For i = 1 To UBound(arr)
dict(arr_ids(i, 1)) = Array(nr_x(i, 1), nr_x(i, 2))
Next i
ReDim arrFin(1 To dict.Count, 1 To 3) 'redim the final array to keep two rows per a dictionary key
For i = 0 To dict.Count - 1
arrFin(i + 1, 1) = dict.Keys()(i)
arrFin(i + 1, 2) = dict.Items()(i)(0)
arrFin(i + 1, 3) = dict.Items()(i)(1)
Next i
Dim MyArr As Variant
MyArr = Array("col1", "col2", "col3")
wb_new.Sheets(1).Range("A2").Resize(1, UBound(MyArr) + 1).Value = MyArr
wb_new.Sheets(1).Range("A3").Resize(UBound(arrFin), UBound(arrFin, 2)).Value = arrFin
wb_new.SaveAs Filename:=wb.Path & "\final_worksheet.xlsm", FileFormat:=52
wb_new.Close saveChanges:=False
End Sub
您可以像这样设置整个列的格式:
Columns("A:A").NumberFormat = "0" 'numbers without decimals
Columns("B:B").NumberFormat = "m/d/yyyy" 'dates
Columns("C:C").NumberFormat = "0" 'number
Columns("C:C").Style = "Percent" 'percentages
我有一个这样的宏,我从一个工作表加载数据,用它做一些事情,然后创建新的工作簿,我在其中保存转换后的数据。
我的问题是:如何在新工作簿中设置整个列的格式(数据类型,如日期、百分比、整数、字符串、(...))?
例如,我希望 col1
即 column A
为 int
,因为它是 ID,col2
为 date
和 col3
percentage
例如。
提一下:我将所有数据保存在最终工作簿中,从第三行开始 - 第一行是空的,第二行有列名 (headers),从第三行到第 N 行我有我的数据。
Sub new_worksheet()
Dim harm As Worksheet, ids As Worksheet
Set harm = Sheets("harm + rmk")
Dim wb As Workbook, wb_new As Workbook
Set wb = ActiveWorkbook
Set wb_new = Workbooks.Add()
Dim lastRow As Long, arr, arrFin, i As Long, dict As Object
lastRow = harm.Range("A" & harm.Rows.Count).End(xlUp).Row 'last row
nr_x = harm.Range("F2:H" & lastRow).Value
arr_ids = harm.Range("L2:L" & lastRow).Value
Set dict = CreateObject("Scripting.Dictionary") 'set the dictionary
For i = 1 To UBound(arr)
dict(arr_ids(i, 1)) = Array(nr_x(i, 1), nr_x(i, 2))
Next i
ReDim arrFin(1 To dict.Count, 1 To 3) 'redim the final array to keep two rows per a dictionary key
For i = 0 To dict.Count - 1
arrFin(i + 1, 1) = dict.Keys()(i)
arrFin(i + 1, 2) = dict.Items()(i)(0)
arrFin(i + 1, 3) = dict.Items()(i)(1)
Next i
Dim MyArr As Variant
MyArr = Array("col1", "col2", "col3")
wb_new.Sheets(1).Range("A2").Resize(1, UBound(MyArr) + 1).Value = MyArr
wb_new.Sheets(1).Range("A3").Resize(UBound(arrFin), UBound(arrFin, 2)).Value = arrFin
wb_new.SaveAs Filename:=wb.Path & "\final_worksheet.xlsm", FileFormat:=52
wb_new.Close saveChanges:=False
End Sub
您可以像这样设置整个列的格式:
Columns("A:A").NumberFormat = "0" 'numbers without decimals
Columns("B:B").NumberFormat = "m/d/yyyy" 'dates
Columns("C:C").NumberFormat = "0" 'number
Columns("C:C").Style = "Percent" 'percentages