입력 한 연도 수에 대한 수식이있는 행을 자동으로 추가하는 Excel


1

모델을 만들려고합니다. 다루고 싶은 연도 범위를 입력 할 수있는 입력 페이지를 갖고 싶습니다. 입력 된 년 수에 따라 기존 수식으로 테이블 (다른 워크 시트)을 채우고 싶습니다.

좀 더 구체적으로 말하면, 2005-2014 년에 이르기까지 매년 행이있는 수식으로 가득 찬 테이블이 있습니다.
내 요청은 다음과 같습니다.

몇 년이 걸리고 입력 범위를 기반으로 테이블을 변경하고 행을 추가 / 빼는 입력 페이지를 만드는 방법이 있습니까? 예를 들어 입력 페이지의 범위를 2005-2018로 변경하면 표에 방정식으로 4 행이 더 추가됩니다.


매크로를 사용하여이 작업을 수행하거나 더 많은 행을 복사 한 수식을 사용할 수 있습니다. = if (sheet1! a1 = "", "", 여기서 수식)
gtwebb

답변:


0

해결 방법이
를 자동화하려면 시작 및 종료 연도를 업데이트 한 후 테이블 크기를 조정하는 일부 VBA 코드를 사용하십시오.

코드
다음은 "Sheet1"(셀 B1 및 B2)과 "Sheet2"의 테이블을 사용한 구현입니다. 당신이 참고 해야한다 코드가 해당 용지에 뭔가를 변경할 때마다 실행하기 때문에, 세월에있는 시트에이 코드를 추가합니다. 제 경우에는이 코드가 "Sheet1"에 추가됩니다.

Private Sub Worksheet_change(ByVal Target As Range)
    Dim StartYear, EndYour As Range
    Dim UpdateTable As ListObject
    Dim NrOfRows, OldNrOfRows As Integer

    ' Set some ranges
    Set StartYear = Worksheets("Sheet1").Cells(1, 2)
    Set EndYear = Worksheets("Sheet1").Cells(2, 2)
    Set UpdateTable = Worksheets("Sheet2").ListObjects("Table1")

    ' Check if start or end years have changed
    If (Not Intersect(StartYear, Target) Is Nothing) Or (Not Intersect(EndYear, Target) Is Nothing) Then
        ' Store the new and old number of rows
        OldNrOfRows = UpdateTable.ListRows.Count - 1
        NrOfRows = EndYear.Value - StartYear.Value + 1

        ' Resize the table
        UpdateTable.Resize UpdateTable.Range.Resize(1 + NrOfRows)

        'Delete cells below the table if it gets smaller
        If OldNrOfRows > NrOfRows Then
            UpdateTable.Range.Offset(NrOfRows + 1, 0).Resize(OldNrOfRows - NrOfRows + 1).Delete
        End If
    End If
End Sub

코드에 대한 설명의 일부 포인트 코드를 설명
하기 위해 Microsoft 함수 / 방법 / 속성에 대한 일부 참조 :


나는 사무실에서 나왔고 이것을 시도 할 수 없었다. 이월 할 모든 기능을 적용하기 위해 테이블을 어떻게 업데이트합니까? sheet2에 간단한 테이블을 넣고 "Table1"이라는 이름을 제공했지만 EndYear를 변경하면 코딩을 디버깅하는 오류가 발생했습니다. 더 설명 할 방법이 있습니까? 미리 감사드립니다! 샘

따라서 테이블 영역을 선택하고 테이블 이름을 제공 한 후 "테이블 삽입"을 누르면 매크로에 포함하지만 테이블 이름을 지정하면 작동하지 않습니다. 또 다른 qustion, table1, table2, table3을 업데이트하기 위해 루프를 수행하는 방법이 있습니까? 감사합니다 !!
Sam

@ Sam : 당신은 무엇을 시도 했습니까? SU는 소프트웨어 팩토리가 아닙니다. VBA에서 Microsoft의 도움말 사이트를 살펴보십시오. -FOR EACH-NEXT 루프 를해야한다. 직접 시도하지 않으면 결코 배울 수 없습니다.
agtoever

@Sam : 답변이 귀하에게 적합한 경우 질문을 "허용됨"으로 표시하는 것이 예의 바른 것으로 간주됩니다.
agtoever

내 appologize! 11 월 중순까지 풀 타임이되었습니다. 따라서 나는 금요일에 일주일에 하루 만 파일에 액세스 할 수 있습니다. 모든 정직에서 나는 루프를 작성하고 대부분의 작동을 얻었지만 분명히 저장하지는 않았습니다. 나는 오늘 루프를 다시 시도하고 조언을 위해 당신에 의해 그것을 실행하려고합니다.
Sam
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.