2017-10-05 15 views
0
나는 제목이 말한다 단지 후속 스레드 뭘 발견 할 수있는 방법을 찾고 있었다

: Excel: Listing Numbers In Between 2 NumbersExcel : 간격의 시퀀스 번호를 나열하는 방법은 무엇입니까?

을하지만 내 경우는 조금 다릅니다 일부 정수 번호를 입력됩니다 세포가 쉼표 및/또는 하이픈으로 구분하여 개의 간격을 만듭니다 (많은 인쇄 대화 상자의 에있는 '페이지 범위'필드와 거의 같습니다).

: 1-3,9-11,17,19,21-22,25

그리고이 결과를 요구하지만 다른 셀에 다음과 같은 라인에 각각 분리 번호 반환 할 :

1

2

3

9

22

25

3,691,363,210

10

11

17

19

21

I 엑셀 네이티브 함수를 이용하여이 작업을 수행하지만, 단지 하나있다

간격 (예 : 1-9). 그 이상으로 수식이 작동하지 않습니다.

VBA에서이 모든 작업을 수행 할 수있는 방법이 있습니까?

어떤 사람이 나에게 방향을 가르쳐 줄 수 있습니까?

도움을 주시면 감사하겠습니다.

감사

[업데이트]

내가 몇 주 동안 코드를 사용하지만 그냥 내림차순으로 0이 반복되는 숫자도 숫자를 피할 필요가 실현.

0 1,3- 10,8, 12, 14, 16, 16 , 22, 27,24 -30,36, 42,39

따라서 , 나는 그것을 필요로한다 # VALUE! 형식화 된 숫자가 오름차순이 아니거나 0 또는 반복되는 숫자가있는 경우 오류 메시지가 반환됩니다.

나는 코드 작업을하고 이미 입력 된 간격 (x-y) 인 에 대해서만 앞에서 설명한 문제를 해결했지만 쉼표로 구분 된 이산 숫자에 대한 해결책을 찾지 못했습니다.

도움을 주시면 감사하겠습니다.

지금까지 코드 :

Function RANGEX(strInput As String) As String 
Dim intCurrent As Integer 
Dim outputArray() As Variant 
Dim intCount As Integer 

intCount = 1 

For Each i In Split(strInput, ",") 
    ReDim Preserve outputArray(1 To intCount) 

    If InStr(i, "-") > 0 Then 
     If CInt(Split(i, "-")(0)) > 0 And CInt(Split(i, "-")(0)) < CInt(Split(i, "-")(1)) Then 
      For x = CInt(Split(i, "-")(0)) To CInt(Split(i, "-")(1)) 
       intCurrent = x 
       ReDim Preserve outputArray(1 To intCount) 
       outputArray(intCount) = intCurrent 
       intCount = intCount + 1 
      Next x 
     Else 
      RANGEX = CVErr(xlErrValue) 
     End If 
    Else 
     ReDim Preserve outputArray(1 To intCount) 
     intCurrent = CInt(i) 
     outputArray(intCount) = intCurrent 
     intCount = intCount + 1 
    End If 

Next i 

RANGEX = Join(outputArray, ",") 

End Function 
+2

이봐, 특정 문제보다는 전체 코딩 운동을하는 것처럼 들리 네. VBA에서 시도한 것을 보여줄 수 있습니까? – neophlegm

+0

@neophlegm 안녕하세요 죄송합니다 –

+0

안녕하세요 @neophlegm. 죄송 해요. 나는 누군가가 그것을 이해할 수있는 방법으로 내 문제를 설명 할 수 없다고 생각한다. 어쨌든, 다른 사용자가 일부 문서 (일부분은 이미 번호가 매겨진)에 약간의 변경을 요구할 수있는 레코드 파일을 만들려고했습니다. 따라서 누군가가 여러 문서에 동일한 변경을가하고자하는 경우 해당 간격의 셀은 Excel의 기본 기능을 사용하여 만든 엔진과 함께 작동합니다. 그리고 유일하게 빠진 것은 제목이 말하는 것을 할 수있는 VBA 함수입니다. –

답변

0

귀하의 질문에 대답 : 예, 그것은 가능합니다.

다음은 작동 코드의 예입니다. 이상적으로, 출력 배열의 크기를 조정하고 다음 요소를 추가하는 등의 반복적 인 부분을 추상화 할 수 있지만 질문에 대한 구체적인 내용이 없으므로 올바른 방향으로 가리켜 줄 수 있습니다. . 만약 셀 A1에 제공되어 필요한 출력은 셀 B1에 기록 될 어떤 입력 :

Sub Testing() 
Dim strInput As String 
Dim strOutput As String 
Dim intCurrent As Integer 
Dim outputArray() As Variant 
Dim intCount As Integer 

intCount = 1 

strInput = ActiveSheet.Cells(1, 1) 
For Each i In Split(strInput, ",") 
    ReDim Preserve outputArray(1 To intCount) 
    If InStr(i, "-") > 0 Then 
     For x = CInt(Split(i, "-")(0)) To CInt(Split(i, "-")(1)) 
      intCurrent = x 
      ReDim Preserve outputArray(1 To intCount) 
      outputArray(intCount) = intCurrent 
      intCount = intCount + 1 
     Next x 
    Else 
     ReDim Preserve outputArray(1 To intCount) 
     intCurrent = CInt(i) 
     outputArray(intCount) = intCurrent 
     intCount = intCount + 1 
    End If 
Next i 
strOutput = Join(outputArray, vbCrLf) 
ActiveSheet.Cells(1, 2) = strOutput 
End Sub 

을이 위에, 어떤 가정 (세퍼레이터 ''이다) 입력에 대해서 설명한다.

물론 Excel에서 직접 수식으로 사용할 수 있도록 함수로 변환 할 수 있습니다.

+0

안녕하세요. @pwwolff. 나를 올바른 방향으로 가도록 해주셔서 대단히 감사합니다! 함수로 변환했지만 결과는 더 이상 줄의 숫자를 분리하지 않습니다. 당신이 나를 도울 수? 나는 새로운 질문을 올리는 나의 질문에 답할 것이다. –

+0

안녕하세요. @pwwolff. 니가 끝냈어! '텍스트 줄 바꾸기'가 답입니다! 다시 한 번 감사드립니다! –

+0

@PeterWhite 위대한 - 당신의 문제를 해결하면 내 대답을 받아 들일 수 있습니까? – pwwolff