Выберите ячейки в Microsoft Excel на основе значений данного столбца - PullRequest
0 голосов
/ 15 апреля 2020

Прежде всего, я полный новичок в VBA, и мои следующие соображения основаны на моем поиске по теме

Вот моя проблема: мне нужно удалить для каждой строки количество клетки, обозначенные фиолетовым. Я пытаюсь написать небольшой сценарий VBA, который позволяет мне автоматизировать это. Поскольку этот диапазон является непрерывным (я должен удалить все ячейки, начиная со столбца F справа), я знаю, что с помощью VBA я могу использовать Range().Select

В идеале я думал, что рабочий процесс будет как то так:

    for each line in {2,N}
    do 
    fcol = 6 + "$EN" # "$EN" means the value of the cell located in fixed column E, N line; fcol is the final column number
    Range(6,N:fcol,N).Select # from six column (F) to end column, "fcol"
enddo

но я не знаю, как реализовать это в VBA: | Любая помощь будет приветствоваться!

enter image description here

Ответы [ 2 ]

1 голос
/ 15 апреля 2020

Если я правильно понял, вы хотите удалить ячейки справа от столбца E в соответствии со значением в столбце E (каждая строка имеет собственное значение). В таком случае я записал это:

Sub SubDeleteCells()

    'Declarations.
    Dim RngCommanderColumn As Range
    Dim RngTargetCell As Range

    'Setting variable.
    Set RngCommanderColumn = Range(Range("E2"), Range("E" & Rows.Count))

    'Covering each cell in RngCommanderColumn.
    For Each RngTargetCell In RngCommanderColumn
        'Checking if RngTargetCell is blank; in such case i leave the For-Next cycle.
        If RngTargetCell.Value = "" Then GoTo TargetCellBlank

        'Checking if the value in RngTargetCell is numeric.
        If IsNumeric(RngTargetCell.Value) Then
            'Checking if the value in RngTargetCell greater than 0.
            If RngTargetCell.Value > 0 Then
                'Deleting the cells.
                Range(RngTargetCell.Offset(0, 1), RngTargetCell.Offset(0, RngTargetCell.Value)).Delete xlShiftToLeft
            End If
        Else
            'Reporting the invalid value.
            MsgBox "Cell " & RngTargetCell.Address & " contains an invalid value", , "Invalid input: " & RngTargetCell.Value
        End If

    Next

TargetCellBlank:

    'Reporting.
    MsgBox "Cells from " & RngCommanderColumn.Cells(1, 1).Address & " to " & RngTargetCell.Address & " evaluated.", , "Task completed"

End Sub

Не стесняйтесь спрашивать о любой линии и добро пожаловать в VBA. Это удивительно.

1 голос
/ 15 апреля 2020

попробуйте

Sub test()
    Dim cel As Range

    For Each cel In Range("E2", Cells(Rows.Count, 5).End(xlUp))
        If cel.Value > 0 Then cel.Offset(, 1).Resize(, cel.Value).ClearContents ' this will delete cell content only
        If cel.Value > 0 Then cel.Offset(, 1).Resize(, cel.Value).Delete xlToLeft ' this will delete cells and shifting left those at the right of deleted ones
    Next
End Sub

просто удалите ненужную строку на основе оставленных мной комментариев

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