Мой цикл For не удалит ячейки, которые соответствуют вложенным требованиям If - PullRequest
0 голосов
/ 02 января 2019

Я наконец-то заставил это работать, и я счастлив за это, но мне нужно поднять это на следующий уровень для построения графика. Как вы можете видеть, он проходит через столбцы и строки и очищает пару ячеек. Когда я пытаюсь составить график полной строки, в нем появляются пробелы из-за очищенных ячеек. Здесь происходит оператор «с», но это просто ссылка на другой лист, поскольку код выполняется с другого листа; толкать, а не тянуть.

LCcfd = .Standard Last Column code. The cfd referst to the abv. of a sheet.
Lrcfd = .Standard Last Row code. The cfd refers to the abv. of a sheet. 

For x = 2 to LRcfd Step 2
    CF = 2
    For Each cel in .Range(.Cells(x, 2), .Cells(x, LCcfd))
        If cel = 0 Or cel = "0" Then
            cel.Clear
            .Cells(x - 1, CF).Clear
        End If
        CF = CF + 1
    Next
Next

Чтобы перейти на следующий уровень, я попытался изменить .Clear на .Delete Shift:=xlShiftToLeft, и он НЕ работает должным образом. Я подумал, что это потому, что это происходит в столбцах слева направо. Я попытался написать код, чтобы он прошел через «Назад», но он не примет Step -1. Итак, я не знаю, как это сделать.

Что я могу сделать с этим кодом, чтобы он шагнул назад по строкам? Или:

Что вы можете порекомендовать мне изменить код, чтобы это произошло?

Ответы [ 2 ]

0 голосов
/ 04 января 2019

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

Sub GenerateChartDataFromSource()
    Dim sourceWksht As Worksheet
    Set sourceWksht = Application.Worksheets("Source")

    Dim chartWksht As Worksheet
    Set chartWksht = Application.Worksheets("ChartSource")


    Dim sourceRow As Long, sourceColumn As Long
    Dim chartSourceColumn As Long

    Dim sourceContent As Variant

    Dim sourceRowStart As Long, sourceRowEnd As Long
    sourceRowStart = 1
    sourceRowEnd = 10

    Dim sourceColumnStart As Long, sourceColumnEnd As Long
    sourceColumnStart = 1
    sourceColumnEnd = 10

    For sourceRow = sourceRowStart To sourceRowEnd
        chartSourceColumn = sourceColumnStart
        For sourceColumn = sourceColumnStart To sourceColumnEnd
            sourceContent = sourceWksht.Cells(sourceRow, sourceColumn).value
            If sourceContent <> 0 Or sourceContent <> "0" Then
                chartWksht.Cells(sourceRow, chartSourceColumn) = sourceContent
                chartSourceColumn = chartSourceColumn + 1
            End If
        Next sourceColumn
    Next sourceRow
End Sub
0 голосов
/ 02 января 2019

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

dim r as long, c as long 
for r = 10 to 1 step -1
    for c = 10 to 1 step -1
        if cells(r,c).value = 0 or cells(r,c).value = "0" then cells(r,c).delete shift:=xltoleft
    next c 
next r
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...