모델을 만들려고합니다. 다루고 싶은 연도 범위를 입력 할 수있는 입력 페이지를 갖고 싶습니다. 입력 된 년 수에 따라 기존 수식으로 테이블 (다른 워크 시트)을 채우고 싶습니다.
좀 더 구체적으로 말하면, 2005-2014 년에 이르기까지 매년 행이있는 수식으로 가득 찬 테이블이 있습니다.
내 요청은 다음과 같습니다.
몇 년이 걸리고 입력 범위를 기반으로 테이블을 변경하고 행을 추가 / 빼는 입력 페이지를 만드는 방법이 있습니까? 예를 들어 입력 페이지의 범위를 2005-2018로 변경하면 표에 방정식으로 4 행이 더 추가됩니다.
답변
해결 방법이
를 자동화하려면 시작 및 종료 연도를 업데이트 한 후 테이블 크기를 조정하는 일부 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 함수 / 방법 / 속성에 대한 일부 참조 :
- 셀의 값이 변경 될 때마다 Excel에서 하위를 호출 할 수 있습니다 . 해당 서브가 호출
Worksheet_change
되고 변경된 셀이 범위 값으로 제공됩니다. - 교차 함수 를 사용하여 시작 / 끝 연도가 포함 된 셀이 변경되었는지 확인합니다. NOT-NOTHING 구조는 읽기가 약간 어려울 수 있지만
IF
NOT-NOTHING이 변경되면 입력 결과가 나타납니다 . - 테이블의 크기를 조절하려면, 내가 사용 ListObject의 크기 조정 방법 (범위 객체를 필요)와 범위 개체의 크기 조정 메도 (하나 개 또는 두 개의 INT의 필요).
- 마지막으로 테이블이 작아지면 새 테이블 아래의 내용을 수동으로 삭제해야했습니다. 여기서 다시 중첩 범위 오프셋 및 범위 크기 조정 기능을 사용하여 올바른 범위 를 삭제합니다 .