В Excel есть способ скопировать NumberFormat из входного диапазона с несколькими столбцами в выходной диапазон с таким же количеством столбцов?
Я пробовал несколько вариантов в этом примере кода, но есть либо нет изменений в форматировании выходного диапазона, когда я пытаюсь получить его из нескольких столбцов, либо производительность копирования значений слишком проблематична c.
Sub Import()
'Demonstration variables
Dim ws_input As Worksheet: Set ws_input = ThisWorkbook.Sheets(1)
Dim ws_output As Worksheet: Set ws_output = ThisWorkbook.Sheets(2)
Dim rowLast As Double, colLast As Double, i As Double
rowLast = ws_input.Cells(Rows.Count, 1).End(xlUp).Row
colLast = ws_input.Cells(1, Columns.Count).End(xlToLeft).Column
'This variant is way too much of a performance hit and Excel can misapply formatting
'E.g. Cell XFD1048576 is considered used
ws_input.Cells.Copy Destination:=ws_output.Range("A1")
'This variant can copy "###" as the value if the input cell widths are too small
ws_output.Range("A1", Cells(rowLast, colLast).Address).Value = _
ws_input.Range("A1", Cells(rowLast, colLast).Address).Value
'This variant copies values correctly but without formatting
ws_output.Range("A1", Cells(rowLast, colLast).Address).Value2 = _
ws_input.Range("A1", Cells(rowLast, colLast).Address).Value2
ws_output.Range("A1", Cells(rowLast, colLast).Address).NumberFormat = _
ws_input.Range("A1", Cells(rowLast, colLast).Address).NumberFormat
'This variant also seemingly does nothing with the NumberFormat
ws_output.Range("A1", Cells(rowLast, colLast).Address).EntireColumn.NumberFormat = _
ws_input.Range("A1", Cells(rowLast, colLast).Address).EntireColumn.NumberFormat
'This variant also seemingly does nothing with the NumberFormat
ws_output.Range("A1").CurrentRegion.NumberFormat = _
ws_input.Range("A1").CurrentRegion.NumberFormat
'Kludgy solution I've come to
For i = 1 to colLast
ws_output.Columns(i).NumberFormat = ws_input.Columns(i).NumberFormat
Next i
End Sub
Я надеюсь избежать необходимости использовать итератор каждый раз, когда мне нужно применить форматирование чисел, и кажется, что в Excel должен быть более интуитивно понятный способ применения свойства NumberFormat к нескольким диапазонам из нескольких диапазонов. Если бы я хотел использовать только один диапазон в качестве формата, ws_output.Range("A1:Z9999").NumberFormat = ws_input.Range("A1").NumberFormat
работает, но, похоже, он выходит из строя при использовании нескольких источников столбцов.
Спасибо за ваше время! Я очень признателен за любую помощь в этом топи c.