4 개의 열이있는 테이블로 재구성되어야하는 테이블 (200 행 * 77 열)이 있습니다. UNION으로 가능해야하지만, 결국 75 개의 UNION 문으로 끝납니다. msAccess2007은 예외가 아닙니다. 또한 Excel에서 코드를 함께 연결하더라도 구성하는 것이 귀찮습니다. (내 코드를 두 블록으로 실행하면 제대로 작동합니다.)
그렇다면 Access가 코드를 처리하고 작성하기 더 쉽게 코드를 짧게 만드는 방법이 있습니까?
예제 데이터
ID Var1_1 Var2_1 Var2_2 Var2_3
C2816 45654 5.050551 4.050
B2811 5.98
C2814 453 1.52
C2819 4 3.06141 6.8845
B291 53 2.2
결과는 어떻게 보일까요
ID ContentGroup Content Volume
C2816 Var1 Var1_1 45654
C2816 Var2 Var2_2 5.050505051
C2816 Var2 Var2_3 4.05
B2811 Var2 Var2_2 5.98
C2814 Var1 Var1_1 453
C2814 Var2 Var2_1 1.52
예제 코드
SELECT [tbl].ID, "Var1" AS ContentGroup, "Var1_1" AS Content, [tbl]![Var1] AS Volume
FROM tbl
WHERE ((([tbl]![Var1_1]) Is Not Null))
UNION
SELECT [tbl].ID, "Var2" AS ContentGroup, "Var2_1" AS Content, [tbl]![Var2_1] AS Volume
FROM tbl
WHERE ((([tbl]![Var2_1]) Is Not Null))
UNION
SELECT [tbl].ID, "Var2" AS ContentGroup, "Var2_2" AS Content, [tbl]![Var2_2] AS Volume
FROM tbl
WHERE ((([tbl]![Var2_2] Is Not Null))
UNION
SELECT [tbl].ID, "Var" AS ContentGroup, "Var2_3" AS Content, [tbl]![Var2_3] AS Volume
FROM tbl
...
나는 SELECT * FROM (모든 공용체) WHERE (Content Is Not Null); 이것은 해결책이 아니며 작동하지 않으며 구성하기가 거의 쉽지 않습니다.
저는 Var로 시작하는 열을 선택하는 방향으로 생각하고 있습니다. varname AS ContentGroup의 처음 4 개 문자 인 varname AS Content를 사용하지만 어떻게해야할지 모르겠습니다.
이 작업을 한 번 수행하므로 할 수 있습니다. 데이터를 Excel에 넣습니다 (xls가 아닌 xlsx).
나는 이와 같은 많은 데이터를 얻고 있었기 때문에 Excel에서 데이터를 피벗 해제하기 위해이 절차를 잠시 작성했습니다. 이 함수가 수행하는 작업은 여러 통합 범위 ( alt+ d, p)를 만든 다음 오른쪽 하단의 총 합계 셀을 두 번 클릭 할 때와 동일 합니다.
"|"로 분할 할 추가 비트가 있습니다. 때로는 고유하게 ID를 지정하는 레코드 (사이트 및 날짜 ..)가 많기 때문에 새 열을 만듭니다.
실행하면 범위 (모든 데이터)를 선택하고 Enter 키를 누르라는 메시지가 표시됩니다. 해당 데이터를 피벗 테이블로 변환하고 총 보조금에 대한 "세부 정보 표시"를 수행합니다. 그런 다음 피벗 테이블 시트를 삭제하고 새롭고 정규화 된 데이터를 남깁니다.
괜찮아 보이면 다시 액세스로 가져옵니다. 이 left
기능을 사용하여 Var1_1
->Var1
귀하의 데이터가 주어지면 이것이 내가 얻은 결과입니다.
Row Column Value
B2811 Var1_1 5.98
B2811 Var2_1
B2811 Var2_2
B2811 Var2_3
B291 Var1_1 53
B291 Var2_1 2.2
B291 Var2_2
B291 Var2_3
C2814 Var1_1 453
C2814 Var2_1 1.52
C2814 Var2_2
C2814 Var2_3
C2816 Var1_1 45654
C2816 Var2_1 5.050551
C2816 Var2_2 4.05
C2816 Var2_3
C2819 Var1_1 4
C2819 Var2_1 3.06141
C2819 Var2_2 6.8845
C2819 Var2_3
.
Sub UnpivotData()
Dim OBJECT_REQUIRED_ERROR As Integer, UNABLE_TO_SHOW_DETAIL_ERROR As Integer
OBJECT_REQUIRED_ERROR = 424
UNABLE_TO_SHOW_DETAIL_ERROR = 1004
Dim sourceRange As Range, sourceSheet As Worksheet
On Error Resume Next
Set sourceRange = Application.InputBox("Select cell(s)", Type:=8, Title:="Select range to unpivot...")
If Err.Number = OBJECT_REQUIRED_ERROR Then
Exit Sub
End If
On Error GoTo 0
Application.ScreenUpdating = False
Dim fullRangeAddress As String
fullRangeAddress = "'" & sourceRange.Worksheet.Name & "'!" & sourceRange.Address(ReferenceStyle:=xlR1C1, external:=False)
Dim pvtchache As PivotCache, newPivotTable As PivotTable
Set pvtchache = sourceRange.Worksheet.Parent.PivotCaches.Create(SourceType:=xlConsolidation, SourceData:=Array(fullRangeAddress), Version:=xlPivotTableVersion14)
Set newPivotTable = pvtchache.CreatePivotTable(TableDestination:="", DefaultVersion:=xlPivotTableVersion14) 'TableName:="PivotTable2",
Dim pivotWorksheet As Worksheet, numberOfNewColumns As Integer, detailWorksheet As Worksheet
Set pivotWorksheet = ActiveSheet 'the last function will make this the active worksheet as default behavior
On Error Resume Next
pivotWorksheet.Cells(newPivotTable.RowRange.Rows.Count + 1, newPivotTable.ColumnRange.Columns.Count + 1).ShowDetail = True 'go to the bottom right corner (grand grand total)
If Err.Number = UNABLE_TO_SHOW_DETAIL_ERROR Then
MsgBox "Could not find the Grand Total cell. You'll have to double click it yourself to finish."
End If
Set detailWorksheet = ActiveSheet
numberOfNewColumns = Len(detailWorksheet.Range("A2")) - Len(Replace(detailWorksheet.Range("A2"), "|", ""))
Dim i As Integer
Do While i < numberOfNewColumns
detailWorksheet.Columns(2).Insert
i = i + 1
Loop
Dim txtToColsRange As Range
With detailWorksheet
Application.DisplayAlerts = False
.Range("A1") = sourceRange.Cells(1, 1)
Set txtToColsRange = .Range(.Range("A1"), .Range("A1").End(xlDown))
End With
txtToColsRange.TextToColumns DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar:="|", _
FieldInfo:=Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True
detailWorksheet.Cells.EntireColumn.AutoFit
pivotWorksheet.Delete
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다