2014-09-02 2 views
-4

중복 키 값을 가진 행을 연결 :엑셀 VBA 내가 다음과 같은 형식의 데이터의 매우 큰 세트가

enter image description here

전에 내가 VBA에 새로운 브랜드 해요,하지만 이 데이터를 SPSS에 입력 할 수 있도록하기 위해 노력하고 있습니다. 우리의 목적을 위해, 다음과 같이해야합니다 :

일치하는 ID 번호를 가진 모든 행이 N 길이의 단일 행에 결합되는 것으로 생각

후. 그림과 같이 행 수는 일관되지 않습니다. 또한 빈 셀을 처리 할 수 ​​있어야합니다. 경우에 따라 값 또는 길이를 입력 할 수 없지만 다음 행을 헤더 당 올바른 위치에서 시작해야 할 수도 있습니다.

나는 이것을 Bash에서 여러 번 해왔지만 아내는이 유형의 데이터가있는 스프레드 시트가 많기 때문에 아내가 직접 재현 할 수 있어야합니다.

현재 문법을 알아 내고이를 작성하는 방법은 고유 ID를 필터링하고 두 번째 시트에 복사 한 다음 For Each 루프를 사용하여 데이터를 추가하는 것입니다.

나는 코드를 붙여 넣을 것이지만, 현재 단계에서 유용하게 사용되는 것보다 더 많은 도움이 될 것입니다. 이 방법론에 관한 통찰력은 특히 감사하는 것이 더 쉽거나 적은 과세 방법이있는 경우 많은 도움이 될 것입니다.

읽어 주셔서 감사합니다. 마이크

+0

어떻게 이것이 SPSS에서 유용한 데이터가됩니까? 열 머리글은 고유하지 않습니다. 코드를 보여 주면 도움이 될 것입니다. 여기에서 기대할 수 있습니다. 기존 코드를 처음부터 수정하는 것보다 * 수정 *하여 도움을주기가 훨씬 쉽기 때문입니다. 건배. –

+0

필자는 행을 반복하면서 구분 된 문자열 (쉼표 또는 탭 구분 기호)을 작성하여 ID를 기반으로 형식화 된 출력의 각 "행"을 표현한 다음 쉽게 작성할 수있는 TXT 파일에 출력합니다 SPSS에서 읽습니다. –

+0

David, 당신 말이 맞아요. 실제 파일의 헤더는 구체적으로 다음과 같습니다. Type_1, Value_1, Type_2, Value_2 등 지금 코드 작업 중입니다. 제안 해 주셔서 감사합니다. 많은 의미가 있습니다. 실제로 읽을 수있는 것을 가지고 있으면 게시 할 것입니다. –

답변

1

이것은 내가 위 내 댓글에 기술 된 방법 :

나는 아마 구분 된 문자열을 각 "행"을 대표하는 (구분 쉼표 또는 탭) 구축, 행에 걸쳐 반복 볼 것

ID를 기반으로 형식화 된 출력을 작성한 다음 SPSS에서 쉽게 읽을 수있는 TXT 파일에 출력하십시오.

다음은 코드입니다. (당신의 예에서 헤더로 시작하는 고유하지 않기 때문에)는 헤더 행없이, 내가 약 30 개 라인 : 탭으로 구분 된 같은

Sub FormatDataFileForSPSS() 
Dim rng As Range   'the range representing the entire set of data to be formatted 
Dim r As Range    'row iterator for the data table 
Dim key As Variant   'id number 
Dim rowData As String  'concatenated row data 
Dim outputPath As String 'the place to put the output file 
Dim outputFile As String 'the file name 

'--- REQUIRES REFERENCE TO MICROSOFT SCRIPTING RUNTIME --- 
Dim dict As Scripting.Dictionary 'a dictionary that we will use to concat each row by ID 
Dim fso As Scripting.FileSystemObject 'used to write the output file 

'Begin procedure here... 

'Allow the user to select a range of data to format 
' do NOT select the "header" row! 
Set rng = Application.InputBox("Select the data to be formatted", "Select Data", Type:=8) 

'Create the dictionary: 
Set dict = CreateObject("Scripting.Dictionary") 

'get the destination for the output file: 
outputPath = CreateObject("Wscript.Shell").SpecialFolders("Desktop") 'Or modify to use a different filepath 
outputFile = outputPath & "\my output.txt" 'Modify as needed 

'Iterate the data table: 
For Each r In rng.Rows 
    'get the key value 
    key = r.Cells(1, 1).Value 
    'Concatenate the row data to a string 
    rowData = r.Cells(1, 2) & vbTab & r.Cells(1, 3) & vbTab & r.Cells(1, 4) & vbTab & r.Cells(1, 5) 
    'Check if this KEY value already exists 
    If Not dict.Exists(key) Then 
     'if not, then add it to the dictionary 
     dict.Add key, rowData 
    Else: 
     'Append to the existing key's value: 
     dict(key) = dict(key) & vbTab & rowData 
    End If 
Next 

'Create our FileSystemObject to write the text file: 
Set fso = CreateObject("Scripting.FileSystemObject") 
With fso.CreateTextFile(Filename:=outputFile, overwrite:=True, unicode:=False) 
    For Each key In dict.Keys 
     .WriteLine dict(key) 
    Next 
    .Close 
End With 

End Sub 

출력보다 약간 더 많은 것이다. 헤더 행없이 데이터를 가져 오기 위해 SPSS를 지정할 수 있다는 것이 확실하며 필요할 경우 나중에 수정할 수있는 기본 변수 이름을 할당합니다.여기

enter image description here

은 (구분 된 텍스트 파일을 열 지시에 따라)

enter image description here

또는 당신이 TXT Excel에서 파일을 delmited 열고 몇 가지 지시를 따를 수 SPSS에서 볼 데이터입니다 Tab-delimited로 지정하면 Excel 파일에 헤더 정보를 추가 할 수 있습니다.

enter image description here

+0

David! 제안 된 문제를 해결해 주셔서 감사합니다. 이것은 제가보고있는 것보다 훨씬 더 우아한 해결책입니다. 지금 테스트 할 예정이며 결과를 알려 드리겠습니다. -Mike –

+0

대부분의 문제를 해결할 수있는 방법은 여러 가지가 있으며 데이터 복사, 새 워크 시트 작성, 필터링 등이 가능한 솔루션입니다.이 방법의 이점은 초보자/신 VBA 포크는 매크로 레코더에서 얻을 수있는 "기본"방법과 동작을 사용하기 때문에 거의 즉시 이해할 수 있지만 속도가 느리고 clunkier 등입니다. –

관련 문제