2013-08-08 4 views
1

EDIT : 모든 응답 주셔서 감사합니다. 내가 할 수있는 한 많은 경우를 다루기 위해 규칙을 작성하고 수동으로 추출하거나 다른 모든 것을 다루기 위해 더 많은 규칙을 시도하려고합니다.같은 데이터를 열로 정렬하십시오.

동일한 "유형"의 데이터를 동일한 열로 정렬하려고합니다. 본질적으로 데이터의 뭉치 (연도, 회사 이름, 사람 이름, IO 번호, PO 번호, 프로젝트 설명 및 의견 모음)가 다음과 같이 단일 열로 덤프되는 데이터 덤프가 발생합니다.

enter image description here

이상적인 최종 결과는 같은 열의 같은 유형의 데이터 즉, 열 A의 모든 연도, 열 B의 모든 IO, 열 C의 모든 PO, 열 D의 모든 사람 이름, 모든 회사 열 E의 이름과 남은 것이 F 열의 주석 섹션에 덤프됩니다.

SUBSTITUTE 함수를 사용하는 매크로를 작성하여이 문자열을 통과하여 모든 대시 및 쉼표로 백 슬래시를 누른 다음 쉼표 구분 기호를 기준으로 분리 한 다음 텍스트를 일반 텍스트로 다시 붙여 넣습니다. 이는 회사 이름에 대시가 있거나 IO/PO를 소유 한 두 사람을 나타내는 백 슬래시가 있거나 모든 데이터가 구분 기호없이 입력 된 경우를 제외하고는 매우 잘 작동합니다. 2012 회사 프로젝트 제목 IO ##### PO #### Person Name.

그래서 여기에 내가 묻는 바가 있습니다. 1. 지금하고있는 것보다 데이터를 분석하는 더 좋은 방법이 있습니까? 회사 이름에 대시 나 대시 또는 백 슬래시가없고 공백 만있는 문자열과 같은 예외를 어떻게 처리 할 수 ​​있습니까? 2.이 데이터를 모두 파싱 한 후 다음과 같이 별도의 열로 구분합니다. enter image description here 같은 유형의 정보가 같은 열에 있도록 정렬하려면 어떻게해야합니까?

도움을 주시면 감사하겠습니다. 불명확 한 점이 있으면 알려주십시오.

+3

모든 가능성을 식별 할 수있는 명확한 (방법 론적) 방법이 없다면 자동화를 프로그래밍 할 방법이 없습니다. 프로그래밍을 수행하려면 컴퓨터에 정확히 수행 할 작업이 필요하므로 모든 수단/결과를 통해 명확한 경로가 필요합니다. 일반적으로 사례의 99 %를 차지할 수 있지만 수동으로 마지막 1 %를 추출해야합니다. – Werner

+0

꽤 흥미로운 도전처럼 보입니다. 데이터를 어딘가에서 사용할 수있게 만들려면이 작업을 위해 일부 VBA를 사용해야합니다. 실제 데이터에 따라 @Werner가 100 % C를 자동화 할 수는 없겠지만, 예외가있는 행을 플래그로 표시하고 플래그를 지정할 수는 있습니다. – ChrisProsser

+0

글쎄, 내가 생각할 수있는 가장 합리적인 것은 데이터가 합리적인 방법으로 출력되는지 확인하는 것이다. 너무 많은 불일치가있는 이러한 지저분한 데이터를 생성하는 시스템을 모르겠습니다! – Jerry

답변

1

Welcome to StackOverflow!

  1. 텍스트는 토큰의 배열을 얻을 수있는 Split() 기능을 사용할 수 있습니다 "-" 또는 ","로 구분와 같은 명확한 규칙을 따르는 경우. 텍스트가 규칙을 따르지 않으면 불가능합니다. 대부분 텍스트가 규칙을 따르는 중간에있을 가능성이 큽니다. 다른 텍스트의 경우 코드를 마사지하고 새 규칙을 찾아서 확인하십시오. 아래를 참조하십시오.

  2. 콘텐츠가 인식되면 True을 반환 몇 가지 기능 IsYear(), IsPO(), IsCompany()을 만듭니다. 기능은 IsYear = Text Like "20##"처럼 간단하거나 많은 테스트를 포함 할 수 있습니다. 그런 다음 각 행의 각 셀을 검사하고 필요한 경우 정렬하는 함수를 작성합니다.

죄송합니다. 몇 가지 일반적인 조언 이상의 것을 드릴 수는 없지만 매우 어려운 문제에 대해서는 매우 열려 있습니다.

여러분이 시작하게되기를 바랍니다.

1

@Werner의 줄에 "당신은 실크 지갑을 만들 수 없습니다 ..."분명히 해결책은 소스 데이터가 더 나은 모양인지 확인하기 위해 쓰레기를 책임지는 사람을 의지하는 것입니다. 그러나 나는 당신이 해결 방법을 찾고 있다고 생각합니다. 당신의보기에서, 몇몇 'tiding'은 가능합니다.예를 들어 ColumnB를 정렬하고 2012가 ColumnC에있는 경우 해당 행의 B 및 C 내용을 교환합니다. 그런 다음 ColumnD를 정렬하고 D와 E에 대해 똑같이 수행하십시오. ColumnF에 Quote이 있으면 빈 셀을 삽입하고 오른쪽으로 이동하십시오. ColumnF가 비어 있으면 ColumnD를 사용하여 해당 행의 내용을 교환합니다. ColumnD를 끝까지 이동하십시오. ColumnF에서 Quote보다 먼저 선택하고, 비어있는 경우 ColumnE으로, 그렇지 않으면 ColumnH로 제거하십시오. 내가 기대했던 것보다 -rather 더 나은

SO18131636 example

나는 합리적으로 프로그래밍 할 수 있는지의 한계에 대해 추측에는 요 : 결과는 같을 것이다.

관련 문제