[ ‰‚ß‚Ä‚Ì•û‚Ö | ˆê——(ÅVXV‡) | ‘S•¶ŒŸõ | ‰ß‹ŽƒƒO ]
@
wVBA‚É‚ÄÅ’Z‹——£’Tõxi‚É‚j
A—ñiƒf[ƒ^”j@‚a—ñi”Ô’nj@‚b—ñi”Ô’nj@‚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ì–숼‘¾˜Yj
@ŠÈ’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
@‚æ‚낵‚‚¨Šè‚¢‚µ‚Ü‚·Bi‚É‚j
à–¾‚ªˆ«‚¢‚ÆŒ¾‚¤‚©A‚±‚ê‚Í‚à‚¤ŽdŽ–“I‚Șb‚¾‚ÆŽv‚Á‚½B ‹»–¡‚Í‚ ‚Á‚½‚Ì‚ÅŽ©•ª‚È‚è‚Ì•û–@‚ð–Íõcc’ñŽ¦‚³‚ꂽƒ}ƒNƒ‚ɂ‚¢‚Ä‚ÍA‚ ‚܂茩‚Ä‚Ü‚¹‚ñBŽ¸—çB ‚±‚ÌŽè‚̈—‚ÍÄ‹A‚·‚é‚ƃVƒ“ƒvƒ‹‚É‚È‚é‰Â”\«‚ ‚èA‚Á‚ÄŽ–‚ÅŽQl‚É‚Å‚à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 & "ƒ‹[ƒgF" & 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 'ʼn‚̃‹[ƒ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Ä‹Aj 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‚Ä‚±‚Æ‚Å“Š‚°‚邾‚¯“Š‚°cc i‚²‹ßŠPGjƒ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ƒ€‚ðŽQl‚É‚ª‚ñ‚΂Á‚ÄŒ©‚Ü‚·B(‚É‚j
‚µ‹»–¡‚ª‚ ‚é‚Ì‚ÅA ·‚µŽx‚¦‚È‚¯‚ê‚΂»‚̃|ƒCƒ“ƒg”20ƒ|ƒCƒ“ƒg‚̃f[ƒ^‚ð‘‚¢‚ÄŒ©‚Ä‚à‚炦‚Ü‚·‚©cc ‚¢‚âA‰ñ“š‚Å‚«‚é•Ûá‚Í–³‚¢‚ñ‚Å‚·‚ªAƒ‹[ƒv‚©‚甲‚¯‚È‚¢‚ÆŒ¾‚¤‚Ì‚ª‹C‚É‚È‚é‚Ì‚ÅB i‚²‹ßŠPGj–³Ž‹‚µ‚Ä‚‚ê‚Ä‚à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‚Æcc1000Œ‚ÅŽŽ‚µ‚½‚肵‚Ä‚È‚¢‚̂Ń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 & "ƒ‹[ƒgF" & 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 'ʼn‚̃‹[ƒ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Ä‹Aj 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
’Ç‹LF ƒf[ƒ^‚Ì•À‚Ñ‹K‘¥‚ðƒ‹[ƒ`ƒ“‚ɉÁ–¡‚·‚ê‚ÎA‚à‚¤‚¿‚å‚Á‚ÆŒy‚‚È‚écc‚Æ‚ÍŽv‚¤‚¯‚ÇA‚»‚±‚Ü‚Å‚Í‚¿‚å‚Á‚ƃLƒcƒCB i‚²‹ßŠPGj
>•¶ŒnƒvƒƒOƒ‰ƒ}‚ÈŽ©•ª‚Í‹êŽè‚Å‚·B ‚»‚¤‚È‚ñ‚¾`B —Œnog‚Å‚à‚¨—V‚уvƒƒOƒ‰ƒ}‚ÌŽ„‚É‚ÍÄ‹AƒƒWƒbƒN‚ðl‚¦‚é”]‚Ý‚»‚Í‚ ‚è‚Ü‚¹‚Ê¥¥¥@ ‚Æ‚±‚ë‚Å‘ÎÛƒf[ƒ^‚Ìd•¡‚Í휂µ‚½‚ç‚Ü‚¸‚¢‚Ì‚©‚ÈEE (INA)
‚¨•×‹‚Í—Œn‚Ì•û‚¾‚Á‚½‚ñ‚Å‚·‚ªAŒü‚¢‚Ä‚È‚©‚Á‚½‚©‚àB “ª‚Ì’†‚Í•¶Œn‚Á‚Û‚¢‚È‚Ÿ‚ÆŒÂl“I‚ÉŽv‚Á‚Ä‚½‚èB‚Ç‚¤‚à•¶Í“I‚ȃR[ƒh‚É‚È‚éB
Ž„“IƒCƒ[ƒW •¶ŒnPGu‚±‚ꂪ‚±‚¤‚¾‚Á‚½‚ç‚ [‚µ‚ÄA‚»‚¤‚Å‚È‚©‚Á‚½‚炱‚¤‚µ‚ÄAŒ‹‰Ê‚Ç‚¤‚È‚Á‚½‚©‚ð•Ô‚µ‚È‚³‚¢v —ŒnPGu‚P‚Æ‚Q‚Å‚Rv
‚Á‚Ä‚¢‚¤Š´‚¶Hi‚È‚ñ‚¾‚»‚è‚áj ƒR[ƒfƒBƒ“ƒO—Ê‚ÆŒ¾‚¤–Ê‚Æ‚©‚ÌŒø—¦‚ªˆ«‚¢‚Ý‚½‚¢‚ÈB ‚Ç‚¿‚炪—Ç‚¢‚Á‚Ä–ó‚Å‚à‚È‚¢‚¯‚ÇB
’Ç‹LF d•¡‚Í‹tˆø‚«‚Å‚«‚é‚Á‚ÄŽ–‚Å—pˆÓ‚µ‚Ä‚é‚Ì‚©‚µ‚ç‚ÆB20¨1‚Å‚à“¯‚¶ƒ‹[ƒ`ƒ“‚Å’T‚¹‚éB B—ñ‚ª‚«‚ê‚¢‚É•À‚ñ‚Å‚¢‚é‘O’ñ‚Ål‚¦‚é‚È‚ç‚Î Excel‹@”\‚ÅMatch‚¾‚©‚ð‚©‚Ü‚µ‚ăXƒ^[ƒgˆÊ’uŽæ“¾Aˆá‚¤’l‚É‚È‚Á‚½‚甲‚¯‚éB ‚Á‚Ä‚·‚邾‚¯‚Å‘Š“–‚ÉŒy‚‚È‚é‚Æ‚ÍŽv‚¤B i‚²‹ßŠPGjSQL‚Åwhere‚©‚Ü‚µ‚Ä•K—v‚È•”ˆÊ‚¾‚¯Œ©‚é‚悤‚ȃCƒ[ƒW
Ž©ŒÈ–ž‘«XVƒAƒbƒvB B—ñ‚Ì’l‚ª“¯’l‚Å‚Ü‚Æ‚Ü‚Á‚Ä‚¢‚鎖‚ð‘O’ñ‚Æ‚µ‚ÄAˆ—‘¬“x‰ü‘P‚ð}‚Á‚½•¨‚Å‚·B ‘Oq‚Ì‚à‚Ì‚Íu‘Sƒ|ƒCƒ“ƒgs”v‚É‘½‘å‚ɉe‹¿‚ðŽó‚¯‚éì‚è‚Å‚µ‚½‚ªA ¡‰ñ‚Ì‚à‚Ì‚Íu1ƒ|ƒCƒ“ƒg“–‚½‚è‚Ìs”v‚ɉe‹¿‚ðŽó‚¯‚éì‚è‚Å‚·B ‚±‚ê‚É‚æ‚è20ƒ|ƒCƒ“ƒg•ª‚̃f[ƒ^‚¾‚낤‚ªA1000ƒ|ƒCƒ“ƒg•ª‚̃f[ƒ^‚¾‚낤‚ªA i‚·‚È‚í‚¿1ƒ|ƒCƒ“ƒg“–‚½‚è4s’ö‚Æl‚¦‚½ê‡A20ƒ|ƒCƒ“ƒg‚Å80sA1000ƒ|ƒCƒ“ƒg‚Å4000s‚̃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ˆµ‚¢cc“à—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ƒ‹[ƒgF" & 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 'ʼn‚̃‹[ƒ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Ä‹Aj 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‚²‹ßŠPGjƒƒWƒbƒNŽ©‘Ì‚Ì–³‘Ê‚Æ‚©Œ©’¼‚µ‚Í‚µ‚Ä‚È‚¢
–^A‘åã‚Ì‘åŠwŒoÏŠw•”ŒoÏŠw‰È‘²‚΂è‚΂è‚Ì•¶‰»Œn ‚¨—V‚ÑPGAA•Ê–¼uƒ}ƒNƒ‚Ì‹L˜^‰¤vBBBB ‚¿‚å‚Á‚ÆAì‚Á‚Ä‚Ý‚Ü‚µ‚½BBB ‚Å‚àA‚ ‚Á‚Ä‚é‚©‚Ç‚¤‚©‚í‚©‚è‚Ü‚¹‚ñB ‚±‚êˆÈã‚ð‹‚ß‚ç‚ê‚Ä‚à‚¨•ÔŽ–o—ˆ‚é‚©‚Ç‚¤‚©‚í‚©‚è‚Ü‚¹‚ñB ’P‚Ȃ鎩ŒÈ–ž‘«‚Å‚·BBB ‘肵‚ÄAAAuŽ„‚È‚çAA•Î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‚ðXV 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(=¿_¿=)vBBB" Else MsgBox "’Tõo—ˆ‚Ü‚¹‚ñ‚Å‚µ‚½BB" 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 '‘Oi‚µ‚½‚ç If MyB(j, 2) > Val(MyData) Then MyDis = MyDis & ":" & MyData & ":" & MyB(j, 2) 'Œ»Ý‚Ì‹——£‚Ƀvƒ‰ƒX‚µ‚ÄXV x = x + MyB(j, 3) 'ƒ|ƒ“ƒg‚ðXV MyData = MyB(j, 2) 'ÅI’n“_‚Ü‚Ås‚¯‚½‚ç If Val(MyData) = MyMax Then 'ƒJƒEƒ“ƒ^[‚ÌXV 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[ƒ^‚ð‰ü‚´‚ñ‚µ‚Ä‚Ü‚µ‚½BiP PGjII ‚¨‘›‚ª‚¹‚µ‚Ü‚µ‚½Bm(._.)m ƒyƒRƒb ‚ ‚è‚áA‚æ‚Œ©‚½‚çABCD—ñ‚Å‚·‚©‚ŸAAAA—ñ‚͔Ԇ‚¾‚¯‚¾‚©‚çŠÖŒW‚È‚¢‚ñ‚Å‚µ‚åH Ž„‚ÍABC‚µ‚©‚Ý‚Ä‚Ü‚¹‚ñ‚Ì‚Å BCD—ñ‚É‚µ‚½‚¢Žž‚ÍA‚¨•ª‚©‚è‚Å‚µ‚傤‚¯‚ÇAA«‚±‚ê‚ð Set MyTbl = .Range("A1", .Range("A65536").End(xlUp)) ‚±‚ê‚É« Set MyTbl = .Range("B1", .Range("B65536").End(xlUp)) ‚É•ÏX‚µ‚Ä‚‚¾‚³‚¢B‚Å‚Í‚Å‚ÍA‚¨‚â‚·‚Ý‚È‚³‚¢zzzzzzzz iSoulManj
Ž©•ª‚à‚¿‚å‚ë‚è‚Æ•â‘«‚µ‚Ă݂悤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‚ð 8iƒXƒ^[ƒgˆÊ’uj @F1‚ð16iƒGƒ“ƒhˆÊ’uj @G1‚ð 5iŠK‘wj ‚·‚é‚ÆAˆÈ‰º‚̂悤‚ÈŒ‹‰Ê‚ð•Ô‚·B @ƒqƒbƒg”@F35 @Å’Zƒ‹[ƒgF35,55,51 @‹——£@@@F12 @ ‚±‚ê‚ÌŒ©•û‚ÍA8‚©‚ç16‚ÖŒü‚©‚¤ƒ‹[ƒg‚ª5ŠK‘w‚Ü‚Å‚ÅŒ©‚½‚Æ‚«‚É35ƒpƒ^[ƒ“‚ ‚èA ‚»‚Ì“¹‹Ø‚Ì’†‚ÅA—ñ‚ª @35‚̃f[ƒ^i 8¨13,‹——£6j @55‚̃f[ƒ^i13¨12,‹——£3j @51‚̃f[ƒ^i12¨16,‹——£3j ‚Æ‚¢‚Á‚½“¹‹Ø‚ð’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ƒ‹[ƒgF2,17,30,52 @‹——£@@@F20 5ŠK‘w‚ÅŒ©‚½‚Æ‚«‚É @ƒqƒbƒg”@F9 @Å’Zƒ‹[ƒgF1,7,17,30,52 @‹——£@@@F18 8ŠK‘w‚ÅŒ©‚½‚Æ‚«‚É‚à @ƒqƒbƒg”@F1094 @Å’Zƒ‹[ƒgF1,7,17,30,52 @‹——£@@@F18 ‚ÆŒ¾‚Á‚½Œ‹‰Ê‚Æ‚È‚è‚Ü‚µ‚½B ‘‚«Š·‚¦‚é‚Æ @1¨2¨4¨7¨12¨20 ‚©‚ÈB SoulMan‚³‚ñ‚̃}ƒNƒ‚àÚׂɌ©‚½‚¢‚¯‚Ç–°‚¢cc i‚²‹ßŠPGj•‚¿‚ÆÅ‹ß–Z‚µ‚¢
‚ ‚Ü‚¦‚‚¢‚Å‚É‚à‚¤ˆê‚‚¨Šè‚¢‚µ‚½‚¢‚ñ‚Å‚·‚ªA
‚È‚É‚ð‚â‚肽‚¢‚©‚ÆŒ¾‚¤‚ÆA‚ ‚éHê‚©‚ç‚·‚ׂẴ|ƒCƒ“ƒg‚ւ̉^’À‹——£•\
‚ð쬂µ‚½‚¢‚킯‚È‚ñ‚Å‚·B‚Å‚·‚©‚çƒXƒ^[ƒg’n“_‚ð“o˜^‚µ‚Ä
ƒXƒ^[ƒg’n“_‚æ‚è‚·‚ׂẴ|ƒCƒ“ƒg‚Ö‚ÌÅ’Z‹——£‹y‚шê‚‘O‚̃|ƒCƒ“ƒg‚ª
‹L‚³‚ꂽ•\‚ð쬂µ‚½‚¢‚Ì‚Å‚·‚ªEEEB
–³Ž‹‚µ‚Ä‚‚ê‚Ä‚àok‚Å‚·BŠÃ‚¦‚·‚¬‚©‚àHi‚É‚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ƒ“ƒgv‚ɂ‚¢‚Ä‚ÍAƒqƒbƒg‚µ‚½ÅŒã‚Ìꊂ̃f[ƒ^‚ðŒ©‚ê‚Εª‚©‚é‚Í‚¸‚Å‚·B ‚»‚ê‚Í—eˆÕ‚Ɏ擾o—ˆ‚é‚Å‚µ‚傤B i‚²‹ßŠPGj‚ÆŒ¾‚¤‚±‚Æ‚Å
„‚à‚µŽ©•ª’ñŽ¦‚Ìã‹Lƒ}ƒNƒ‚Ì“®ìŒ‹‰Ê‚É–â‘肪–³‚¢‚ÆŽv‚í‚ê‚é‚È‚ç‚ÎA‚»‚ê‚ðŒ³‚É‰ü—Ç‚µ‚Ä‚Ý‚éB
–â‘è‚ ‚è‚Å‚·B‹——£‚ª“¯ˆê‚ÌŽž‚̈—‚ªo—ˆ‚Ä‚¢‚È‚¢‚µA
Å’Z‹——£‚ªXV‚³‚ꂽŽž‚ÉA‚»‚Ì‘¼‚̃|ƒCƒ“ƒg‚ð‚¢‚Á‚½‚¢‚Ç‚±‚Ü‚Å
‘k‚Á‚ÄC³‚·‚ê‚ÎA³Šm‚È’l‚ª‚Å‚Ä‚‚é‚Ì‚©H‚Å‚·‚µA‚»‚Ì‘¼‚É‚à‚ ‚é‚©‚àEE
‚Æ‚¢‚¤‚±‚Æ‚Åi‚²‹ßŠPGj‚³‚ñ‚̃}ƒNƒ‚ðƒ‹[ƒv‚³‚¹‚Ĉ—‚ðŠ®—¹‚µ‚½‚¢‚ÆŽv‚¢‚Ü‚·B
ŽdŽ–@I—¹‚Å‚·B
’·X‚Æ—L“‚²‚´‚¢‚Ü‚µ‚½Bi‚É‚jƒyƒRƒb
‰ðŒˆÏ‚Å‚µ‚©‚à‚²‹ßŠPG‚³‚ñ‚̃}ƒNƒ‚Å‚à–â‘è‚ ‚è‚Ì—l‚Å‚·‚Ì‚ÅA Ž„‚Ì‚È‚ñ‚©‚͔䂶‚á‚ ‚è‚Ü‚¹‚ñ‚ªAˆê‰ž—á‘è‚Ì•ªi100‚©‚ç400j‚Æi1‚©‚ç20j ‚¾‚¯‚Å‚à‚â‚Á‚Ä‚¨‚«‚½‚Á‚©‚½‚Ì‚ÅA‚Ü‚Å‚â‚Á‚Ä‚Ü‚µ‚½BB ‚Å‚àAŒ‹‹ÇA¡‚ÌŽ„‚Ì—Í‚Å‚Í–³—‚̂悤‚Å‚·B ’x‚¢‚µA¸“xˆ«‚¢‚µAA‚¨—V‚Ñ‚Å‚Í‚±‚ꂪŒÀŠE‚©‚à‚µ‚ê‚Ü‚¹‚ñBB ‚¢‚‚©o—ˆ‚é‚悤‚É‚È‚é‚܂ŸiI¸iII‚Å‚·B ‚µ‚©‚µAA“‚¢‚ËAA‚±‚ê(°°;) ‚Å‚Í‚Å‚ÍA”‰˜‚µ‚Å‚·‚ªA‚¨‹–‚µ‚‚¾‚³‚¢BBm(._.)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 '‘Oi‚·‚éƒ|ƒ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“_‚¶‚á‚È‚©‚Á‚½‚ç '‘Oi‚·‚éƒ|ƒ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‚ðXV 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) & "‚Å‚·BB" Else MsgBox "ŒŸõ‚Å‚«‚Ü‚¹‚ñ‚Å‚µ‚½BB" 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 '‘Oi‚µ‚½‚烋[ƒg‚ɒljÁ‚µ‚Ä‚¢‚ MyDis = MyDis & "," & MyData & "," & MyA(j, 3) 'Œ»Ý‚Ì‹——£‚Ƀvƒ‰ƒX‚µ‚ÄXV x = x + MyA(j, 4) 'ƒ|ƒ“ƒg‚ðXV 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 iSoulManj
[ ˆê——(ÅVXV‡) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.