2014-06-17 4 views
1

이 코드를 작성하는 데 어려움이 있습니다. 나는 곤경에 빠지기에 충분한 vba를 안다. 내가하려는 것은 선반 위치에 대한 일련 번호를 생성하는 것입니다. 특정 매개 변수와 규칙에 따라 자동으로 숫자를 생성 할 수 있기를 바랍니다. 따라서 창고에는 특정 행, 선반 및 위치가 있습니다. 내가 각자의 수를 표에 넣는다면.테이블의 값을 기반으로 일련 번호 생성

3 행 2 선반 4 포지션

나는 그것이 많은 행/선반/위치가 방법에 따라 관련 일련 번호를 뱉어 할 것입니다. 이 경우는 다음과 같습니다

R01-S01-P01, R01-S01-P02, R01-S01-P03, R01-S01-P04, R01-S02-P01, R01-S02- P02, R01-S02-P03, R01-S02-P04, R02-S01-P01, R02-S01-P02, R02-S01-P03, R01-S01-P04, R01-S02-P01 , 등 ...

의견이나 도움을 주시면 대단히 감사하겠습니다!

Dim i As Integer, iPos As Integer, c As Integer, iRow As Integer, d As Integer, iShl As Integer 

iPos = Worksheets("Sheet1").Cells(3, "J").Value 
iShl = Worksheets("Sheet1").Cells(3, "I").Value 
iRow = Worksheets("Sheet1").Cells(3, "H").Value 
For i = 1 To iPos * iShl * iRow 
Cells(i, 3).Value = i 
    For d = 1 To iShl 
     Cells(i, 2).Value = d 
      For c = 1 To iRow 
       Cells(c, 1).Value = i 
      Next c 
    Next d 
Next i 
+0

3 차원 어레이를 사용했을 가능성이 있습니까? – bmgh1985

+1

지금까지 가지고있는 코드를 게시 할 수 있습니까? 힌트로서 일련 번호의 각 부분을 만들기 위해 3 개의 루프를 중첩하려고합니다. – guitarthrower

답변

0

@ user3749080. 좋은 시도. 여기에 내 코드가있다. 나는 테스트를했고, 당신이 무엇을 찾고 있는지 이해하고있는 것으로 작동하는 것 같습니다.

내가 만든 가장 큰 변화는 2 자리 숫자 (10 미만의 숫자)를 생성하는 비트를 분리하여 개별 기능으로 분리하는 것입니다.

UPDATE는

나는 공백 또는 0 수표를 작성하고 아직도 그 기준에 일련 번호를 생성하는 코드를 변경했습니다.

Option Explicit 

Sub CreateSerials() 
    Application.ScreenUpdating = False 

    Dim i_P  As Integer 
    Dim iPos As Integer 
    Dim initP As Integer 
    Dim i_R  As Integer 
    Dim iRow As Integer 
    Dim initR As Integer 
    Dim i_S  As Integer 
    Dim iShl As Integer 
    Dim initS As Integer 

    iPos = Worksheets("Sheet1").Cells(3, "J").Value 
    iShl = Worksheets("Sheet1").Cells(3, "I").Value 
    iRow = Worksheets("Sheet1").Cells(3, "H").Value 

    If iPos = 0 Then 
     initP = 0 
    Else 
     initP = 1 
    End If 

    If iShl = 0 Then 
     initS = 0 
    Else 
     initS = 1 
    End If 

    If iRow = 0 Then 
     initR = 0 
    Else 
     initR = 1 
    End If 

    Range("C:C").ClearContents 
    For i_R = initR To iRow 
     For i_S = initS To iShl 
      For i_P = initP To iPos 
       Range("C1000000").End(xlUp).Offset(1, 0).Value = _ 
        "R" & DoubleDigit(i_R) & "-S" & DoubleDigit(i_S) & "-P" & DoubleDigit(i_P) 
      Next i_P 
     Next i_S 
    Next i_R 

    Application.ScreenUpdating = True 

    MsgBox Application.WorksheetFunction.CountA(Range("C:C")) & " serial numbers were created" 
End Sub 

Function DoubleDigit(i_Input As Integer) As String 
    If i_Input < 10 Then 
     DoubleDigit = "0" & i_Input 
    Else 
     DoubleDigit = i_Input 
    End If 
End Function 
+0

질문이 하나 더 있습니다. iPos, iShl 및 iRow가 사용하는 셀 값 중 하나가 null 또는 0 인 경우이 값을 계속 업데이트하려면 어떻게해야합니까? 빈칸을 비워두면 루프가 진행되지 않습니다. 나는 그것이 일련 번호에 "00"값을 넣기를 원한다. – user3749080

+0

'00'이라는 레이블이 붙은 선반, 행 또는 위치가 있는지 물어볼 것입니까? 아니면 0 또는 공백을 입력 할 수 없다고 말하는 상자를 팝업으로 표시 할 방법을 찾고 계십니까? – guitarthrower

+0

첫 번째 것이 될 것입니다. 선반, 행 또는 위치가 없으면 해당 번호는 00이됩니다. – user3749080