입력 한 연도 수에 대한 수식이있는 행을 자동으로 추가하는 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.