스필 시대의 Excel VBA (3)
의료 정보 검색 참조 함수
이전에 정의한 함수를 사용하여 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,분수")
Reference
이 문제에 관하여(스필 시대의 Excel VBA (3)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/matumoto_onga/items/c894da1dc61d28cb028e
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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
위의 표는 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,분수")
Reference
이 문제에 관하여(스필 시대의 Excel VBA (3)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/matumoto_onga/items/c894da1dc61d28cb028e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)