숫자 열을 4 개 세트로 쉼표로 구분 된 텍스트로 변환하는 방법


2

200 개의 휴대 전화 열이 있습니다.
4 개의 휴대 전화 번호 세트로 쉼표로 구분하여 텍스트 행으로 변환하고 싶습니다.

12345678, 12345678, 12345678, 12345678
12345678, 12345678, 12345678, 12345678
12345678, 12345678, 12345678, 12345678

나에게 조언을 해주세요.

답변:


2

단일 열을 여러 열로 바꾸는 간단한 VBA 매크로

여기에 이미지 설명을 입력하십시오

모든 단계에 대해 언급 했으므로 매크로를 개인의 필요에 맞게 쉽게 조정할 수 있습니다.
데이터 열과 조옮김 후 원하는 열 수를 선택할 수 있습니다

  1. Alt+로 Excel 및 VBA 편집기 열기F11
  2. 왼쪽 창에서 데이터가 있는 시트 아래에 코드를 붙여 넣습니다.
  3. 필요에 따라 처음 두 줄을 수정하십시오.
  4. 로 매크로를 실행 F5

Const strCol = "B"    '## select the column with your data
Const iTrans = 4      '## select how many columns you want after transposing

Sub transposeColumn()
    '## search the last row to know how many cells we have to iterate through
    iLastrow = Range(strCol & ActiveSheet.Rows.Count).End(xlUp).Row
    iCol = Range(strCol & 1).Column

    '## begin to loop through the chosen column
    '## Cause we delete cells on every loop, we need to divide the loop counter
    '## And since the division result isn't an integer, we have to round up
    For i = 1 To WorksheetFunction.RoundUp(iLastrow / iTrans, 0)

        '## set the source and target range for easier access later
        Set rngSrc = Range(Cells(i + 1, iCol), Cells(i + iTrans - 1, iCol))
        Set rngTrg = Range(Cells(i, iCol + 1), Cells(i, iCol + iTrans - 1))

        '## set the format of target range to text
        rngTrg.NumberFormat = "@"

        '## copy and paste the values, the trick is to use transpose
        rngSrc.Copy
        rngTrg.PasteSpecial Transpose:=True

        '## delete all cells which we have just transposed
        rngSrc.Delete shift:=xlUp
    Next i
End Sub  

매크로는 신속하게 데이터를 4 엑셀 열로 신속하게 변환합니다. 대단해! 그러나 대신 텍스트로 변환해야합니다. 가능합니까?
user245491

내 편집 내용을 참조하십시오
nixda

0

awk 스크립트가 문제를 해결하는 데 도움이됩니다.

awk 스크립트의 첫 번째 for 루프는 최대 4의 배수로 숫자를 처리합니다. 두 번째 루프는 마지막 몇 개의 숫자를 인쇄합니다. 마지막 숫자 인 경우 후행 쉼표가 인쇄되지 않습니다.

awk '{ 
    for (n=1; n < NF-4; n+=4)
           printf("%s, %s, %s, %s\n", $n, $(n+1), $(n+2), $(n+3));    
    for (; n <= NF; n++)
        if (n == NF) 
            print $n;
        else 
            printf("%s, ", $n)          
}' filename

nix는 제 의견을 참조하십시오. 매크로가 Excel 데이터를 텍스트로 변환합니까? 또한이 스크립트를 어디에 어떻게 배치해야합니까?
user245491

죄송합니다. 엑셀 태그를 인식하지 못했습니다. 죄송합니다
suspectus

0

다음은 워크 시트 함수 솔루션입니다. 귀하의 목록이있는 위치 A1:A40:

=TEXT(INDEX($A$1:$A$40,(ROW()-1)*4+COLUMN()-2),"0000000000")

이것은 필요한만큼 많은 행에 입력되고 C1오른쪽으로 채워진 F1다음 채워집니다 .

여기에 이미지 설명을 입력하십시오

시트와 일치하도록 수식을 조정해야합니다.

예를 들어, 출력 행을 C2대신 시작 하려면 INDEX함수 의 두 번째 인수는 이어야합니다 (ROW()-2)*4+COLUMN()-2.

출력 행을 D1대신 시작 하려면 INDEX함수 의 두 번째 인수는 이어야합니다 (ROW()-1)*4+COLUMN()-3.

편집 :
방금 쉼표로 구분 된 출력을 원한다는 것을 알았습니다. CONCATENATE배열 인수를 취할 수 없기 때문에 약간의 해킹 이지만 작동합니다. 다음 수식을 열에 채우십시오.

=CONCATENATE(TEXT(INDEX($A$1:$A$40,(ROW()-1)*4+1),"0000000000"),", ",TEXT(INDEX($A$1:$A$40,(ROW()-1)*4+2),"0000000000"),", ",TEXT(INDEX($A$1:$A$40,(ROW()-1)*4+3),"0000000000"),", ",TEXT(INDEX($A$1:$A$40,(ROW()-1)*4+4),"0000000000"))

이것은 행 1에서 시작하는 출력에 따라 다릅니다. 예를 들어, 출력이 행 2에서 시작하는 경우 각 인스턴스를 ROW()-1로 변경해야 합니다 ROW()-2.


음, 쉼표로 구분 된 출력입니까? 이제 OP 권한을 이해하는지 잘 모르겠습니다. 나는 " 나는 그것들을 텍스트로 변환 할 필요 가있다"고 생각했다. 그는 셀 형식이 텍스트 여야한다는 것을 의미했다. 당신은 그가 단일 세포에서 그들을 원한다고 생각하십니까?
nixda

@nixda 제목 : "... 모바일 번호의 열을 4로 구분 된 텍스트로 변환"을 참조하십시오. 간과하기 쉽습니다. 어쨌든 OP가 제공하는 샘플 출력은 데이터를 열화하는 펑키 한 방법이 아니라 원하는 것 같습니다.
Excellll
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.