Excel: динамический список чисел на основе ввода - PullRequest
1 голос
/ 12 марта 2019

Я пытаюсь составить список чисел на основе жестко закодированного ввода.

скажем, если я напишу «5» в A1, то я хочу список чисел 1,2,3,4,5 в столбце ниже.Если ввести значение 25, список увеличится до 1-25 и т. Д.

1004 * Кто-нибудь может мне помочь с этим?

С уважением

Ответы [ 3 ]

2 голосов
/ 12 марта 2019

Использование формул:

в A2 используйте следующую формулу:

=IFERROR(IF(A1="","",1),"")

В A3 Использование:

=IFERROR(IF(A2+1>A$1,"",A2+1),"")

И заселить вниз

2 голосов
/ 12 марта 2019

Вам понадобится Worksheet_Change() событие:

Private Sub Worksheet_Change(ByVal Target As Range)

    If Target.Address = "$A$1" Then

        Range("A2:A1048576").ClearContents

        For i = 1 To Target.Value
            Cells(i + 1, 1).Value = i
        Next i

    End If

End Sub
1 голос
/ 13 марта 2019

Numbered

Функции

  • Когда значение в Source Cell Range изменяется с помощью пользовательского ввода или с помощью VBA, программа запускается.Он не запустится, если Source Cell Range содержит формулу и значение изменилось из-за изменения другой ячейки.Для этой функции вы должны использовать событие Worksheet Calculate.
  • Если значение не является числом, ничего не произойдет.
  • Если значение является десятичным числом (1.5), то онобудет округлено до ближайшего целого числа (2).
  • Если значение превышает количество строк в листе, лист будет заполнен до нижней ячейки.Остальные значения будут игнорироваться.
  • Измените Source Cell Range Address в Worksheet_Change (установите на A1) в соответствии с вашими потребностями, например C17. Будут затронуты только указанные ниже ячейки.

Код

Скопируйте следующий код в стандартный модуль (VBE >> Insert >> Module)например,

Module1

Option Explicit

Sub Numbered(CellRange As Range)

    Dim vntT As Variant          ' Target Array/Value
    Dim srcVal As Variant        ' Value
    Dim srcMax As Long           ' Maximum Value
    Dim srcSgn As Long           ' Sign (+-)
    Dim srcAbs As Long           ' Absolute Value
    Dim i As Long                ' Target Array Row Counter

    ' In Cell Range
    With CellRange
        ' Write value of CellRange to Value.
        srcVal = .Value
        ' Calculate Maximum Value.
        srcMax = .Worksheet.Rows.Count - .Offset(1).Row + 1
    End With

    ' Check if Value is a number.
    If IsNumeric(srcVal) Then
        ' Convert Value to whole number.
        srcVal = CLng(srcVal)
        ' Write the sign of Value to Sign.
        srcSgn = Sgn(srcVal)
        ' Check if the absolute value of Value is greater than Maximum Value.
        If Abs(srcVal) > srcMax Then
            ' Write Maximum Value with (correct) Sign to Value.
            srcVal = srcSgn * srcMax
        End If
        ' Write the absolute value of Value to Absolute Value.
        srcAbs = Abs(srcVal)
        ' Check Absolute Value
        Select Case srcAbs
            Case Is > 1
                ' Resize Target Array to Absolute Value rows and one column.
                ReDim vntT(1 To srcAbs, 1 To 1)
                ' Loop through rows of Target Array.
                For i = 1 To srcAbs
                    ' Write to element at i-th row and 1st column
                    ' of Target Array.
                    vntT(i, 1) = srcSgn * i
                Next
            Case 1
                ' If Absolute Value is 1, vntT will not be an array, but a
                ' variant containing one value.
                vntT = srcSgn * 1
            Case 0
                ' If Absolute Value is 0, vntT will not be an array, but a
                ' variant containing one value.
                vntT = 0 ' or ""
        End Select
    End If

    ' In First Cell of Target Range (Cell Below Cell Range)
    With CellRange.Offset(1)
        ' Resize to bottom cell and clear contents.
        .Resize(srcMax).ClearContents
        ' Check if vntT is an array.
        If IsArray(vntT) Then   ' Multiple values
            ' Calculate Target Range: Resize First Cell of Target Range by
            ' Absolute Value.
            ' Copy Target Array to Target Range.
            .Resize(srcAbs) = vntT
          Else                  ' One value
            ' Write Target Value to First Cell of Target Range.
            .Value = vntT
        End If
    End With

End Sub

Скопируйте следующий код в любой листовой модуль , где вы хотите запустить программу, например

Лист1

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

    Const cSrc As String = "A1"  ' Source Cell Range Address

    If Target.Address = Range(cSrc).Address Then
        Numbered Target
    End If

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