Excel: пропуск строк / столбцов из макроса VBA - PullRequest
2 голосов
/ 29 марта 2012

С некоторой помощью я собрал две функции, которые будут работать в унисон, чтобы сначала преобразовать все мои данные из «текстового» формата в «числовой» формат.После чего в каждом столбце будет установлено фиксированное количество символов.

Ниже перечислены две подпрограммы, которые я использую, но я не могу понять, как опустить определенные строки / столбцы для соответствующихfunctions.

При запуске функции psAdd я хочу опустить первые 3 строки из диапазона, а для функции FormatFixedNumber я хочу опустить несколько столбцов.Проблема с последним состоит в том, что у меня есть 1000+ столбцов данных и строка заголовка ключа, содержащая 1 или 0, которая представляет, должен ли столбец быть преобразован.

Как можно изменить этот код, чтобы пропустить первые 3 строкив первом подпункте и нескольких столбцах, помеченных 0 во втором?

Sub psAdd()  
    Dim x As Range 'Just a blank cell for variable
    Dim z As Range 'Selection to work with

    Set z = Cells
    Set x = Range("A65536").End(xlUp).Offset(1)
    If x <> "" Then
        Exit Sub
    Else
        x.Copy
        z.PasteSpecial Paste:=xlPasteAll, Operation:=xlAdd
        Application.CutCopyMode = False 'Kill copy mode
    End If
    x.ClearContents 'Back to normal
End Sub

Sub FormatFixedNumber()

    Dim i As Long

    Application.ScreenUpdating = False
    For i = 1 To lastCol 'replace 10 by the index of the last column of your spreadsheet
        With Columns(i)
            .NumberFormat = String(.Cells(2, 1), "0") 'number length is in second row
        End With
    Next i
    Application.ScreenUpdating = True
End Sub

1 Ответ

3 голосов
/ 29 марта 2012

1. Первый код

В данный момент вы работаете над всеми ячейками на листе с z. Вы можете уменьшить это до UsedRange - игнорируя первые три строки на

  • принудительное обновление UsedRange перед его использованием (чтобы избежать избыточности ячеек)
  • проверка, если z превышает 3 строки
  • если это так, измените размер z на три строки, используя Offset и Resize

    Sub psAdd()
    Dim x As Range    'Just a blank cell for variable
    Dim z As Range    'Selection to work with
    ActiveSheet.UsedRange
    Set z = ActiveSheet.UsedRange
    If z.Rows.Count > 3 Then
        Set z = z.Cells(1).Offset(3, 0).Resize(z.Rows.Count - 3, z.Columns.Count)
    End If
    'using Rows is better than hard-coding 65536 (bottom of xl03 - but not xl07-10)
    Set x = Cells(Rows.Count,"A").End(xlUp).Offset(1)
    If x <> "" Then
        Exit Sub
    Else
        x.Copy
        z.PasteSpecial Paste:=xlPasteAll, Operation:=xlAdd
        Application.CutCopyMode = False    'Kill copy mode
    End If
    x.ClearContents    'Back to normal
    End Sub
    

2. Второй код

Запустите простой тест для каждой ячейки заголовка, чтобы продолжить, если она не равна 0. Если предположить, что ячейка заголовка находится в строке 1, тогда

Sub FormatFixedNumber()
    Dim i As Long
    Application.ScreenUpdating = False
    For i = 1 To lastCol    'replace 10 by the index of the last column of your spreadsheet
        If Cells(1, i) <> 0 Then
            With Columns(i)
                .NumberFormat = String(.Cells(2, 1), "0")    'number length is in second row
            End With
        End If
    Next i
    Application.ScreenUpdating = True
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...