나는 제목이 말한다 단지 후속 스레드 뭘 발견 할 수있는 방법을 찾고 있었다: 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,21010
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
이봐, 특정 문제보다는 전체 코딩 운동을하는 것처럼 들리 네. VBA에서 시도한 것을 보여줄 수 있습니까? – neophlegm
@neophlegm 안녕하세요 죄송합니다 –
안녕하세요 @neophlegm. 죄송 해요. 나는 누군가가 그것을 이해할 수있는 방법으로 내 문제를 설명 할 수 없다고 생각한다. 어쨌든, 다른 사용자가 일부 문서 (일부분은 이미 번호가 매겨진)에 약간의 변경을 요구할 수있는 레코드 파일을 만들려고했습니다. 따라서 누군가가 여러 문서에 동일한 변경을가하고자하는 경우 해당 간격의 셀은 Excel의 기본 기능을 사용하여 만든 엔진과 함께 작동합니다. 그리고 유일하게 빠진 것은 제목이 말하는 것을 할 수있는 VBA 함수입니다. –