Как округлить столбцы в зависимости от типа заголовка - PullRequest
1 голос
/ 05 июня 2019

У меня есть таблица, состоящая из строк и чисел.Первая строка содержит заголовок, а вторая - тип единицы (проценты и доллары).Я хотел бы округлить числа в столбце на основе заголовка во второй строке.

В данный момент я выбираю столбцы по отдельности.Есть ли способ округлить столбец на основе заголовка во втором ряду?

Sub Round()

Dim Lastrow As Long
Lastrow = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row 'Determine 
last row

        For Each cell In ActiveSheet.Range("R3:R" & Lastrow)
        cell.Value = WorksheetFunction.Round(cell.Value, 2) 'Round dollars to 2 places
        Next cell

        For Each cell In ActiveSheet.Range("AB3:AB" & Lastrow)
        cell.Value = WorksheetFunction.Round(cell.Value, 2)
        Next cell

       For Each cell In ActiveSheet.Range("Q3:Q" & Lastrow)
       cell.Value = WorksheetFunction.Round(cell.Value, 1) 'Round percentages to 1 places
       Next cell

       ....

End Sub

1 Ответ

0 голосов
/ 05 июня 2019

Вы были достаточно близко, просто нужно было немного от обеих этих попыток вместе. Посмотрите, поможет ли приведенное ниже, я также добавил альтернативу, использующую массивы (если у вас много данных, это будет намного быстрее):

Sub RoundRanges()

Dim ws As Worksheet: Set ws = ActiveSheet 'better use something like: ActiveWorkbook.Sheets("Sheet name here")
Dim lRow As Long: lRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row 'get last row
Dim lCol As Long: lCol = ws.Cells(2, ws.Columns.Count).End(xlToLeft).Column 'get last column

Dim R As Long, C As Long

For C = 1 To lCol 'iterate through each column
    Select Case ws.Cells(2, C) 'get the text of the cell 2...
        Case "Percent"
            For R = 3 To lRow 'iterate through each row
                ws.Cells(R, C) = WorksheetFunction.Round(ws.Cells(R, C).Value, 1) 'apply the desired calculation
            Next R
        Case "Dollars"
            For R = 3 To lRow 'iterate through each row
                ws.Cells(R, C) = WorksheetFunction.Round(ws.Cells(R, C).Value, 2) 'apply the desired calculation
            Next R
    End Select
Next C

'ALTERNATIVE:
'Dim arrData As Variant: arrData = ws.Range(ws.Cells(1, 1), ws.Cells(lRow, lCol))
'For R = LBound(arrData) + 2 To UBound(arrData) 'skip first 2 rows
'    For C = LBound(arrData, 2) To UBound(arrData, 2)
'        If arrData(2, C) = "Percent" Then
'            arrData(R, C) = Round(arrData(R, C), 1)
'        ElseIf arrData(2, C) = "Dollars" Then
'            arrData(R, C) = Round(arrData(R, C), 2)
'        End If
'    Next C
'Next R
'ws.Range(ws.Cells(1, 1), ws.Cells(lRow, lCol)) = arrData

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...