몇 가지 조건에 따라 다음 코드는 원하는 것을 수행합니다. 데이터가있는 통합 문서에서 표준 코드 모듈 (기본적으로 "Module1"이지만 원하는대로 이름을 지정할 수 있음)에 설치하십시오.
Option Explicit
Enum Nws ' Worksheet navigation
NwsFirstDataRow = 2 ' presumed the same for all worksheets
NwsCode = 1 ' 1 = column A (change as required)
NwsSubCode ' No value means previous + 1
NwsNumer
End Enum
Sub NumerList()
' 05 Apr 2017
Dim Wb As Workbook ' all sheets are in the same workbook
Dim WsCodes As Worksheet ' Register codes
Dim WsNum As Worksheet ' Sub-code values
Dim WsOut As Worksheet ' Output worksheet
Dim RegName As String, RegCode As String
Dim Sp() As String
Dim Rs As Long ' Source row in WsNum
Dim Rt As Long ' Target row in WsOut
Dim R As Long, Rl As Long ' rows/Last row in WsCodes
Set Wb = ActiveWorkbook ' Make sure it is active!
Set WsCodes = Wb.Worksheets("Reg Codes") ' Change name to your liking
Set WsNum = Wb.Worksheets("Code Values") ' Change name to your liking
On Error Resume Next
Set WsOut = Wb.Worksheets("Output") ' Change name to your liking
If Err Then
Set WsOut = Wb.Worksheets.Add(After:=WsNum)
WsOut.Name = "Output" ' create the worksheet if it doesn't exist
End If
On Error GoTo 0
Rt = NwsFirstDataRow
With WsCodes
Rl = .Cells(.Rows.Count, NwsCode).End(xlUp).Row
For R = NwsFirstDataRow To Rl
RegName = .Cells(R, NwsCode).Value
Sp = Split(RegName, "-")
If UBound(Sp) > 1 Then ' must find at least 2 dashes
RegCode = Trim(Sp(1))
Else
RegCode = ""
End If
If Len(RegCode) Then
On Error Resume Next
Rs = WorksheetFunction.Match(RegCode, WsNum.Columns(NwsCode), 0)
If Err Then Rs = 0
On Error GoTo 0
If Rs Then
Do
WsOut.Cells(Rt, NwsCode).Value = RegName
WsOut.Cells(Rt, NwsSubCode).Value = WsNum.Cells(Rs, NwsSubCode).Value
WsOut.Cells(Rt, NwsNumer).Value = WsNum.Cells(Rs, NwsNumer).Value
Rt = Rt + 1
Rs = Rs + 1
Loop While WsNum.Cells(Rs, NwsCode).Value = RegCode
Else
RegCode = ""
End If
End If
If Len(RegCode) = 0 Then
WsOut.Cells(Rt, NwsCode).Value = RegName
WsOut.Cells(Rt, NwsSubCode).Value = "No sub-code found"
Rt = Rt + 1
End If
Next R
End With
End Sub
그리고 여기 조건이 있습니다.
- 3 장 모두 같은 통합 문서에 있어야합니다. 서로 다른 통합 문서를 사용하는 경우 두 개 이상의 통합 문서를 처리 할 수있는 코드를 사용해야합니다.
- 데이터가있는 두 개의 워크 시트가 있어야합니다. 코드 명칭과 일치하도록 이름을 지정하거나 코드를 수정해야합니다. 출력 워크 시트도 동일하지만 코드가 존재하지 않으면 해당 시트가 작성됩니다. 코드에서 이름을 변경할 수 있습니다.
- 코드 상단의 열거는 모든 3 개의 시트가 행 1 (자막)의 데이터가없고 A, B 및 C 열의 데이터와 동일하게 포맷되어 있다고 가정합니다. 변경은 어렵지 않지만 원하는 경우 만들어야합니다 다른 입력 또는 출력. 열거 형의 열에 다른 값을 할당하여 기존 코드의 열을 변경할 수 있지만 코드에는 모든 시트에서 동일한 배열이 필요합니다.
- 코드 시트에서 추출 된 코드는 사용되지 않습니다. 코드는 자체 추출을 수행합니다. 코드를 추출 할 수 없거나 서브 코드 목록에서 코드를 찾을 수없는 경우 출력 목록에 오류가 표시됩니다.
- 숫자 시트의 하위 코드는 게시 한 그림과 같이 정렬되어야합니다. 코드는 "image"의 첫 번째 항목을 찾고 코드가 A 열의 코드 인 동안 다음 행의 하위 코드를 찾습니다. 중단 후에 나타날 수있는 "이미지"의 추가 항목을 찾지 않습니다.
- 코드는 색칠을하지 않습니다. 추가는 어렵지 않지만 처음 20 개의 코드에 대해 20 가지 색상을 지정하고 동일한 순서를 반복하는 것과 같은 몇 가지 규칙을 지정해야합니다.
- 각 셀에 이미 개별적으로 이름이 지정 되었기 때문에 다른 셀 서식을 추가 할 수있었습니다. 더 많은 속성을 쉽게 추가 할 수 있습니다.
스프레드 시트 예제를 공유 할 수 있습니까? – 0m3r
스프레드 시트를 공유하는 옵션을 찾을 수 없습니다. 생각하지 않습니다. 추가 옵션을 알려주십시오. –
시도한 코드를 게시하십시오. – SJR