[ ‰‚߂Ă̕û‚Ö | ˆê——(Å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.