[ �‰‚߂Ă̕û‚Ö | ˆê——(�Å�V�X�V�‡) | ‘S•¶ŒŸ�õ | ‰ß‹Žƒ�ƒO ]
�@
�wVBA‚É‚Ä�Å’Z‹——£’T�õ�x�i‚É‚�j
A—ñ�iƒf�[ƒ^�”�j�@‚a—ñ�i”Ô’n�j�@‚b—ñ�i”Ô’n�j�@‚c—ñ�i‚a—ñ‚Æ‚b—ñ‚Ì‹——£�j
�@‚P�@�@�@�@�@�@�@�@‚P‚O‚O�@�@�@�@‚Q‚O‚O�@�@�@�@�@�@�@‚T
�@‚Q�@�@�@�@�@�@�@�@‚P‚O‚O�@�@�@�@‚R‚O‚O�@�@�@�@�@�@�@‚S
�@‚R�@�@�@�@�@�@�@�@‚Q‚O‚O�@�@�@�@‚R‚O‚O�@�@�@�@�@�@�@‚Q
�@‚S�@�@�@�@�@�@�@�@‚Q‚O‚O�@�@�@�@‚S‚O‚O�@�@�@�@�@�@�@‚U�@�@�@
�@‚T�@�@�@�@�@�@�@�@‚R‚O‚O�@�@�@�@‚S‚O‚O�@�@�@�@�@�@�@‚R�@�@�@�@
�@‚U�@�@�@�@�@�@�@�@‚Q‚O‚O�@�@�@�@‚P‚O‚O�@�@�@�@�@�@�@‚T
�@‚V�@�@�@�@�@�@�@�@‚R‚O‚O�@�@�@�@‚P‚O‚O�@�@�@�@�@�@�@‚S
�@‚W�@�@�@�@�@�@�@�@‚R‚O‚O�@�@�@�@‚Q‚O‚O�@�@�@�@�@�@�@‚Q
�@‚X�@�@�@�@�@�@�@�@‚S‚O‚O�@�@�@�@‚Q‚O‚O�@�@�@�@�@�@�@‚U
‚P‚O�@�@�@�@�@�@�@�@‚S‚O‚O�@�@�@�@‚R‚O‚O�@�@�@�@�@�@�@‚R
�ã‹L‚̂悤‚È•\‚ª‚ ‚è‚Ü‚·�B
‚P‚O‚O”Ô’n‚©‚ç‚S‚O‚O”Ô’n‚Ö‚Ì�Å’Z‹——£‚ð‹�‚ß‚éƒ}ƒNƒ�‚ð�l‚¦‚½‚̂ł·‚ª
ƒR�[ƒh‚ª‰˜‚‚Ä‚¤‚Ü‚“®‚«‚Ü‚¹‚ñ�B
‚ǂȂ½‚©�A‹³‚¦‚Ä‚‚¾‚³‚¢�B
Sub SAITAN()
Dim HOZON(1000, 2)
Dim N
N = 1
Do Until N = 999
HOZON(N, 1) = 1000
HOZON(N, 0) = 0
HOZON(N, 2) = 0
N = N + 1
Loop
Dim START, ENDB, pointsuu
START = Cells(2, 6).Value
ENDB = Cells(2, 7).Value
pointsuu = Cells(2, 2).Value
Dim POINT, V
POINT = 0
HOZON(0, 0) = START
HOZON(0, 1) = 0
HOZON(0, 2) = START
For V = 1 To pointsuu + 1
Dim GYOU
GYOU = 5 'ƒf�[ƒ^‚ÌŽn‚Ü‚è�B
Do Until GYOU = 83 'ƒf�[ƒ^‚Ì�I‚í‚è�B
If Cells(GYOU, 2) = START Then
Dim J, FLG, KPOINT
J = 0
FLG = 0
Do Until J = pointsuu + 1
If Cells(GYOU, 3) = HOZON(J, 0) Then
FLG = 1
KPOINT = J '�¡‚܂łɒʂÁ‚½‚±‚Æ‚ª‚ ‚é�ê�Š‚ÌŠi”[ˆÊ’u‚ð•Û‘¶
End If
J = J + 1
Loop
If V = 3 Then
T = 100
End If
If FLG = 0 Then
HOZON(POINT + 1, 0) = Cells(GYOU, 3)
If HOZON(V - 1, 0) = HOZON(0, 0) Then
HOZON(POINT + 1, 1) = Cells(GYOU, 4)
Else
HOZON(POINT + 1, 1) = Cells(GYOU, 4) + HOZON(V - 1, 1)
End If
HOZON(POINT + 1, 2) = START
POINT = POINT + 1
Else
If HOZON(V - 1, 1) + Cells(GYOU, 4) < HOZON(KPOINT, 1) Then
Dim TR
TR = HOZON(KPOINT, 1) - HOZON(V - 1, 1) - Cells(GYOU, 4)
HOZON(KPOINT, 1) = HOZON(V - 1, 1) + Cells(GYOU, 4)
HOZON(KPOINT, 2) = HOZON(V - 1, 0)
'‘Oƒ|ƒCƒ“ƒgŒŸ�õ‚µ‚Ä�·Šz‚ðˆø‚
'�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|
HH = 0
Do Until HH = pointsuu
If HOZON(HH, 2) = HOZON(KPOINT, 0) Then
HOZON(HH, 1) = HOZON(HH, 1) - TR
TTT = 0
Do Until TTT = pointsuu
If HOZON(TTT, 2) = HOZON(HH, 0) Then
HOZON(TTT, 1) = HOZON(TTT, 1) - TR
TTTS = 0
Do Until TTTS = pointsuu
If HOZON(TTTS, 2) = HOZON(TTT, 0) Then
HOZON(TTTS, 1) = HOZON(TTTS, 1) - TR
TTTSS = 0
Do Until TTTSS = pointsuu
If HOZON(TTTSS, 2) = HOZON(TTTS, 0) Then
HOZON(TTTSS, 1) = HOZON(TTTSS, 1) - TR
End If
TTTSS = TTTSS + 1
Loop
End If
TTTS = TTTS + 1
Loop
End If
TTT = TTT + 1
Loop
End If
HH = HH + 1
Loop
'�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|�|
ElseIf HOZON(V - 1, 1) + Cells(GYOU, 4) = HOZON(KPOINT, 1) Then
End If
End If
End If
GYOU = GYOU + 1
Loop
START = HOZON(V, 0)
Next
Dim H
H = 1
Do Until HOZON(H, 0) = ENDB
H = H + 1
Loop
Cells(2, 8) = HOZON(H, 1)
For w = 1 To pointsuu
Cells(9, w + 8) = HOZON(w - 1, 0)
Cells(10, w + 8) = HOZON(w - 1, 1)
Cells(11, w + 8) = HOZON(w - 1, 2)
Next
End Sub
ƒŒƒX‚ª•t‚«‚Ü‚¹‚ñ‚Ë�B �„‚P‚O‚O”Ô’n‚©‚ç‚S‚O‚O”Ô’n‚Ö‚Ì�Å’Z‹——£ ‚±‚ê‚͂ǂ̂悤‚È‚±‚Ƃłµ‚傤‚©�B �i�ì–숼‘¾˜Y�j
�@ŠÈ’P‚É‚¢‚¤‚ÆA’n“_‚©‚ç‚y’n“_–˜‚Ç‚¤‚¢‚Á‚½ƒ‹�[ƒg‚ð’Ê‚ê‚Î�Å’Z‹——£‚Å�i‚߂邩‚ð
�@�o‚µ‚½‚¢‚킯‚Å‚·�B
�@Žg—p‚·‚éƒf�[ƒ^‚Í�AŠe’n“_‚Ì—×�Ú‚·‚é’n“_–˜‚Ì‹——£‚¾‚¯‚Å‚·�B
�@�ã‹L‚Ì—á‚ÅŒ¾‚¦‚Î�A‚P‚O‚O”Ô’n‚©‚ç‚S‚O‚O”Ô’n‚Ö�s‚‚Ì‚É
�@‚P‚O‚O”Ô’n‚©‚ç‚R‚O‚O”Ô’n‚ð’Ê‚Á‚Ä‚S‚O‚O”Ô’n‚Ö�s‚¯‚΂V‚‹‚�‚Ì�Å’Z‚Å‚¢‚¯‚é�B
�@‚Æ‚¢‚¤“š‚¦‚ð‹�‚ß‚½‚¢‚킯‚Å‚·�B
�@‚æ‚낵‚‚¨Šè‚¢‚µ‚Ü‚·�B�i‚É‚�j
�à–¾‚ªˆ«‚¢‚ÆŒ¾‚¤‚©�A‚±‚ê‚Í‚à‚¤ŽdŽ–“I‚Șb‚¾‚ÆŽv‚Á‚½�B
‹»–¡‚Í‚ ‚Á‚½‚̂Ŏ©•ª‚È‚è‚Ì•û–@‚ð–Í�õ�c�c’ñަ‚³‚ꂽƒ}ƒNƒ�‚ɂ‚¢‚Ä‚Í�A‚ ‚܂茩‚Ă܂¹‚ñ�Bޏ—ç�B
‚±‚ÌŽè‚Ì�ˆ—�‚Í�Ä‹A‚·‚邯ƒVƒ“ƒvƒ‹‚ɂȂé‰Â”\�«‚ ‚è�A‚Á‚ÄŽ–‚ÅŽQ�l‚ɂłà�B
Option Explicit
Private Type typSerach
Route As String
Distance As Long
End Type
'‚ ‚é”͈͓à‚É‚¨‚¯‚é—ñ”z’u
Private Enum menmCol
IDNo = 1 'ƒL�[
SVal = 2 'ƒXƒ^�[ƒgˆÊ’u
EVal = 3 'ƒGƒ“ƒhˆÊ’u
Distance = 4 '‹——£
End Enum
Sub test()
Dim udtSearch() As typSerach
Dim udtTemp As typSerach
Dim i As Integer
Dim strWk As String
ReDim udtSearch(0 To 0)
'‚ ‚é”͈͂̃f�[ƒ^‚ð‘Î�Û‚É�A100‚©‚ç400‚Ö‚Ì‘Sƒ‹�[ƒg‚ðŒŸ�õ
If Not fncSearch(Range("A1:D10"), "100", "400", udtSearch(), udtTemp) Then
strWk = "ޏ”s"
Else '�¬Œ÷Žž
If UBound(udtSearch) = 0 Then
strWk = "ŠY“–‚È‚µ"
Else
'�Å’Z‹——£‚ð‹�‚ß‚é
udtTemp = udtSearch(LBound(udtSearch))
For i = LBound(udtSearch) To UBound(udtSearch) - 1
If udtTemp.Distance > udtSearch(i).Distance Then
udtTemp = udtSearch(i)
End If
Next
With udtTemp
strWk = "ƒqƒbƒg" & vbTab & "ƒ‹�[ƒg�F" & Mid(.Route, 2) & vbTab & "‹——£�F" & .Distance
End With
End If
End If
MsgBox strWk
End Sub
Function fncSearch( _
ByRef Target As Range, _
ByVal SVal As String, _
ByVal EVal As String, _
ByRef udtSearch() As typSerach, _
ByRef udtTemp As typSerach, _
Optional ByVal CurrentRow As Long = 1, _
Optional ByVal ClassLevel As Long = 0 _
) As Boolean
On Error GoTo ErrorHandler
Dim Row As Long
Dim Col As Long
Dim STemp As String
Dim blnErr As Boolean
Dim blnDup As Boolean
Dim blnHit As Boolean
Dim strHit As String
Dim strWk As String
Dim udtLocal As typSerach
fncSearch = False
blnErr = False 'ƒGƒ‰�[ƒtƒ‰ƒO
blnHit = False 'ƒqƒbƒgƒtƒ‰ƒO
blnDup = False '�d•¡ƒtƒ‰ƒO
For Row = CurrentRow To Target.Rows.Count
If ClassLevel = 0 Then '�Å�‰‚̃‹�[ƒvŽž‚Ì‚Ý�‰Šú‰»
strHit = ""
With udtTemp
.Route = ""
.Distance = 0
End With
End If
If CStr(Target(Row, menmCol.SVal).Value) = SVal Then 'ƒXƒ^�[ƒgˆÊ’u‚̈ê’v
blnDup = False '�‰Šú‰»
'Šù‚É’Ê‚Á‚½ƒ‹�[ƒg‚©”»’f
With udtTemp
If InStr(.Route & strHit & ",", "," & Target(Row, menmCol.IDNo).Value & ",") > 0 Then
blnDup = True '’Ê‚Á‚½‚Ì‚Å�d•¡
End If
End With
If Not blnDup Then '�d•¡‚µ‚ĂȂ¢‚È‚ç
If CStr(Target(Row, menmCol.EVal).Value) = EVal Then '–Ú“I’n‚È‚ç
blnHit = True 'ƒqƒbƒg
Else 'ˆá‚¤‚È‚ç
udtLocal = udtTemp 'Œ»�ó•ÛŽ�
'ƒ‹�[ƒg‚¨‚æ‚Ñ‹——£‚ð‘«‚µ‚±‚Þ
With udtTemp
.Route = .Route & "," & Target(Row, menmCol.IDNo).Value
.Distance = .Distance + Target(Row, menmCol.Distance).Value
End With
'ƒGƒ“ƒh‚ðƒXƒ^�[ƒg‚Æ‚·‚é�ê�Š‚ðƒT�[ƒ`�i�Ä‹A�j
STemp = CStr(Target(Row, menmCol.EVal).Value)
If Not fncSearch(Target, STemp, EVal, udtSearch(), udtTemp, 1, ClassLevel + 1) Then
blnErr = True '–â‘è”�¶
End If
udtTemp = udtLocal 'Œ»�󕜋A
End If
If blnErr Then '–â‘肪‚ ‚Á‚½‚甲‚¯‚é
Exit For
End If
If blnHit Then 'ƒqƒbƒg‚µ‚Ä‚½‚ç
blnHit = False '�‰Šú‰»
strHit = strHit & "," & Target(Row, menmCol.IDNo).Value 'Šù‚É’Ê‚Á‚½�ê�Š‚Æ‚µ‚ĕێ�
udtSearch(UBound(udtSearch)) = udtTemp 'Œ‹‰Ê‚Ì”z—ñ‚ɃZƒbƒg
'Œ‹‰Ê‚É‘«‚µ‚±‚Ý
With udtSearch(UBound(udtSearch))
.Route = .Route & "," & Target(Row, menmCol.IDNo).Value
.Distance = .Distance + Target(Row, menmCol.Distance).Value
End With
'”z—ñŠg’£
ReDim Preserve udtSearch(0 To UBound(udtSearch) + 1)
End If
End If
End If
Next
'–â‘肪”�¶‚µ‚ĂȂ¢‚È‚ç
If Not blnErr Then
fncSearch = True '�¬Œ÷
End If
ErrorHandler:
End Function
ŒŸ�Ø•s‘«�•–³‘ʂȃ�ƒWƒbƒNŠÜ‚Þ‚©‚à‚¾‚¯‚Ç
‚±‚êˆÈ�㎞ŠÔ‚©‚¯‚é‚͖̂³—��A‚Ä‚±‚Æ‚Å“Š‚°‚邾‚¯“Š‚°�c�c
�i‚²‹ß�ŠPG�jƒXƒyƒ‹ƒ~ƒX‚Æ‚©�C�³�C�³
‘�‘¬ŽŽ‚µ‚ÄŒ©‚Ü‚µ‚½�B
�ã‹L‚Ì—á‚Å‚Í�A‚¤‚Ü‚“®‚‚̂ł·‚ª
ƒ|ƒCƒ“ƒg�”‚ð20ƒ|ƒCƒ“ƒg‚ÅŽŽ‚µ‚½‚ç�Aƒ‹�[ƒv‚©‚甲‚¯‚Ä‚«‚Ü‚¹‚ñ‚Å‚µ‚½�B
‚¿‚Ȃ݂Ƀ|ƒCƒ“ƒg�”‚Í�A‘S•”‚Å1000ƒ|ƒCƒ“ƒg’ö“x‚ ‚è‚Ü‚·�B
�ã‹L‚̃Aƒ‹ƒSƒŠƒYƒ€‚ðŽQ�l‚É‚ª‚ñ‚΂Á‚ÄŒ©‚Ü‚·�B(‚É‚�j
�‚µ‹»–¡‚ª‚ ‚é‚Ì‚Å�A �·‚µŽx‚¦‚È‚¯‚ê‚΂»‚̃|ƒCƒ“ƒg�”20ƒ|ƒCƒ“ƒg‚̃f�[ƒ^‚ð�‘‚¢‚ÄŒ©‚Ä‚à‚炦‚Ü‚·‚©�c�c ‚¢‚â�A‰ñ“š‚Å‚«‚é•Û�á‚Í–³‚¢‚ñ‚Å‚·‚ª�Aƒ‹�[ƒv‚©‚甲‚¯‚È‚¢‚ÆŒ¾‚¤‚Ì‚ª‹C‚ɂȂé‚Ì‚Å�B �i‚²‹ß�ŠPG�j–³Ž‹‚µ‚Ä‚‚ê‚Ä‚àOK 1 1 2 1 2 1 4 5 3 1 5 4 4 1 9 2 5 1 17 4 6 2 1 1 7 2 4 2 8 2 8 3 9 3 4 2 11 3 5 3 12 3 6 3 13 4 1 5 14 4 2 2 16 4 3 2 17 4 7 4 18 4 10 4 19 5 1 4 20 5 3 3 21 5 6 3 22 5 17 3 23 6 3 3 24 6 5 3 25 6 10 3 26 6 14 2 27 7 4 4 28 7 8 7 29 7 10 3 30 7 12 3 31 7 13 2 32 8 2 3 33 8 7 7 34 8 9 4 35 8 13 6 36 9 1 2 37 9 8 4 38 9 17 5 39 10 4 4 40 10 6 3 41 10 7 3 42 10 14 5 43 10 15 8 44 11 12 4 45 11 15 3 46 11 16 5 47 11 18 3 48 12 7 3 49 12 11 4 50 12 13 3 51 12 16 3 52 12 20 8 53 13 7 2 54 13 8 6 55 13 12 3 56 14 6 2 57 14 10 5 58 14 15 4 59 15 10 8 60 15 11 3 61 15 14 4 62 15 18 2 63 16 11 5 64 16 12 3 65 16 18 5 66 16 19 7 67 16 20 5 68 17 1 4 69 17 5 3 70 17 9 5 71 18 11 3 72 18 15 2 73 18 16 5 74 18 19 6 75 19 16 7 76 19 18 6 77 19 20 9 78 20 12 8 79 20 16 5 80 20 19 9 �i‚É‚�j
”š”“I‚ɃT�[ƒ`”͈͂ª�L‚ª‚é‚©‚ç‹A‚Á‚Ä‚±‚È‚¢‚Ì‚Ë�B ‚¿‚å‚Á‚Æ’²�¸‚·‚éŠK‘w‚Ì�[‚³‚ð�§ŒÀ‚·‚邿‚¤‚É•Ï�X‚µ‚Ă݂܂µ‚½�B
‘z’è
E1‚ɃXƒ^�[ƒg”Ô�†
F1‚ɃGƒ“ƒh”Ô�†
G1‚ÉŠK‘w
‚ð“ü—Í‚·‚镨‚Æ‚µ‚Ü‚·�B
ŠK‘w‚Í�A�”Žš‚ª�¬‚³‚¢‚Ù‚Ç‘�‚�ˆ—�‚ª•Ô‚Á‚Ä‚«‚Ü‚·‚ª�¸“x‚ª—Ž‚¿‚邿�A‚Á‚ÄŠ´‚¶‚Å�B
ˆê‰ž�A�¬‚³‚¢’l‚©‚玎‚µ‚Ă݂Ă‚¾‚³‚¢�B
5ŠK‘w‚‚ç‚¢‚Ȃ猻ŽÀ“I‚ÈŽžŠÔ‚ŕԂÁ‚Ä‚‚é‚©‚È�H‚Æ�c�c1000Œ�‚ÅŽŽ‚µ‚½‚肵‚ĂȂ¢‚̂ŃAƒŒ‚¾‚¯‚Ç�B
‚±‚¤‚¢‚¤ŒvŽZ‚Í•¶Œnƒvƒ�ƒOƒ‰ƒ}‚ÈŽ©•ª‚Í‹êŽè‚Å‚·�B
‚ǂꂂ炢‚ÌŠK‘w‚܂Ń`ƒFƒbƒN‚·‚ê‚ÎŒ»ŽÀ“I‚É–â‘è‚È‚¢‚©‚Æ‚©�A“¾ˆÓ‚È�l‚ª�l‚¦‚Ä‚‚ê‚é‚©‚à�B
Option Explicit
Private Type typSerach
Route As String
Distance As Long
End Type
'‚ ‚é”͈͓à‚É‚¨‚¯‚é—ñ”z’u
Private Enum menmCol
IDNo = 1 'ƒL�[
SVal = 2 'ƒXƒ^�[ƒgˆÊ’u
EVal = 3 'ƒGƒ“ƒhˆÊ’u
Distance = 4 '‹——£
End Enum
Sub test()
Dim udtSearch() As typSerach
Dim udtTemp As typSerach
Dim i As Integer
Dim strWk As String
ReDim udtSearch(0 To 0)
'‚ ‚é”͈͂̃f�[ƒ^‚ð‘Î�Û‚É�A‘Sƒ‹�[ƒg‚ðŒŸ�õ
If Not fncSearch(Range("A1:D78"), Range("E1").Value, Range("F1").Value, udtSearch(), udtTemp, Range("G1").Value) Then
strWk = "ޏ”s"
Else '�¬Œ÷Žž
If UBound(udtSearch) = 0 Then
strWk = "ŠY“–‚È‚µ"
Else
'�Å’Z‹——£‚ð‹�‚ß‚é
udtTemp = udtSearch(LBound(udtSearch))
For i = LBound(udtSearch) To UBound(udtSearch) - 1
If udtTemp.Distance > udtSearch(i).Distance Then '‹——£‚ª’Z‚¢•¨‚ð�Ì—p
udtTemp = udtSearch(i)
ElseIf udtTemp.Distance = udtSearch(i).Distance Then '‹——£‚ª“¯‚¶�ê�‡
'‚æ‚èŒo˜H‚Ì’Z‚¢•¨‚ð�Ì—p
If UBound(Split(udtTemp.Route, ",")) > UBound(Split(udtSearch(i).Route, ",")) Then
udtTemp = udtSearch(i)
End If
End If
Next
With udtTemp
strWk = "ƒqƒbƒg" & vbTab & "ƒ‹�[ƒg�F" & Mid(.Route, 2) & vbTab & "‹——£�F" & .Distance
End With
End If
End If
MsgBox strWk
End Sub
Function fncSearch( _
ByRef Target As Range, _
ByVal SVal As String, _
ByVal EVal As String, _
ByRef udtSearch() As typSerach, _
ByRef udtTemp As typSerach, _
Optional ByVal MaxClassLevel As Long = 5, _
Optional ByVal ClassLevel As Long = 0, _
Optional ByVal CurrentRow As Long = 1 _
) As Boolean
On Error GoTo ErrorHandler
Dim Row As Long
Dim Col As Long
Dim STemp As String
Dim blnErr As Boolean
Dim blnDup As Boolean
Dim blnHit As Boolean
Dim strHit As String
Dim strWk As String
Dim udtLocal As typSerach
fncSearch = False
blnErr = False 'ƒGƒ‰�[ƒtƒ‰ƒO
blnHit = False 'ƒqƒbƒgƒtƒ‰ƒO
blnDup = False '�d•¡ƒtƒ‰ƒO
'‚ ‚éˆê’èŠK‘wˆÈ�ã‚̃T�[ƒ`‚ð—v‚·‚é�ê�‡‚Í‚ ‚«‚ç‚ß‚é
If ClassLevel >= MaxClassLevel Then
GoTo ExitHandler
End If
For Row = CurrentRow To Target.Rows.Count
If ClassLevel = 0 Then '�Å�‰‚̃‹�[ƒvŽž‚Ì‚Ý�‰Šú‰»
strHit = ""
With udtTemp
.Route = ""
.Distance = 0
End With
End If
If CStr(Target(Row, menmCol.SVal).Value) = SVal Then 'ƒXƒ^�[ƒgˆÊ’u‚̈ê’v
blnDup = False '�‰Šú‰»
'Šù‚É’Ê‚Á‚½ƒ‹�[ƒg‚©”»’f
With udtTemp
If InStr(.Route & strHit & ",", "," & Target(Row, menmCol.IDNo).Value & ",") > 0 Then
blnDup = True '’Ê‚Á‚½‚Ì‚Å�d•¡
End If
End With
If Not blnDup Then '�d•¡‚µ‚ĂȂ¢‚È‚ç
If CStr(Target(Row, menmCol.EVal).Value) = EVal Then '–Ú“I’n‚È‚ç
blnHit = True 'ƒqƒbƒg
Else 'ˆá‚¤‚È‚ç
udtLocal = udtTemp 'Œ»�ó•ÛŽ�
'ƒ‹�[ƒg‚¨‚æ‚Ñ‹——£‚ð‘«‚µ‚±‚Þ
With udtTemp
.Route = .Route & "," & Target(Row, menmCol.IDNo).Value
.Distance = .Distance + Target(Row, menmCol.Distance).Value
End With
'ƒGƒ“ƒh‚ðƒXƒ^�[ƒg‚Æ‚·‚é�ê�Š‚ðƒT�[ƒ`�i�Ä‹A�j
STemp = CStr(Target(Row, menmCol.EVal).Value)
If Not fncSearch(Target, STemp, EVal, udtSearch(), udtTemp, MaxClassLevel, ClassLevel + 1) Then
blnErr = True '–â‘è”�¶
End If
udtTemp = udtLocal 'Œ»�󕜋A
End If
If blnErr Then '–â‘肪‚ ‚Á‚½‚甲‚¯‚é
Exit For
End If
If blnHit Then 'ƒqƒbƒg‚µ‚Ä‚½‚ç
blnHit = False '�‰Šú‰»
strHit = strHit & "," & Target(Row, menmCol.IDNo).Value 'Šù‚É’Ê‚Á‚½�ê�Š‚Æ‚µ‚ĕێ�
udtSearch(UBound(udtSearch)) = udtTemp 'Œ‹‰Ê‚Ì”z—ñ‚ɃZƒbƒg
'Œ‹‰Ê‚É‘«‚µ‚±‚Ý
With udtSearch(UBound(udtSearch))
.Route = .Route & "," & Target(Row, menmCol.IDNo).Value
.Distance = .Distance + Target(Row, menmCol.Distance).Value
End With
'”z—ñŠg’£
ReDim Preserve udtSearch(0 To UBound(udtSearch) + 1)
End If
End If
End If
Next
ExitHandler:
'–â‘肪”�¶‚µ‚ĂȂ¢‚È‚ç
If Not blnErr Then
fncSearch = True '�¬Œ÷
End If
ErrorHandler:
End Function
’Ç‹L�F ƒf�[ƒ^‚Ì•À‚Ñ‹K‘¥‚ðƒ‹�[ƒ`ƒ“‚ɉÁ–¡‚·‚ê‚Î�A‚à‚¤‚¿‚å‚Á‚ÆŒy‚‚È‚é�c�c‚Ƃ͎v‚¤‚¯‚Ç�A‚»‚±‚܂ł͂¿‚å‚Á‚ƃLƒcƒC�B �i‚²‹ß�ŠPG�j
>•¶Œnƒvƒ�ƒOƒ‰ƒ}‚ÈŽ©•ª‚Í‹êŽè‚Å‚·�B ‚»‚¤‚È‚ñ‚¾�`�B —�Œn�o�g‚Å‚à‚¨—V‚уvƒ�ƒOƒ‰ƒ}‚ÌŽ„‚É‚Í�Ä‹Aƒ�ƒWƒbƒN‚ð�l‚¦‚é”]‚Ý‚»‚Í‚ ‚è‚Ü‚¹‚Ê¥¥¥�@ ‚Æ‚±‚ë‚Å‘Î�Ûƒf�[ƒ^‚Ì�d•¡‚Í�í�œ‚µ‚½‚ç‚Ü‚¸‚¢‚Ì‚©‚È�E�E (INA)
‚¨•׋‚Í—�Œn‚Ì•û‚¾‚Á‚½‚ñ‚Å‚·‚ª�AŒü‚¢‚ĂȂ©‚Á‚½‚©‚à�B “ª‚Ì’†‚Í•¶Œn‚Á‚Û‚¢‚È‚Ÿ‚ÆŒÂ�l“I‚ÉŽv‚Á‚Ä‚½‚è�B‚Ç‚¤‚à•¶�Í“I‚ȃR�[ƒh‚ɂȂé�B
Ž„“IƒCƒ��[ƒW •¶ŒnPG�u‚±‚ꂪ‚±‚¤‚¾‚Á‚½‚ç‚ �[‚µ‚Ä�A‚»‚¤‚łȂ©‚Á‚½‚炱‚¤‚µ‚Ä�AŒ‹‰Ê‚Ç‚¤‚È‚Á‚½‚©‚ð•Ô‚µ‚È‚³‚¢�v —�ŒnPG�u‚P‚Æ‚Q‚Å‚R�v
‚Á‚Ä‚¢‚¤Š´‚¶�H�i‚È‚ñ‚¾‚»‚è‚á�j ƒR�[ƒfƒBƒ“ƒO—ʂƌ¾‚¤–ʂƂ©‚ÌŒø—¦‚ªˆ«‚¢‚Ý‚½‚¢‚È�B ‚Ç‚¿‚炪—Ç‚¢‚Á‚Ä–ó‚Å‚à‚È‚¢‚¯‚Ç�B
’Ç‹L�F �d•¡‚Í‹tˆø‚«‚Å‚«‚é‚Á‚ÄŽ–‚Å—pˆÓ‚µ‚Ä‚é‚Ì‚©‚µ‚ç‚Æ�B20�¨1‚Å‚à“¯‚¶ƒ‹�[ƒ`ƒ“‚Å’T‚¹‚é�B B—ñ‚ª‚«‚ê‚¢‚É•À‚ñ‚Å‚¢‚é‘O’ñ‚Å�l‚¦‚é‚È‚ç‚Î Excel‹@”\‚ÅMatch‚¾‚©‚ð‚©‚Ü‚µ‚ăXƒ^�[ƒgˆÊ’uŽæ“¾�Aˆá‚¤’l‚ɂȂÁ‚½‚甲‚¯‚é�B ‚Á‚Ä‚·‚邾‚¯‚őГ–‚ÉŒy‚‚È‚é‚Æ‚ÍŽv‚¤�B �i‚²‹ß�ŠPG�jSQL‚Åwhere‚©‚Ü‚µ‚Ä•K—v‚È•”ˆÊ‚¾‚¯Œ©‚邿‚¤‚ȃCƒ��[ƒW
Ž©ŒÈ–ž‘«�X�VƒAƒbƒv�B
B—ñ‚Ì’l‚ª“¯’l‚ł܂Ƃ܂Á‚Ä‚¢‚鎖‚ð‘O’ñ‚Æ‚µ‚Ä�A�ˆ—�‘¬“x‰ü‘P‚ð�}‚Á‚½•¨‚Å‚·�B
‘O�q‚Ì‚à‚Ì‚Í�u‘Sƒ|ƒCƒ“ƒg�s�”�v‚É‘½‘å‚ɉe‹¿‚ðŽó‚¯‚é�ì‚è‚Å‚µ‚½‚ª�A
�¡‰ñ‚Ì‚à‚Ì‚Í�u1ƒ|ƒCƒ“ƒg“–‚½‚è‚Ì�s�”�v‚ɉe‹¿‚ðŽó‚¯‚é�ì‚è‚Å‚·�B
‚±‚ê‚É‚æ‚è20ƒ|ƒCƒ“ƒg•ª‚̃f�[ƒ^‚¾‚낤‚ª�A1000ƒ|ƒCƒ“ƒg•ª‚̃f�[ƒ^‚¾‚낤‚ª�A
�i‚·‚Ȃ킿1ƒ|ƒCƒ“ƒg“–‚½‚è4�s’ö‚Æ�l‚¦‚½�ê�‡�A20ƒ|ƒCƒ“ƒg‚Å80�s�A1000ƒ|ƒCƒ“ƒg‚Å4000�s‚̃f�[ƒ^�A‚»‚̂ǂ¿‚ç‚Å‚à�j
�ˆ—�ŽžŠÔ‚ª•½‹Ï“I‚ɂȂé‚Í‚¸�B‘½•ª�B
�@
Žg—p‘O’ñ
A:D‚ÉŒŸ�õ—pƒf�[ƒ^‚ª“ü—Í‚³‚ê‚Ä‚¢‚鎖
E1‚ɃXƒ^�[ƒg”Ô�†‚ð“ü—Í‚·‚鎖
F1‚ɃGƒ“ƒh”Ô�†‚ð“ü—Í‚·‚鎖
G1‚ÉŠK‘w‚ð“ü—Í‚·‚鎖
ŒŸ�õ’l‚Í�”’lˆµ‚¢‚Å‚«‚镨‚ÉŒÀ‚ç‚ê‚Ä‚¢‚鎖
�iH‚ÆI‚ÉŒ‹‰Ê‚ð“f‚«�o‚·“®‚«‚ð“ü‚ꂽ‚ªƒRƒ�ƒ“ƒgˆµ‚¢�c�c“à—e‚ðŒ©‚½‚¢‚È‚çƒRƒ�ƒ“ƒgŠO‚·�j
�@
Option Explicit
Private Type typSerach
Route As String
Distance As Long
End Type
'‚ ‚é”͈͓à‚É‚¨‚¯‚é—ñ”z’u
Private Enum menmCol
IDNo = 1 'ƒL�[
SVal = 2 'ƒXƒ^�[ƒgˆÊ’u
EVal = 3 'ƒGƒ“ƒhˆÊ’u
Distance = 4 '‹——£
End Enum
Sub test()
Dim udtSearch() As typSerach
Dim udtTemp As typSerach
Dim i As Integer
Dim strWk As String
ReDim udtSearch(0 To 0)
'‚ ‚é”͈͂̃f�[ƒ^‚ð‘Î�Û‚É�A‘Sƒ‹�[ƒg‚ðŒŸ�õ
If Not fncSearch(Range("A:D"), Range("E1").Value, Range("F1").Value, udtSearch(), udtTemp, Range("G1").Value) Then
strWk = "ޏ”s"
Else '�¬Œ÷Žž
If UBound(udtSearch) = 0 Then
strWk = "ŠY“–‚È‚µ"
Else
'�Å’Z‹——£‚ð‹�‚ß‚é
udtTemp = udtSearch(LBound(udtSearch))
For i = LBound(udtSearch) To UBound(udtSearch) - 1
'ƒqƒbƒg“à—e‚ðH—ñ‚ÆI—ñ‚É�o—Í
'Range("H" & CStr(i + 1)).Value = Mid(udtSearch(i).Route, 2)
'Range("I" & CStr(i + 1)).Value = udtSearch(i).Distance
If udtTemp.Distance > udtSearch(i).Distance Then '‹——£‚ª’Z‚¢•¨‚ð�Ì—p
udtTemp = udtSearch(i)
ElseIf udtTemp.Distance = udtSearch(i).Distance Then '‹——£‚ª“¯‚¶�ê�‡
'‚æ‚èŒo˜H‚Ì’Z‚¢•¨‚ð�Ì—p
If UBound(Split(udtTemp.Route, ",")) > UBound(Split(udtSearch(i).Route, ",")) Then
udtTemp = udtSearch(i)
End If
End If
Next
With udtTemp
strWk = "ƒqƒbƒg�”�F" & UBound(udtSearch) & vbCrLf & "�Å’Zƒ‹�[ƒg�F" & Mid(.Route, 2) & vbCrLf & "‹——£�F" & .Distance
End With
End If
End If
MsgBox strWk
End Sub
Function fncSearch( _
ByRef Target As Range, _
ByVal SVal As String, _
ByVal EVal As String, _
ByRef udtSearch() As typSerach, _
ByRef udtTemp As typSerach, _
Optional ByVal MaxClassLevel As Long = 5, _
Optional ByVal ClassLevel As Long = 0, _
Optional ByVal CurrentRow As Long = 1 _
) As Boolean
On Error GoTo ErrorHandler
Dim Row As Long
Dim STemp As String
Dim blnErr As Boolean
Dim blnDup As Boolean
Dim blnHit As Boolean
Dim strHit As String
Dim udtLocal As typSerach
Dim StartRow As Long
fncSearch = False
blnErr = False 'ƒGƒ‰�[ƒtƒ‰ƒO
blnHit = False 'ƒqƒbƒgƒtƒ‰ƒO
blnDup = False '�d•¡ƒtƒ‰ƒO
'‚ ‚éˆê’èŠK‘wˆÈ�ã‚̃T�[ƒ`‚ð—v‚·‚é�ê�‡‚Í‚ ‚«‚ç‚ß‚é
If ClassLevel >= MaxClassLevel Then
GoTo ExitHandler
End If
On Error Resume Next
'‘Î�ÛƒV�[ƒg‚Ì“¯’l‚Ì�s‚ðŽæ“¾
StartRow = WorksheetFunction.Match(CLng(SVal), Target.Columns(menmCol.SVal), 0)
If Err Then
StartRow = -1
Err.Clear
End If
On Error GoTo ErrorHandler
If StartRow = -1 Then
GoTo ExitHandler
End If
For Row = StartRow To Target.Rows.Count
If ClassLevel = 0 Then '�Å�‰‚̃‹�[ƒvŽž‚Ì‚Ý�‰Šú‰»
strHit = ""
With udtTemp
.Route = ""
.Distance = 0
End With
End If
'ƒXƒ^�[ƒgˆÊ’u‚Ì•sˆê’v
If CStr(Target(Row, menmCol.SVal).Value) <> SVal Then
Exit For '”²‚¯‚é
End If
blnDup = False '�‰Šú‰»
'Šù‚É’Ê‚Á‚½ƒ‹�[ƒg‚©”»’f
With udtTemp
If InStr(.Route & strHit & ",", "," & Target(Row, menmCol.IDNo).Value & ",") > 0 Then
blnDup = True '’Ê‚Á‚½‚Ì‚Å�d•¡
End If
End With
If Not blnDup Then '�d•¡‚µ‚ĂȂ¢‚È‚ç
If CStr(Target(Row, menmCol.EVal).Value) = EVal Then '–Ú“I’n‚È‚ç
blnHit = True 'ƒqƒbƒg
Else 'ˆá‚¤‚È‚ç
udtLocal = udtTemp 'Œ»�ó•ÛŽ�
'ƒ‹�[ƒg‚¨‚æ‚Ñ‹——£‚ð‘«‚µ‚±‚Þ
With udtTemp
.Route = .Route & "," & Target(Row, menmCol.IDNo).Value
.Distance = .Distance + Target(Row, menmCol.Distance).Value
End With
'ƒGƒ“ƒh‚ðƒXƒ^�[ƒg‚Æ‚·‚é�ê�Š‚ðƒT�[ƒ`�i�Ä‹A�j
STemp = CStr(Target(Row, menmCol.EVal).Value)
If Not fncSearch(Target, STemp, EVal, udtSearch(), udtTemp, MaxClassLevel, ClassLevel + 1) Then
blnErr = True '–â‘è”�¶
End If
udtTemp = udtLocal 'Œ»�󕜋A
End If
If blnErr Then '–â‘肪‚ ‚Á‚½‚甲‚¯‚é
Exit For
End If
If blnHit Then 'ƒqƒbƒg‚µ‚Ä‚½‚ç
blnHit = False '�‰Šú‰»
strHit = strHit & "," & Target(Row, menmCol.IDNo).Value 'Šù‚É’Ê‚Á‚½�ê�Š‚Æ‚µ‚ĕێ�
udtSearch(UBound(udtSearch)) = udtTemp 'Œ‹‰Ê‚Ì”z—ñ‚ɃZƒbƒg
'Œ‹‰Ê‚É‘«‚µ‚±‚Ý
With udtSearch(UBound(udtSearch))
.Route = .Route & "," & Target(Row, menmCol.IDNo).Value
.Distance = .Distance + Target(Row, menmCol.Distance).Value
End With
'”z—ñŠg’£
ReDim Preserve udtSearch(0 To UBound(udtSearch) + 1)
End If
End If
Next
ExitHandler:
'–â‘肪”�¶‚µ‚ĂȂ¢‚È‚ç
If Not blnErr Then
fncSearch = True '�¬Œ÷
End If
ErrorHandler:
End Function
�i‚²‹ß�ŠPG�jƒ�ƒWƒbƒNŽ©‘̖̂³‘ʂƂ©Œ©’¼‚µ‚Í‚µ‚ĂȂ¢
–^�A‘å�ã‚Ì‘åŠwŒo�ÏŠw•”Œo�ÏŠw‰È‘²‚΂è‚΂è‚Ì•¶‰»Œn
‚¨—V‚ÑPG�A�A•Ê–¼�uƒ}ƒNƒ�‚Ì‹L˜^‰¤�v�B�B�B�B
‚¿‚å‚Á‚Æ�A�ì‚Á‚Ă݂܂µ‚½�B�B�B
‚Å‚à�A‚ ‚Á‚Ă邩‚Ç‚¤‚©‚í‚©‚è‚Ü‚¹‚ñ�B
‚±‚êˆÈ�ã‚ð‹�‚ß‚ç‚ê‚Ä‚à‚¨•ÔŽ–�o—ˆ‚é‚©‚Ç‚¤‚©‚í‚©‚è‚Ü‚¹‚ñ�B
’P‚Ȃ鎩ŒÈ–ž‘«‚Å‚·�B�B�B
‘肵‚Ä�A�A�A�uŽ„‚È‚ç�A�A•Î�v‚Å‚·�B
Option Explicit
Dim MyMin As Long
Dim MyMax As Long
Dim k As Long
Dim MyDis As String
Sub ‚Ä‚·‚Æ()
Dim MyA As Variant
Dim MyTbl As Range
Dim MyKey As String, x As Long
Dim i As Long, z As Long
Dim MySS As String
With Worksheets("Sheet1")
Set MyTbl = .Range("A1", .Range("A65536").End(xlUp))
End With
'ƒf�[ƒ^‚ð”z—ñ‚Ɏ擾
MyA = MyTbl.Resize(, 3).Value
'ƒXƒ^�[ƒg‚̃|ƒCƒ“ƒg‚ðŽæ“¾
MyMin = Application.Min(MyTbl)
'ƒS�[ƒ‹‚̃|ƒCƒ“ƒg‚ðŽæ“¾
MyMax = Application.Max(MyTbl.Resize(, 1).Offset(, 1))
'ƒJƒEƒ“ƒ^�[‚Ì�‰Šú‰»
k = 0
'ƒ‹�[ƒv‚ÌŠJŽn
For i = 1 To UBound(MyA, 1)
MyDis = Empty
'ƒXƒ^�[ƒg’n“_‚¾‚Á‚½‚ç
If MyA(i, 1) = MyMin Then
MyKey = MyA(i, 2)
x = MyA(i, 3)
'MySEARCH‚ɃL�[‚Æ‹——£‚ð“n‚µ‚Ä’T�õŠJŽn
MySEARCH MyKey, MyTbl, x
'�‰‚ß‚Ä�¬Œ÷‚µ‚½’l‚ðŽæ“¾
If k = 1 And MyKey = MyMax Then
z = x
MySS = MyMin & MyDis
End If
'ƒS�[ƒ‹‚Ü‚Å�s‚¯‚½‚ç
If MyKey = MyMax Then
'‘O‰ñ‚Æ”äŠr‚µ‚Ä�¬‚³‚©‚Á‚½‚çz‚ð�X�V
If x < z Then
z = x
MySS = MyMin & MyDis
End If
End If
End If
Next
'’T�õ‚É�¬Œ÷‚µ‚Ä‚¢‚½‚ç
If k > 0 Then
MsgBox "�Å’Zƒ‹�[ƒg‚Í" & MySS & Chr(13) & _
"�Å’Z‹——£‚Í" & z & "‚Å‚¿‚ãv(=�¿_�¿=)v�B�B�B"
Else
MsgBox "’T�õ�o—ˆ‚Ü‚¹‚ñ‚Å‚µ‚½�B�B"
End If
Erase MyA
Set MyTbl = Nothing
End Sub
Sub MySEARCH(ByRef MyData As String, ByVal MyRng As Range, ByRef x As Long)
Dim MyB As Variant
Dim j As Long
MyB = MyRng.Resize(, 3).Value
For j = 1 To UBound(MyB, 1)
'ŽŸ‚̃|ƒCƒ“ƒg‚¾‚Á‚½‚ç
If MyB(j, 1) = Val(MyData) Then
'‘O�i‚µ‚½‚ç
If MyB(j, 2) > Val(MyData) Then
MyDis = MyDis & ":" & MyData & ":" & MyB(j, 2)
'Œ»�݂̋——£‚Ƀvƒ‰ƒX‚µ‚Ä�X�V
x = x + MyB(j, 3)
'ƒ|ƒ“ƒg‚ð�X�V
MyData = MyB(j, 2)
'�Å�I’n“_‚Ü‚Å�s‚¯‚½‚ç
If Val(MyData) = MyMax Then
'ƒJƒEƒ“ƒ^�[‚Ì�X�V
k = k + 1
'ƒ‹�[ƒv‚𔲂¯‚é
Exit For
End If
End If
End If
Next
Erase MyB
End Sub
http://ryusendo.no-ip.com/cgi-bin/upload/src/up0248.xls
‚·‚݂܂¹‚ñ�B‚í‚©‚è‚Ü‚µ‚½�BŽ©•ª‚Ńf�[ƒ^‚ð‰ü‚´‚ñ‚µ‚Ă܂µ‚½�B�i�P� �P�G�j�I�I
‚¨‘›‚ª‚¹‚µ‚Ü‚µ‚½�Bm(._.)m ƒyƒRƒb
‚ ‚è‚á�A‚悌©‚½‚çABCD—ñ‚Å‚·‚©‚Ÿ�A�A�AA—ñ‚Í”Ô�†‚¾‚¯‚¾‚©‚çŠÖŒW‚È‚¢‚ñ‚Å‚µ‚å�H
Ž„‚ÍABC‚µ‚©‚݂Ă܂¹‚ñ‚Ì‚Å
BCD—ñ‚É‚µ‚½‚¢Žž‚Í�A‚¨•ª‚©‚è‚Å‚µ‚傤‚¯‚Ç�A�A�«‚±‚ê‚ð
Set MyTbl = .Range("A1", .Range("A65536").End(xlUp))
‚±‚ê‚É�«
Set MyTbl = .Range("B1", .Range("B65536").End(xlUp))
‚É•Ï�X‚µ‚Ä‚‚¾‚³‚¢�B‚ł͂łÍ�A‚¨‚â‚·‚݂Ȃ³‚¢zzzzzzzz
�iSoulMan�j
Ž©•ª‚à‚¿‚å‚ë‚è‚Æ•â‘«‚µ‚Ă݂悤�B �@ Ž„‚̃}ƒNƒ�‚ª•Ô‚·�Å’Zƒ‹�[ƒg‚Ì’l‚Í�AA—ñ‚Ì’l‚Å‚·�B A—ñ‚Ì’l‚ð‚¢‚í‚ä‚éŽåƒL�[‚Æ‚µ‚ÄŒ©‚Ä‚¢‚Ü‚·�B A—ñ‚Ì’l‚É�d•¡‚ª–³‚¢‘O’ñ‚Æ‚µ‚½Žž‚É�d•¡ƒ`ƒFƒbƒN‚ª‚µ‚â‚·‚¢‚ÆŒ¾‚¤—˜“_‚ª‚ ‚Á‚½‚Ì‚Å�B �@ ‚½‚Æ‚¦‚ÎŽ¦‚µ‚Ä‚¢‚½‚¾‚¢‚½20ƒ|ƒCƒ“ƒg‚̃f�[ƒ^‚ðA:D—ñ‚É“\‚è•t‚¯‚½�ã‚Å�A ’T�õ‚Ì�ðŒ�‚Æ‚µ‚Ä�AˆÈ‰º‚̂悤‚ÈŽw’è‚ð‚µ‚Ä‚Ý‚é�B �@E1‚ð 8�iƒXƒ^�[ƒgˆÊ’u�j �@F1‚ð16�iƒGƒ“ƒhˆÊ’u�j �@G1‚ð 5�iŠK‘w�j ‚·‚邯�AˆÈ‰º‚̂悤‚ÈŒ‹‰Ê‚ð•Ô‚·�B �@ƒqƒbƒg�”�@�F35 �@�Å’Zƒ‹�[ƒg�F35,55,51 �@‹——£�@�@�@�F12 �@ ‚±‚ê‚ÌŒ©•û‚Í�A8‚©‚ç16‚ÖŒü‚©‚¤ƒ‹�[ƒg‚ª5ŠK‘w‚܂łŌ©‚½‚Æ‚«‚É35ƒpƒ^�[ƒ“‚ ‚è�A ‚»‚Ì“¹‹Ø‚Ì’†‚ÅA—ñ‚ª �@35‚̃f�[ƒ^�i 8�¨13,‹——£6�j �@55‚̃f�[ƒ^�i13�¨12,‹——£3�j �@51‚̃f�[ƒ^�i12�¨16,‹——£3�j ‚Æ‚¢‚Á‚½“¹‹Ø‚ð’H‚邯�A�Å‚à‹——£‚ª’Z‚¢‚Å‚·‚æ�A‚Æ�B ‚‚܂è�‘‚«Š·‚¦‚邯 �@8�¨13�¨12�¨16 ‚Æ�s‚‚Æ�Å‚à‹——£‚ª’Z‚¢�B‚Í‚¸�B ‚»‚ñ‚ÈŠ´‚¶�B
‚¿‚Ȃ݂É1‚©‚ç20‚ւ̃‹�[ƒg‚Í�A 4ŠK‘w‚ÅŒ©‚½‚Æ‚«‚É �@ƒqƒbƒg�”�@�F1 �@�Å’Zƒ‹�[ƒg�F2,17,30,52 �@‹——£�@�@�@�F20 5ŠK‘w‚ÅŒ©‚½‚Æ‚«‚É �@ƒqƒbƒg�”�@�F9 �@�Å’Zƒ‹�[ƒg�F1,7,17,30,52 �@‹——£�@�@�@�F18 8ŠK‘w‚ÅŒ©‚½‚Æ‚«‚É‚à �@ƒqƒbƒg�”�@�F1094 �@�Å’Zƒ‹�[ƒg�F1,7,17,30,52 �@‹——£�@�@�@�F18 ‚ÆŒ¾‚Á‚½Œ‹‰Ê‚ƂȂè‚Ü‚µ‚½�B �‘‚«Š·‚¦‚邯 �@1�¨2�¨4�¨7�¨12�¨20 ‚©‚È�B SoulMan‚³‚ñ‚̃}ƒNƒ�‚à�Ú�ׂɌ©‚½‚¢‚¯‚Ç–°‚¢�c�c �i‚²‹ß�ŠPG�j�•‚¿‚Æ�ŋߖZ‚µ‚¢
‚ ‚Ü‚¦‚‚¢‚Å‚É‚à‚¤ˆê‚‚¨Šè‚¢‚µ‚½‚¢‚ñ‚Å‚·‚ª�A
‚Ȃɂð‚â‚肽‚¢‚©‚ÆŒ¾‚¤‚Æ�A‚ ‚é�H�ê‚©‚ç‚·‚ׂẴ|ƒCƒ“ƒg‚ւ̉^’À‹——£•\
‚ð�ì�¬‚µ‚½‚¢‚킯‚È‚ñ‚Å‚·�B‚Å‚·‚©‚çƒXƒ^�[ƒg’n“_‚ð“o˜^‚µ‚Ä
ƒXƒ^�[ƒg’n“_‚æ‚è‚·‚ׂẴ|ƒCƒ“ƒg‚Ö‚Ì�Å’Z‹——£‹y‚шê‚‘O‚̃|ƒCƒ“ƒg‚ª
‹L‚³‚ꂽ•\‚ð�ì�¬‚µ‚½‚¢‚̂ł·‚ª�E�E�E�B
–³Ž‹‚µ‚Ä‚‚ê‚Ä‚àok‚Å‚·�BŠÃ‚¦‚·‚¬‚©‚à�H�i‚É‚�j
�l‚¦•û‚¾‚¯�B ‚à‚µŽ©•ª’ñަ‚Ì�ã‹Lƒ}ƒNƒ�‚Ì“®�쌋‰Ê‚É–â‘肪–³‚¢‚ÆŽv‚í‚ê‚é‚È‚ç‚Î�A‚»‚ê‚ðŒ³‚É‰ü—Ç‚µ‚Ă݂é�B Œ»�ó‚Å‚Í�uƒXƒ^�[ƒg’n“_�v‚Æ�uƒGƒ“ƒh’n“_�v‚ª’PˆêƒZƒ‹‚ðŒ©‚éŒ`‚Å�ì‚Á‚Ă܂·‚ª�A ‚»‚ê‚ð‘Sƒ|ƒCƒ“ƒg•ªŒJ‚è•Ô‚·‚悤‚È�ì‚è‚É‚µ‚Ă݂Ă͂ǂ¤‚Å‚µ‚傤�B �uˆê‚‘O‚̃|ƒCƒ“ƒg�v‚ɂ‚¢‚Ä‚Í�Aƒqƒbƒg‚µ‚½�ÅŒã‚Ì�ê�Š‚Ìƒf�[ƒ^‚ðŒ©‚ê‚Εª‚©‚é‚Í‚¸‚Å‚·�B ‚»‚ê‚Í—eˆÕ‚Ɏ擾�o—ˆ‚é‚Å‚µ‚傤�B �i‚²‹ß�ŠPG�j‚ÆŒ¾‚¤‚±‚Æ‚Å
�„‚à‚µŽ©•ª’ñަ‚Ì�ã‹Lƒ}ƒNƒ�‚Ì“®�쌋‰Ê‚É–â‘肪–³‚¢‚ÆŽv‚í‚ê‚é‚È‚ç‚Î�A‚»‚ê‚ðŒ³‚É‰ü—Ç‚µ‚Ă݂é�B
–â‘è‚ ‚è‚Å‚·�B‹——£‚ª“¯ˆê‚ÌŽž‚Ì�ˆ—�‚ª�o—ˆ‚Ä‚¢‚È‚¢‚µ�A
�Å’Z‹——£‚ª�X�V‚³‚ê‚½Žž‚É�A‚»‚Ì‘¼‚̃|ƒCƒ“ƒg‚ð‚¢‚Á‚½‚¢‚Ç‚±‚Ü‚Å
‘k‚Á‚Ä�C�³‚·‚ê‚Î�A�³Šm‚È’l‚ª‚łĂ‚é‚Ì‚©�H‚Å‚·‚µ�A‚»‚Ì‘¼‚É‚à‚ ‚é‚©‚à�E�E
‚Æ‚¢‚¤‚±‚Æ‚Å�i‚²‹ß�ŠPG�j‚³‚ñ‚̃}ƒNƒ�‚ðƒ‹�[ƒv‚³‚¹‚Ä�ˆ—�‚ðŠ®—¹‚µ‚½‚¢‚ÆŽv‚¢‚Ü‚·�B
ŽdŽ–�@�I—¹‚Å‚·�B
’·�X‚Æ—L“‚²‚´‚¢‚Ü‚µ‚½�B�i‚É‚�jƒyƒRƒb
‰ðŒˆ�ςłµ‚©‚à‚²‹ß�ŠPG‚³‚ñ‚̃}ƒNƒ�‚Å‚à–â‘è‚ ‚è‚Ì—l‚Å‚·‚Ì‚Å�A
Ž„‚̂Ȃñ‚©‚͔䂶‚á‚ ‚è‚Ü‚¹‚ñ‚ª�Aˆê‰ž—á‘è‚Ì•ª�i100‚©‚ç400�j‚Æ�i1‚©‚ç20�j
‚¾‚¯‚Å‚à‚â‚Á‚Ä‚¨‚«‚½‚Á‚©‚½‚Ì‚Å�A‚܂łâ‚Á‚Ă܂µ‚½�B�B
‚Å‚à�AŒ‹‹Ç�A�¡‚ÌŽ„‚̗͂ł͖³—�‚̂悤‚Å‚·�B
’x‚¢‚µ�A�¸“xˆ«‚¢‚µ�A�A‚¨—V‚тł͂±‚ꂪŒÀŠE‚©‚à‚µ‚ê‚Ü‚¹‚ñ�B�B
‚¢‚‚©�o—ˆ‚邿‚¤‚ɂȂé‚Ü‚Å�¸�i�I�¸�i�I�I‚Å‚·�B
‚µ‚©‚µ�A�A“‚¢‚Ë�A�A‚±‚ê(°°;)
‚ł͂łÍ�A”‰˜‚µ‚Å‚·‚ª�A‚¨‹–‚µ‚‚¾‚³‚¢�B�Bm(._.)m ƒyƒRƒb
Option Explicit
Dim MyDic As Object
Dim MyA As Variant
Dim MyDis As String
Dim MyStart As Long, MyEnd As Long
Sub ‚Ä‚·‚Æ()
'**********************************************
'•Ï�”‚Ì�錾
Dim MyAry() As Variant, MyAryA() As Variant
Dim i As Long, z As Long, n As Long, kk As Long
Dim MyKey As Long, x As Long, t As Long, dd As Long
Dim MyTbl As Range
Dim MySCount As Long, MyECount As Long
Dim w As Variant, ww As String
'***********************************************
Application.ScreenUpdating = False
With Worksheets("Sheet1")
Set MyTbl = .Range("A1", .Range("A65536").End(xlUp))
Set MyDic = CreateObject("Scripting.Dictionary")
'�ì‹Æ—ñ‚̃NƒŠƒA
.Range("E1").EntireColumn.ClearContents
'ƒf�[ƒ^‚ð”z—ñ‚Ɏ擾
MyA = MyTbl.Resize(, 5).Value
'ƒXƒ^�[ƒg‚̈ʒu‚ðŽæ“¾
MyStart = .Range("F1").Value
'ƒS�[ƒ‹‚̈ʒu‚ðŽæ“¾
MyEnd = .Range("G1").Value
' MySCount‚ð�‰Šú‰»
MySCount = Empty
kk = 1
Do
Do
MySCount = Application.WorksheetFunction.Count(MyTbl.Resize(, 1).Offset(, 4))
For i = kk To UBound(MyA, 1)
'ƒXƒ^�[ƒg’n“_‚¾‚Á‚½‚ç
If MyA(i, 2) = MyStart Then
'‘O�i‚·‚éƒ|ƒCƒ“ƒg‚¾‚Á‚½‚ç
If MyA(i, 2) < Val(MyA(i, 3)) Then
'ƒS�[ƒ‹‚¶‚á‚È‚©‚Á‚½‚ç
If MyA(i, 3) <> MyEnd Then
'ƒXƒ^�[ƒgƒ|ƒCƒ“ƒg
MyDis = MyA(i, 2)
'ŽŸ‚̃|ƒCƒ“ƒg
MyKey = MyA(i, 3)
'‹——£
z = MyA(i, 4)
'ŽŸ‚̃|ƒCƒ“ƒg‚Æ‹——£‚ðMySEARCH‚É“n‚µ‚Ä’T�õ
MySEARCH MyKey, z
Else 'ƒS�[ƒ‹‚¾‚Á‚½‚ç
'MyDis‚É“o˜^
MyDis = MyA(i, 2) & "," & MyA(i, 3)
x = MyA(i, 4)
'�d•¡‚µ‚Ä‚¢‚È‚©‚Á‚½‚çMyDic‚ɒljÁ
If Not MyDic.Exists(MyDis) Then
MyDic.Add MyDis, x
End If
'ƒ‹�[ƒv‚𔲂¯‚é
Exit For
End If
End If
Else 'ƒXƒ^�[ƒg’n“_‚¶‚á‚È‚©‚Á‚½‚ç
'‘O�i‚·‚éƒ|ƒCƒ“ƒg‚¾‚Á‚½‚ç
If MyA(i, 2) < Val(MyA(i, 3)) Then
'ƒS�[ƒ‹‚¶‚á‚È‚©‚Á‚½‚ç
If MyA(i, 3) <> MyEnd Then
'ƒXƒ^�[ƒgƒ|ƒCƒ“ƒg
MyDis = MyA(i, 2)
'ŽŸ‚̃|ƒCƒ“ƒg
MyKey = MyA(i, 3)
'‹——£
z = MyA(i, 4)
'ŽŸ‚̃|ƒCƒ“ƒg‚Æ‹——£‚ðMySEARCH‚É“n‚µ‚Ä’T�õ
MySEARCH MyKey, z
Else 'ƒS�[ƒ‹‚¾‚Á‚½‚ç
'MyDis‚É“o˜^
MyDis = MyA(i, 2) & "," & MyA(i, 3)
x = MyA(i, 4)
'�d•¡‚µ‚Ä‚¢‚È‚©‚Á‚½‚çMyDic‚ɒljÁ
If Not MyDic.Exists(MyDis) Then
MyDic.Add MyDis, x
End If
'ƒ‹�[ƒv‚𔲂¯‚é
Exit For
End If
End If
End If
Next
MyECount = Application.WorksheetFunction.Count(MyTbl.Resize(, 1).Offset(, 4))
Loop While MySCount < MyECount '�V‚µ‚¢ƒ‹�[ƒg‚ªŒ©‚‚©‚ç‚È‚¢‚܂Ń‹�[ƒv
'�ì‹Æ—ñ‚̃NƒŠƒA
.Range("E1").EntireColumn.ClearContents
'ƒ‹�[ƒvƒJƒEƒ“ƒ^�[‚ðUP
kk = kk + 1
Loop While kk < UBound(MyA, 1) '‚±‚±‚Ì�ðŒ�‚ð‚ä‚é‚‚·‚ê‚Α�‚‚Ȃ邪�¸“x‚Í—Ž‚¿‚é
'’T�õŒ‹‰Ê‚ðŽæ“¾
w = MyDic.Keys
For i = LBound(w) To UBound(w)
'ƒXƒ^�[ƒg‚̃|ƒCƒ“ƒg‚ðŽæ“¾
ww = Left(w(i), InStr(1, w(i), ",") - 1)
'ƒXƒ^�[ƒg‚̃|ƒCƒ“ƒg‚¶‚á‚È‚©‚Á‚½‚ç
If ww <> MyStart Then
'MyA‚Ì�ãŒÀ‚܂Ń‹�[ƒv
For n = 1 To UBound(MyA, 1)
'ƒXƒ^�[ƒg‚Ƃ‚Ȃª‚Á‚½‚çMyAry‚É‘ã“ü
If MyA(n, 2) = MyStart And MyA(n, 3) = Val(ww) Then
t = t + 1
ReDim Preserve MyAry(1 To 2, 1 To t)
MyAry(1, t) = MyA(n, 2) & "," & w(i)
MyAry(2, t) = MyA(n, 4) + MyDic(w(i))
Exit For
End If
Next
Else 'ƒXƒ^�[ƒg‚̃|ƒCƒ“ƒg‚Í‚»‚̂܂ܑã“ü
t = t + 1
ReDim Preserve MyAry(1 To 2, 1 To t)
MyAry(1, t) = w(i)
MyAry(2, t) = MyDic(w(i))
End If
Next
'�ì‹Æ—ñ‚ðƒNƒŠƒA
.Range("E1").EntireColumn.ClearContents
'”z—ñMyA‚ð—pˆÓ
ReDim MyAryA(1 To 1, 1 To 2)
'ƒf�[ƒ^‚ª‚ ‚Á‚½‚ç
If t > 0 Then
'dd‚Ƀ_ƒ~�[‚ð‘ã“ü
dd = 100000000
'MyAry‚Ì�ãŒÀ‚܂Ń‹�[ƒv
For i = LBound(MyAry, 2) To UBound(MyAry, 2)
'‘O‰ñ‚æ‚è�¬‚³‚©‚Á‚½‚ç
If MyAry(2, i) < dd Then
'�s—ñ‚ð“ü‘Ö‚¦‚ÄMyAryA‚É‘ã“ü
MyAryA(1, 1) = MyAry(1, i)
MyAryA(1, 2) = MyAry(2, i)
'dd‚ð�X�V
dd = MyAry(2, i)
End If
Next
'Œ‹‰Ê‚ðSheet2‚É�‘‚«�o‚·
With Worksheets("Sheet2")
.Cells.Clear
.Range("A1").Resize(t, 2).Value = Application.Transpose(MyAry)
.Range("C1:D1").Value = MyAryA
.Range("A1:D1").EntireColumn.AutoFit
End With
MsgBox "�Å’Zƒ‹�[ƒg‚Í" & MyAryA(1, 1) & Chr(13) & Chr(13) & _
"�Å’Z‹——£‚Í" & MyAryA(1, 2) & "‚Å‚·�B�B"
Else
MsgBox "ŒŸ�õ‚Å‚«‚Ü‚¹‚ñ‚Å‚µ‚½�B�B"
End If
End With
Application.ScreenUpdating = True
'•Ï�”‚Ì�‰Šú‰»
Erase MyA, MyAry, MyAryA, w
Set MyDic = Nothing
Set MyTbl = Nothing
End Sub
Sub MySEARCH(ByRef MyData As Long, x As Long)
Dim j As Long
For j = 1 To UBound(MyA, 1)
'�‰‚߂Ă̎Ÿ‚̃|ƒCƒ“ƒg‚¾‚Á‚½‚ç
If MyA(j, 2) = MyData And Cells(j, 5) = "" Then
MyA(j, 5) = 1
Cells(j, 5) = 1
'Œã‘Þ‚µ‚½‚烋�[ƒv‚𔲂¯‚é
If MyA(j, 2) > MyA(j, 3) Then Exit For
'‘O�i‚µ‚½‚烋�[ƒg‚ɒljÁ‚µ‚Ä‚¢‚
MyDis = MyDis & "," & MyData & "," & MyA(j, 3)
'Œ»�݂̋——£‚Ƀvƒ‰ƒX‚µ‚Ä�X�V
x = x + MyA(j, 4)
'ƒ|ƒ“ƒg‚ð�X�V
MyData = MyA(j, 3)
'�Å�I’n“_‚Ü‚Å�s‚¯‚½‚ç
If Val(MyData) = MyEnd Then
'�d•¡‚µ‚Ä‚¢‚È‚©‚Á‚½‚çMyDic‚ɒljÁ
If Not MyDic.Exists(MyDis) Then
MyDic.Add MyDis, x
End If
'ƒ‹�[ƒv‚𔲂¯‚é
Exit For
End If
End If
Next
End Sub
http://ryusendo.no-ip.com/cgi-bin/upload/src/up0250.xls
�iSoulMan�j
[ ˆê——(�Å�V�X�V�‡) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.