[[20050219161833]]@wVBA‚É‚ÄÅ’Z‹——£’Tõxi‚É‚­j@ƒy[ƒW‚ÌÅŒã‚É”ò‚Ô

[ ‰‚ß‚Ä‚Ì•û‚Ö | ˆê——(ÅVXV‡) | ‘S•¶ŒŸõ | ‰ß‹ŽƒƒO ]

@

wVBA‚É‚ÄÅ’Z‹——£’Tõxi‚É‚­j
ƒV[ƒg‚É

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


@ì–삳‚ñ@•Ô“š‚ ‚肪‚Æ‚¤‚²‚´‚¢‚Ü‚·
@à–¾‚ªˆ«‚©‚Á‚½‚悤‚Å‚·B

@ŠÈ’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

‘‘¬ŽŽ‚µ‚ÄŒ©‚Ü‚µ‚½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‚µ‚¢

i‚²‹ßŠPGj‚³‚ñAiSoulManj‚³‚ñA@‰ñ“š‚ ‚肪‚Æ‚¤‚²‚´‚¢‚Ü‚·B

‚ ‚Ü‚¦‚‚¢‚Å‚É‚à‚¤ˆê‚‚¨Šè‚¢‚µ‚½‚¢‚ñ‚Å‚·‚ª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


ƒRƒƒ“ƒg•ÔMF

[ ˆê——(ÅVXV‡) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.