Создание линейного тренда ряда данных для заполнения между ячейками в одном столбце - PullRequest
1 голос
/ 18 октября 2019

В настоящее время я работаю с измененным набором данных с пробелами в каждом записанном значении. Я хотел бы использовать утилиту заполнения Excel на вкладке «Главная» (редактирование (группа) -> заливка> ряд. Со строками, линейный график, тренд) для создания значений с линейным трендом. Я работаю с диапазоном от A2: A6569, поэтому делать это вручную нецелесообразно. Я сгенерировал эти данные с помощью функции if в Excel, где, если значение не вызывается, его размещение ("") в каждой ячейке. Все, что я нашел и попробовал, не работает.

Пример данных: (где x - пустая ячейка)

  1. "title"
  2. 0.004
  3. x
  4. x
  5. x
  6. 5.214
  7. x
  8. x
  9. 7.01
  10. x
  11. x
  12. x
  13. 6.97

Псевдокод того, что я пробовал:

    Dim rStoA, rStoB, rStoC As Range
    With ActiveSheet.Range("A2:A6569")
        for each value in range 
            if IsNumeric(value) And IsEmpty(rStoA) Then
                rStoA = value
            else if IsNumeric(value) and IsNumeric(rStoA) Then
                rStoB = value
                Set rStoC = .Range(rStoA, rStoB)
                rStoC.DataSeries Rowcol:=xlColumns, Type:=xlLinear, 
                  Date:=xlDay, Trend:=True
                rStoA = rStoB
            end if
        next
    End With 

Из записи макроса я нашел функцию Iнужно из утилиты заполнения Excel:

"selected_range".DataSeries Rowcol:=xlColumns, Type:=xlLinear, Date:=xlDay, Trend:=True

Я считаю, что моя проблема в том, что я использую Range, но я застрял.

Кроме того, было бы лучше, если бы я использовал Range.Find? Если так, может ли кто-нибудь направить меня в правильном направлении с этим?

Я ценю любые советы. Спасибо!

1 Ответ

0 голосов
/ 18 октября 2019

Если я получу то, что вы пытаетесь сделать правильно, вы можете сделать что-то вроде следующего:

Option Explicit

Sub fillSeries()
Dim sht As Worksheet
Dim firstCell As Range, lastCell As Range
Dim fillRange As Range, cell As Range
Dim lastRow As Long, firstRow As Long
Dim fillCol As String
Set sht = ThisWorkbook.Worksheets("Name of your worksheet")
lastRow = 13 'the row of the last cell you want to fill
firstRow = 2 'the row where your data begins
fillCol = "A" 'the column to be filled

For Each cell In Range(sht.Cells(firstRow, fillCol), sht.Cells(lastRow, fillCol))
    If cell.Value = "" Then
        cell.ClearContents
    End If
Next cell
Set firstCell = sht.Range(fillCol & firstRow)
While firstCell.Row <> lastRow
    If firstCell.End(xlDown).Row > lastRow Then
        Set lastCell = sht.Range(fillCol & lastRow)
    Else
        Set lastCell = firstCell.End(xlDown)
    End If
    sht.Range(firstCell, lastCell).DataSeries Type:=xlLinear, Trend:=True
    Set firstCell = lastCell
Wend

End Sub

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

Я не уверен, заполнена ли последняя ячейка диапазона или нет, поэтому я построил код таким образом, чтобы вы могли вручную определить, какая ячейка является последней.

Итак,для предоставленного вами образца данных, предполагая, что заполнение должно остановиться на строке 13 (где 6,97), результат будет следующим:

enter image description here

Если вы хотите продолжить заполнение до, скажем, строки 20, результат будет:

enter image description here

...