스필 시대의 Excel VBA (3)

14820 단어 ExcelExcelVBA

의료 정보 검색 참조 함수



이전에 정의한 함수를 사용하여 NC 선반에서 제품을 만들 때 도구 정보 검색 참조
하는 함수를 정의합니다.
정보 테이블(KJ_)에는, 3자리의 툴 번호(TNO=01,31,02,~,08,38)마다, 툴팁 번호(L)가
저장됩니다. 툴팁 번호(TNO)에 기계 번호(K)를 가산한 것이,
기계 툴팁 툴팁 번호(SNO)로 4자리 키(K+L)입니다.
공구 테이블(KZT_)과 공구 데이터(KDA_)는 기계 툴팁 번호(SNO)로 검색 가능하며,
처음에 MATCH 한 행 번호를 각각 KZT 열, KDA 열에 저장합니다.
그 행 번호를 바탕으로 공재명, N, LAST, 분수의 데이터를 끌어옵니다.
Function L_KRT(J, Optional K = 2000, Optional S = "")
    Call START_MANUAL

    Const T = "T,TNO,KZT,工材名,KDA,N,LAST,分数"
    Const T__ = 1, TNO__ = 2, KZT__ = 3, 工材名__ = 4, KDA__ = 5, _
          N__ = 6, LAST__ = 7, 分数__ = 8

    S1 = RMT(Range("KJ_[[#Headers],[01]:[38]]"))
    S2 = RMT(Range("KJ_[[01]:[38]]"), J)

    S = L_PAIR(S1, S2, T)

    Call L_MI("KZT_[SNO]", S, KZT__, TNO__, K)
    Call L_MI("KDA_[SNO]", S, KDA__, TNO__, K)
    Call L_IFZS(S, TNO__)
    Call L_DI("KZT_[工材名]", S, 工材名__, KZT__)
    Call L_DI("KDA_[N]", S, N__, KDA__)
    Call L_DI("KDA_[LAST]", S, LAST__, KDA__)
    Call L_DI("KDA_[分数]", S, 分数__, KDA__)

    L_KRT = S

    Call START_AUTO
End Function

Sub L_MI(RN, S, J, P, Optional K = 0)
    Set R = Range(RN)
    For I = 1 To UBound(S, 1)
        L = S(I, P)
        If L > 0 Then S(I, J) = MI(R, K + L)
    Next I
    Set R = Nothing
End Sub

Sub L_IFZS(S, J)
    For I = 1 To UBound(S, 1)
        If S(I, J) = 0 Then S(I, J) = ""
    Next I
End Sub

Sub L_DI(RN, S, J, P)
    Set R = Range(RN)
    For I = 1 To UBound(S, 1)
        S(I, J) = DI(R, S(I, P))
    Next I
    Set R = Nothing
End Sub

작성한 테이블은 다음과 같습니다.

(BC26) = L_KRT (15) '정보 테이블의 15 행째의 데이터를 추출합니다.



열을 정렬하고 편집하는 함수



위의 표는 KZT 열, KDA 열은 필요하지 않습니다. 게다가 열의 배열도 바꾸기로 하겠습니다.
Function L_SELECT(R, T, Optional S = "")
    Call START_MANUAL

    R = R: TA = Split(T, ",")
    M = UBound(R, 1) - LBound(R, 1): N = UBound(TA) - LBound(TA) + 1
    S = L_INIT(M, T)

    For I = 0 To UBound(TA)
        For J = 1 To UBound(R, 2)
            If TA(I) = DI(R, 1, J) Then
                S(1, I + 1) = J
                Exit For
            End If
        Next J
    Next I
    For J = 1 To N
       L = Val(S(1, J))

       If 0 < L And L <= UBound(R, 2) Then
           For I = 1 To M
              S(I, J) = DI(R, I + 1, L)
           Next I
       End If
    Next J

    Call START_AUTO

    L_SELECT = S
End Function

(AV26) =L_SELECT(L_KRT(15),"T,공재명,TNO,N,LAST,분수")

좋은 웹페이지 즐겨찾기