[ ‰‚߂Ă̕û‚Ö | ˆê——(ÅVXV‡) | ‘S•¶ŒŸõ | ‰ß‹ŽƒƒO ]
@
w•¡”ðŒ‚ÅŒŸõxi‚¦‚éj
‘•’u–¼ ‘•’u–¼Ú× ‘•’u“‹Ú•” “‹Ú•”‚ÌÚ×Êß°Â Êß°ÂŒ^Ž® Ê߰ƒR[ƒh
A1†‹@ A1†‹@i001j ƒoƒbƒN•” X޲ƒlƒW DDD 111 Y޲ƒ|[ƒ‹ EEE 222 ƒtƒƒ“ƒg•” Z޲ SSS 333 ƒÆŽ² LLL 444
A1†‹@i002j ƒoƒbƒN•” X޲ƒlƒW DD1 112 Y޲ƒ|[ƒ‹ EEE 222 ƒtƒƒ“ƒg•” Z޲ SS2 334 ƒÆŽ² WWW 0 ƒTƒCƒh•” ÄÞײÊÞ PPP 555
B1†‹@ B1†‹@i001j ƒ‰ƒCƒg•” ƒ‰ƒCƒg RRR 999 ƒtƒƒ“ƒg•” Z޲ SSS 333 ƒTƒCƒh•” ÄÞײÊÞ PPP 555 ƒwƒbƒh•” ƒ‚[ƒ^[ MMM 777 B1†‹@i002j ƒoƒbƒN•” X޲ƒlƒW DD1 112 Y޲ƒ|[ƒ‹ EE2 223
ƒtƒƒ“ƒg•” Z޲ SS1 331 ID•” Šî” KKK 888 B1†‹@i003j ƒ‰ƒCƒg•” ƒ‰ƒCƒg RR1 991
C1†‹@ C1†‹@i001j ƒ‰ƒCƒg•” ƒ‰ƒCƒg RRR 999 C1†‹@i002j ƒ‰ƒCƒg•” ƒ‰ƒCƒg RR1 991 C1†‹@i003j ƒoƒbƒN•” X޲ƒlƒW DD1 112 ƒtƒƒ“ƒg•” Z޲ SS1 331 C1†‹@i004j ƒoƒbƒN•” X޲ƒlƒW DDD 111 ƒtƒƒ“ƒg•” Z޲ SSS 333
‚¦‚邯\‚µ‚Ü‚·B‚Ü‚½A‰ïŽÐ‚Å¢‚Á‚½Ž–‚ɂȂÁ‚Ä‚µ‚Ü‚¢‚Ü‚µ‚½BB FXA‚±‚±‚ÌŒfަ”‚ÅA•׋‚³‚¹‚Ä‚à‚ç‚Á‚Ä‚¢‚é‚̂ł·‚ªA’†X‚¤‚Ü‚Žg‚¤‚±‚Æ‚ª ‚Å‚«‚¸A—Í‚ð‘Ý‚µ‚Ä‚¢‚½‚¾‚¯‚Ü‚¹‚ñ‚Å‚µ‚傤‚©EEE A—ñ‚̂悤‚È‘•’u‚ª‚ ‚èA‚»‚Ì‘•’u‚É‚ÍA‹q悲‚Ƃɕ”•i‚ð‚©‚¦‚½ ‰º‚R¹À‚Ì”Žš‚ª‚‚¢‚Ä‚¢‚Ü‚·B “‹Ú•”‚ÍA‰º‚R¹À‚ÉŠÖ‚í‚炸A—ñ‚Ì‘•’u‚É‚æ‚Á‚ÄA‚Ù‚ÚŒˆ‚Ü‚Á‚Ä‚¢‚Ü‚·B “‹Ú•”‚ÉŽg‚í‚ê‚éÊ߰‚àA‚Ù‚ÚŒˆ‚Ü‚Á‚Ä‚¢‚Ü‚·B ‚Å‚·‚ªAÊ߰‚̃R[ƒh‚ÍAFX•Ï‚í‚Á‚Ä‚«‚Ü‚·B ãŽi‚ª‚¢‚¤‚É‚ÍA—Ⴆ‚ÎAA1†‹@‚Ì002‚̃tƒƒ“ƒg•”‚ÌÊ߰ƒR[ƒh‚ª’m‚肽‚¢‚Æ ‚È‚Á‚½‚Æ‚«‚ÉA‚³‚Á‚ÆŒŸõ‚Å‚«‚邿‚¤‚É‚µ‚½‚¢‚Æ‚¢‚¤‚̂ł·‚ªA ‘O‰ñ‹³‚¦‚Ä‚¢‚½‚¾‚¢‚½“ü—Í‹K‘¥‚ÌƒŠƒXƒg‚ÅAA1†‹@‚ð‘I‘ð¨001`002‚ª‚Å‚Ä 001‚ð‘I‘ð‚·‚é‚ÆAƒoƒbƒN•”ƒtƒƒ“ƒg•”‚ª‘I‚ׂÄ`EEE‚Æ‚¢‚¤‚Ì‚ªŽv‚¢•‚‚©‚ñ‚¾‚̂ł·‚ªA ‚»‚ñ‚È‚¢‚‚‚à‘I‘ð‚Å‚«‚È‚¢‚悤‚Å‚µ‚½BBB ‰½‚©A‘¼‚ÉA‚¢‚¢•û–@‚Í‚ ‚è‚Ü‚¹‚ñ‚Å‚µ‚傤‚©EEEH ’·X‚Æ‚·‚¢‚Ü‚¹‚ñAA‹X‚µ‚‚¨Šè‚¢‚¢‚½‚µ‚Ü‚·BB
vbaˆ—‚̈ê—á:
Sheet1‚ÉƒŠƒXƒg‚ª‚ ‚èAˆês–Ú‚Í—ñŒ©o‚µ...
ƒR[ƒh‚ð“\‚è•t‚¯‚½‚çAˆê“x‘¼‚̃V[ƒg‚ðƒNƒŠƒbƒN‚µ‚Ä‚à‚¤ˆê“xŠY“–ƒV[ƒg‚É–ß‚éB
ŠY“–ƒV[ƒg‚ÌSheet module‚ÖF
Private dic1 As Object, dic2 As Object
Private Sub Worksheet_Activate() Dim a, i As Long, n As Integer Set dic1 = CreateObject("Scripting.Dictionary") Set dic2 = CreateObject("Scripting.dictionary") dic1.CompareMode = vbTextCompare dic2.CompareMode = vbTextCompare a = Sheets("Sheet1").UsedRange.Resize(,6).Value For i = 2 To UBound(a,1) If Not IsEmpty(a(i,2)) Then dic1.add a(i,2), a(i,3) z = a(i,2) & ";" & a(i,3) dic2.add z, a(i,4) n = 1 Do While IsEmpty(a(i + n, 2)) If IsEmpty(a(i + n, 3)) Then If Not IsEmpty(a(i + n, 4)) Then dic2(z) = dic2(z) & "," & a(i + n, 4) End If Else dic1(a(i,2)) = dic1(a(i,2)) & "," & a(i + n, 3) z = a(i,2) & ";" & a(i + n, 3) dic2.add z, a(i + n, 4) End If n = n + 1 If i + n > UBound(a,1) Then Exit Do Loop End If Next Erase a With Range("a1") .Value = "" With .Validation .Delete .Add type:=xlValidateList, formula1:=Join(dic1.keys,",") End With .Select End With End Sub
Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False If Target.Address(0,0) = "A1" And Not IsEmpty(Target) Then With Range("b1") .Value = "" With .Validation .Delete .Add type:=xlValidateList, formula1:=dic1(Target.Value) End With .Select End With ElseIf Target.Address(0,0) = "B1" And WorksheetFunction.CountA(Range("a1:b1"))=2 Then With Range("c1") .Value = "" With .Validation .Delete .Add type:=xlValidateList, _ formula1:=dic2(Range("a1").Value & ";" & Range("b1").Value) End With .Select End With End If Application.EnableEvents = True End Sub (seiya)
‚²‹³ŽöA‚ ‚肪‚Æ‚¤‚²‚´‚¢‚Ü‚·II
‚·‚¢‚Ü‚¹‚ñAŽ„‚É‚ÍAVBA‚Ì’mޝ‚ª‚ ‚Ü‚è‚È‚¢‚Ì‚ÅAFXŽŽ‚µ‚Ă݂͂½‚̂ł·‚ªA
„ƒR[ƒh‚ð“\‚è•t‚¯‚½‚çAˆê“x‘¼‚̃V[ƒg‚ðƒNƒŠƒbƒN‚µ‚Ä‚à‚¤ˆê“xŠY“–ƒV[ƒg‚É–ß‚éB
‚Æ‚¢‚¤‚Ì‚ÍAÃÞ°À‚Ì“ü‚Á‚Ä‚¢‚éSheet1‚ÉA—Ⴆ‚ÎA‚P‚P‚P‚Æ‚¢‚¤ƒR[ƒh‚ðA1‚É“ü—ÍŒãASheet‚Q‚ɈڂèA‚Ü‚½Sheet1‚É–ß‚èAÃÞ°À‚ÌVBA‚ðŠJ‚¢‚ÄA‘g‚ñ‚Å‚¢‚½‚¾‚¢‚½VBAƒvƒƒOƒ‰ƒ€‚ð
ƒRƒsƒy‚Å‚¢‚¢‚̂łµ‚傤‚©EEEH
‰SŽÒ‚È‚à‚Ì‚ÅA–{“–‚É‚·‚¢‚Ü‚¹‚ñBB
1) •\ަ‚³‚¹‚éƒV[ƒg(Sheet1ˆÈŠO)‚̃V[ƒgƒ^ƒu‚ð‰EƒNƒŠƒbƒN -> [ƒR[ƒh‚Ì•\ަ] 2) ƒR[ƒh‚ð“\‚è•t‚¯A x ‚ðƒNƒŠƒbƒN‚µ‚ăGƒNƒZƒ‹‚É–ß‚é 3) ˆê“xƒR[ƒh‚ð“\‚è•t‚¯‚½ƒV[ƒgˆÈŠO‚ð‘I‘ð‚µ‚Ä‚©‚çAƒR[ƒh‚ð“\‚è•t‚¯‚½ƒV[ƒg‚ð‘I‘ð
‚Æ‚¢‚¤ˆÓ–¡‚Å‚·B ŽÀÛ‚ÉŒŸØ‚µ‚Ă܂¹‚ñ‚Ì‚ÅAƒGƒ‰[‚ªo‚é‚©‚à‚µ‚ê‚Ü‚¹‚ñB ƒGƒ‰[‚ªo‚½‚çAÚ‚µ‚‚¨’m‚点‚‚¾‚³‚¢B@(seiya)
‚±‚ñ‚ÈŠ´‚¶‚Å‘S‚Ä‚Ìs‚ð–„‚ß‚Ä ‘•’u–¼ ‘•’u–¼Ú× ‘•’u“‹Ú•” “‹Ú•”‚Ì Êß°ÂŒ^Ž® Ê߰ƒR[ƒh Ú×Êß°Â A1†‹@ A1†‹@i001j ƒoƒbƒN•”@ X޲ƒlƒW DDD 111 A1†‹@ A1†‹@i001j ƒoƒbƒN•”@ Y޲ƒ|[ƒ‹ EEE 222 A1†‹@ A1†‹@i001j ƒtƒƒ“ƒg•” Z޲ SSS 333 A1†‹@ A1†‹@i001j ƒtƒƒ“ƒg•” ƒÆŽ² LLL 444 ƒI[ƒgƒtƒBƒ‹ƒ^‚Åi‚螂݂½‚¢€–Ú‚ði‚èž‚Þ
EEE‚Æ‚©‚ł̓_ƒ‚È‚ñ‚Å‚·‚©‚ËH
Œ”‚É‚æ‚Á‚Ä‚Í [[20040925171636]]wƒI[ƒgƒtƒBƒ‹ƒ^[F1000s‚®‚ç‚¢‚µ‚©•\ަ‚µ‚Ü‚¹‚ñxi’†“‡j ‚±‚ñ‚ÈŽ–‚à‚ ‚é‚̂ŒˆÓ‚ª•K—v‚Å‚·‚ªB
(HANA)
HANA‚³‚ñ
‚²ˆÓŒ©‚ ‚肪‚Æ‚¤‚²‚´‚¢‚Ü‚·I
ƒI[ƒgƒtƒBƒ‹ƒ^‚¾‚ÆAÊß°ÂŒ^Ž®‚ÅŒŸõ‚µ‚½‚¢‚Æ‚«‚ÉAŽÀÛ‚ÌŒ^Ž®‚Í•¶Žš”‚ª‘½‚AƒAƒ‹ƒtƒ@ƒxƒbƒg”Žš‚Ì‚PŽšˆá‚¢‚Ȃǂ ‚Á‚ÄAŒŸõ‚ðŠÔˆá‚¦‚Ä‚µ‚Ü‚¤“™A‚µŽg‚¢‚Â炢‚悤‚È‹C‚à‚µ‚½‚肵‚Ä‚¢‚Ü‚µ‚ÄEEE
dic(i,2) & "," & a(i + n, 3) ‚Í dic1(i,2) & .... ‚Å‚· ƒR[ƒh‚ðC³‚µ‚Ä‚¨‚«‚Ü‚µ‚½‚Ì‚ÅA‚à‚¤ˆê“xƒRƒs[‚µ‚È‚¨‚µ‚Ä‚‚¾‚³‚¢@(seiya)
‰ðŒˆ‚µ‚»‚¤‚Å—Ç‚©‚Á‚½‚Å‚·‚ËB @‚»‚Ì‚ ‚ƂŎ„‚̃vƒƒOƒ‰ƒ€‚à“Še‚µ‚Ă݂½‚¢‚ÆŽv‚¢‚Ü‚·B @ƒ}ƒNƒ‚ł͂Ȃ¢Aƒx[ƒVƒbƒNƒvƒƒOƒ‰ƒ€‚ÌŽQl‚ɂłà‚È‚ê‚΂Ǝv‚¢‚Ü‚·B @‹C‚ªŒü‚¢‚½‚犮Œ‹Œã‚àƒƒbƒ`‚µ‚Ä‚‚¾‚³‚¢B @imr_mangoosj
ŽÀsŽžƒGƒ‰['450'
ˆø”‚Ì”‚ªˆê’v‚µ‚Ä‚¢‚Ü‚¹‚ñB‚Ü‚½‚Í•s³‚ȃvƒƒpƒeƒB‚ðŽw’肵‚Ä‚¢‚Ü‚·B
‚Æ‚¢‚¤ºÏÝÄÞ‚ªŠJ‚‚̂ł·‚ªEEE‚»‚ê‚ðÃÞÊÞ¯¸‚Å”²‚¯‚邯A
dic1(a(i, 2)) = dic1(i, 2) & "," & a(i + n, 3)
‚ªˆê—ñA‰©F‚ƒ}[ƒJ[‚³‚ꂽ‚悤‚È•\ަ‚łłĂ‚é‚̂ł·BBB
‚·‚݂܂¹‚ñA‚Æ‚Á‚Ä‚àŠÔ”²‚¯‚È‚±‚Æ‚ð‚µ‚Ä‚¢‚Ü‚·B dic1(a(i,2)) ‚Å‚·B@ƒR[ƒhC³Ï‚Ý@(seiya)
VBA‚Å‚³‚ê‚Ä‚¢‚é‚Ì‚ÉA‚·‚݂܂¹‚ñ`BB ”Ž®ˆÄ‚Å`‚·B •K—v‚È‚¯‚ê‚Ζ³Ž‹‚µ‚Ä‚‚¾‚³‚¢B
sheet1‚̃f[ƒ^s‚ª‚í‚©‚è‚Ü‚¹‚ñ‚̂Š1‚‚̎®‚Å‚ào—ˆ‚Ü‚·‚¯‚ê‚ÇAƒf[ƒ^s‚ª‘½‚¢‚Æ d‚‚È‚è‚Ü‚·‚Ì‚ÅAì‹Æ—ñ‚ðŽg‚¤•û–@‚Å‚·B
šƒf[ƒ^ƒV[ƒg–¼@sheet1 sheet1‚Ö
*ì‹Æ—ñ‚»‚Ì‚P¨H—ñ H2: =IF(COUNTA(D2:F2)<3,"",INDEX(B:B,MATCH("[",$B$2:B2)+1)&INDEX(C:C,MATCH ("[",$C$2:C2)+1))
*ì‹Æ—ñ‚»‚Ì‚Q¨I—ñ I2: =IF(H2=Sheet2!$A$2&"†‹@("&Sheet2!$B$2&")"&Sheet2!$C$2&"•”",ROW(),"")
‚»‚ꂼ‚ꉺ‚ɃRƒs[‚µ‚Ü‚·B ‚±‚Ìì‹Æ—ñ‚ÍA”ñ•\ަ‚É‚µ‚Ä‚à‚¢‚¢‚Å‚·‚ËBBB
š’ŠoƒV[ƒg–¼@sheet2@«
@@@‚`@@@@‚a@@@@@‚b@@@@@@@@‚c ‚P@‘•’u–¼@@‘•’u–¼@@Úב•’u“‹Ú•”@@Ê߰ƒR[ƒh ‚Q@@A1@@@@002@@@@ƒtƒƒ“ƒg@@@@@334 ‚R@@@@@@@@@@@@@@@@@@@@@@0
‚±‚ñ‚ÈŠ´‚¶‚ÉA2`C2‚Ö“ü—Í‚µ‚Ü‚·B (B2ƒZƒ‹‚ÍA‘Ž®¨•¶Žš—ñ) ‚±‚Ì“ü—͓͂ü—Í‹K‘¥‚ðŽg‚Á‚Ä‚à‚¢‚¢‚Å‚·‚ËB D3‚Ì@0 ‚ÍA—á‘è‚Ì•\‚Å@0 ‚ɂȂÁ‚Ä‚¢‚Ü‚µ‚½‚Ì‚ÅB
Ž®‚ÍA D2: =IF(COUNT(Sheet1!$I:$I)<ROW(A1),"",INDEX(Sheet1!$F:$F,SMALL(Sheet1! $I:$I,ROW(A1))))
‰º‚ɃRƒs[‚µ‚Ü‚·B
‚²ŽQl‚ɂǂ¤‚¼`BBBB
BBBB(Ms.in)‚Å‚µ‚½`ôô
@ª@‚ ‚êII
‚»‚»‚Á‚©‚µ‚¢‚Ì‚Å`B HN‚Ì R ‚ªA”²‚¯‚Ä‚¢‚Ü‚µ‚½B
(Ms.Rin)‚Å‚µ‚½`ôô
Ms,Rin‚³‚ñ
‚²’ñˆÄA‚ ‚肪‚Æ‚¤‚²‚´‚¢‚Ü‚·II
ŠÖ”‚ð‚¢‚‚‚©Žg‚¤‚ÆA‚±‚ñ‚È‚±‚Æ‚à‚Å‚«‚é‚ñ‚Å‚·‚ËEEE
‘¼‚Ìê–ʂłàŽg‚¦‚Ü‚·‚æ‚ËI
‚ ‚肪‚Æ‚¤‚²‚´‚¢‚Ü‚·I
‹æØ‚è–Ú‘}“üi10/27 15:45j idackj
€–ڂ̓fƒ^ƒ‰ƒ‚ÅŒ‹\‚Å‚·‚©‚çAÚ‚µ‚¢ƒŒƒCƒAƒEƒg‚ð‚²’ñަ‚‚¾‚³‚¢B (seiya)
‚à‚¤‚²—pς݂łµ‚傤‚ªÚ‚¹‚³‚¹‚ĉº‚³‚¢A‚±‚ñ‚È•û–@‚à‚ ‚è‚Ü‚·B @ žðŒ‚Æ‚µ‚ÄAŒŸõ‚³‚ê‚éƒf[ƒ^‚Í‚r‚g‚d‚d‚s‡‚‚ÌSHEET1‚Ì‚Qs–ÚˆÈ~‚©‚çŽn‚Ü‚Á‚Ä‚¢‚ÄA ‰¡‚É‚``‚e‚Æ“WŠJ‚µ‚Ä‚¢‚é‚à‚̂Ƃµ‚Ä쬂µ‚Ă܂·B @@‚¨Šè‚¢Fƒf[ƒ^‚ÌÅŒã‚Ìs‚ÌŽŸ‚̃Zƒ‹‚Ì‚`—ñ‚É”¼Šp‚Ì*‚ð“ü‚ê‚ĉº‚³‚¢i–³‚‚Ä‚à—Ç‚¢‚Å‚· ‚ªƒf[ƒ^‚ÌI‚è‚𔻒肵‚½‚¢‚Ì‚Åj @@‰º‹LƒvƒƒOƒ‰ƒ€‚ðƒRƒs[‚µ‚Ä“\‚è•t‚¯‚µ‚½Œã‚ÅSHEET‡‚‚ÌSHEET2‚̃Zƒ‹F3‚ ‚½‚è‚ɃI[ƒgƒV ƒFƒCƒv‚©‚ç @@“K“–‚È}Œ`‚ð“\‚è•t‚¯‚Ä‚‚¾‚³‚¢Bi“ñdŽlŠp‚Ý‚½‚¢‚ɂȂÁ‚Ä‚¢‚é}Œ`‚ð‚¨Š©‚ß‚µ‚Ü‚·j @@‚»‚ÌŒã‚Å}Œ`‚ð‰EƒNƒŠƒbƒN‚µ‚ă}ƒNƒ‚Ì“o˜^‚Å¢ŒŸõ£‚ð“o˜^‚µ‚ĉº‚³‚¢B @@‚±‚ê‚Å€”õŠ®—¹‚Å‚·B
@@@¡‚ÌSHEET2‚̃Zƒ‹¢J1£‚ÉŒŸõ‚̃L[ƒ[ƒhA‘•’u–¼Ú×i—Ⴆ‚ÎF‚`1†‹@i002jj
‚Æ“ü—Í‚µ‚Äæ‚قǂ̓\‚è•t‚¯‚½}Œ`‚ðƒNƒŠƒbƒN‚µ‚ĉº‚³‚¢B
@@@‘•’u–¼Úׂł‚‚ç‚ê‚éƒOƒ‹[ƒv‚ªŒŸõ‚³‚ê‚Ä‚Ts–ÚˆÈ~‚É•\ަ‚³‚ê‚Ü‚·B
@@–ŒŸõŒ‹‰Ê‚ª‚¨‹C‚É¢‚·‚©‚í‚©‚è‚Ü‚¹‚ñ‚ªÚ‚¹‚Ă݂܂µ‚½B
@@mr_mangoos
Sub ŒŸõ() Dim i, J, CTL Dim F1 As Boolean CTL = 5 Range(Sheet2.Cells(5, 1), Sheet2.Cells(50, 6)).ClearContents F1 = False For i = 1 To 2000 If (Sheet1.Cells(i, 1) = "*") Then Exit Sub If (Sheet1.Cells(i, 2) = "") Then Else If (Trim(Sheet2.Cells(1, 10)) = Trim(Sheet1.Cells(i, 2))) Then F1 = True Else F1 = False End If End If If (F1 = True) Then For J = 2 To 6 Sheet2.Cells(CTL, J) = Trim(Sheet1.Cells(i, J)) Next J CTL = CTL + 1 End If Next i End Sub
mr_mangoos‚³‚ñ
‚ ‚肪‚Æ‚¤‚²‚´‚¢‚Ü‚·I
seiya‚³‚ñ
‰ïŽÐ‚ÌPC‚Ì’²Žq‚ªˆ«‚’x‚‚È‚è‚Ü‚µ‚½BB\‚µ–ó‚ ‚è‚Ü‚¹‚ñBBB
ŒŸõ‚µ‚½‚¢—ñ”‚Ȃ̂ł·‚ªA‚Q‚O—ñ‚Ù‚Ç‚ ‚è‚Ü‚µ‚½EEE
–{“–‚É–³—‚È‚¨Šè‚¢‚΂©‚è‚·‚¢‚Ü‚¹‚ñEEE
ƒŒƒCƒAƒEƒg‚Í
A—ñ‚É‚Í6sAB—ñ‚É‚Í5sAC—ñ‚É‚Í3sAD—ñ‚É‚Í20sAE—ñ‚É‚Í60sAF—ñ‚É‚Í7sAG—ñ‚É‚Í40sEEE‚Æ‚¢‚Á‚½Š´‚¶‚ÅA‚½‚Ä‚Éî•ñ‚ª‚È‚ç‚ñ‚¾ƒf[ƒ^ƒx[ƒX‚ɂȂÁ‚Ä‚¢‚Ü‚·EE
‚Á‚ÄA‰ñ“š‚ɂȂÁ‚Ä‚¢‚Ü‚·‚Å‚µ‚傤‚©BBH
[ ˆê——(ÅVXV‡) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.