Paspauskite F9 iki uždarymo - „Excel“ patarimai

„Excel“ naudojimas sprendžiant bet kokį sudėtingą modelį

Levas yra konkurencingos plaukimo lygos komisaras. Jis rašo: "Aš esu plaukimo lygos komisaras. Šiais metais yra aštuonios komandos. Kiekviena komanda rengia po vieną susitikimą ir yra namų komanda. Susitikime bus 4 ar 5 komandos. Kaip susitvarkyti tvarkaraštį, kad kiekviena komanda plauktų prieš kas antrą komandą du kartus? Anksčiau, kai turėdavome 5, 6 ar 7 komandas, galėjau tai išspręsti paspausdamas F9 iki uždarymo. Bet šiais metais su 8 komandomis tai neišeina. "

Vienas iš apribojimų yra tas, kad kai kurie baseinai siūlo tik 4 takelius, todėl jūs galite turėti tik 4 komandas, kai tas baseinas surengs iškilmes. Kituose baseinuose jie gali turėti 5, 6 ar daugiau juostų, tačiau idealus susitikimas turės namų komandą ir keturis kitus.

Mano pasiūlymas: paspauskite F9 greičiau! Norėdami tai padėti: sukurkite „artumo matą“ savo modelyje. Tokiu būdu paspaudę F9 galite stebėti vieną skaičių. Radę „geresnį“ sprendimą nei geriausias, kurį radote, išsaugokite jį kaip tarpinį geriausią sprendimą.

Veiksmai, būdingi plaukimo problemai

  • Išvardykite 8 namų komandas viršuje.
  • Kiek būdų užpildyti kitas 4 juostas?
  • Išvardinkite visus būdus.
  • Kiek būdų užpildyti kitas 3 juostas (mažoms vietoms?). Išvardinkite visus būdus.
  • Naudokite RANDBETWEEN(1,35)pasirinkti komandas kiekvienoms rungtynėms.

Atkreipkite dėmesį, kad yra 35 8 galimi sezono organizavimo būdai (2,2 trln.). Būtų „neįmanoma“ jų visų padaryti su namų kompiuteriu. Jei būtų tik 4000 galimybių, galėtumėte jas visas padaryti, ir tai yra kitos dienos vaizdo įrašas. Tačiau turint 2,2 trln. Galimybių, atsitiktinai atspėjus, greičiausiai bus rasti sprendimai.

Sukurkite artumo matą

Plaukimo scenarijuje svarbiausia, ar kiekviena komanda du kartus plaukia prieš kitas komandas?

Paimkite dabartinius 8 atsitiktinius skaičius ir naudokite formules, kad suskaičiuotumėte visus atitikmenis. Išvardykite 28 galimus atitikimo langus. Naudokite COUNTIFnorėdami pamatyti, kiek kartų vyksta kiekvienas mačas su dabartiniais atsitiktiniais skaičiais. Suskaičiuokite, kiek yra 2 ar daugiau. Tikslas yra gauti šį skaičių iki 28.

Antrinis tikslas: yra 28 mačai. Kiekvienas turi vykti du kartus. Tai yra 56 mačai, kurie turi įvykti. Su 8 baseinais ir 6 su penkiomis juostomis turėsite 68 mačus. Tai reiškia, kad kai kurios komandos prieš kitas komandas plauks 3 kartus ir galbūt 4 kartus. Antrinis tikslas: įsitikinkite, kad kuo mažiau komandų turi 4 mačus. Tretinis tikslas: sumažinkite maks.

Lėtas būdas tai išspręsti

Paspauskite F9. Pažvelkite į rezultatą. Kelis kartus paspauskite F9, kad pamatytumėte, kokius rezultatus gaunate. Gavę aukštą rezultatą, išsaugokite 8 įvestis ir tris išėjimo kintamuosius. Toliau spauskite F9, kol pasieksite geresnį rezultatą. Išsaugokite tą įrašydami 8 įvesties langelius ir 3 rezultatų langelius.

Makrokomanda išsaugoti dabartinį rezultatą

Ši makrokomanda išsaugo rezultatus kitoje eilutėje.

Sub SaveThis() NR = Range("Z1048576").End(xlUp).Row + 1 Cells(NR, 26).Resize(1, 11).Value = Array(Range("c8").Value, _ Range("D8").Value, Range("E8").Value, Range("F8").Value, _ Range("G8").Value, Range("H8").Value, Range("I8").Value, _ Range("J8").Value, Range("O1").Value, Range("P1").Value, _ Range("Q1").Value) End Sub

Makrokomanda pakartotinai paspauskite F9 ir patikrinkite rezultatus

Parašykite makrokomandą, kad paspauskite F9 pakartotinai, registruodami tik „geresnius“ sprendimus. Leiskite makrokomandai sustoti, kai pasieksite norimus 28 ir 0 rezultatus.

Sub TrySome() NR = Range("Z1048576").End(xlUp).Row + 1 Ctr = Range("T1").Value Application.ScreenUpdating = Range("AH2").Value SolutionFound = False GoAgain: ActiveSheet.Calculate Ctr = Ctr + 1 UseIt = 0 If Range("O1").Value> Range("AK1").Value Then UseIt = 1 ElseIf Range("O1").Value = Range("AK1").Value Then If Range("P1").Value 300 Then Application.ScreenUpdating = True Exit Sub End If If SolutionFound = True Then Application.ScreenUpdating = True Exit Sub End If If Ctr Mod 1000 = 0 Then Range("T1").Value = Ctr Application.ScreenUpdating = True If Selection.Address = "$T$1" Then Cells(NR, 34).Select Else Range("T1").Select End If Application.ScreenUpdating = Range("AH2").Value End If GoTo GoAgain End Sub

Šoninė juosta apie „ScreenUpdating“

Šoninė juosta: Iš pradžių „smagu“ stebėti, kaip kartojasi kartojimai. Bet galiausiai supranti, kad gali tekti išbandyti milijonus galimybių. „Excel“ piešiant ekraną, makrokomanda sulėtėja. Norėdami neperspalvinti ekrano, naudokite „Application.ScreenUpdating = False“.

Kiekvieną kartą, kai gausite naują atsakymą arba kas 1000, leiskite „Excel“ iš naujo nupiešti ekraną. Problema: „Excel“ neperbraižo ekrano, nebent langelio žymeklis juda. Radau, kad pasirinkus naują langelį, kai „ScreenUpdating“ yra teisinga, „Excel“ perdažys ekraną. Nusprendžiau, kad jis būtų pakaitinis skaitiklio langelis ir geriausi rezultatai iki šiol.

Application.ScreenUpdating = True If Selection.Address = "$T$1" Then Cells(NR, 34).Select Else Range("T1").Select End If Application.ScreenUpdating = Range("AH2").Value

Alternatyvūs sprendimų sprendimai

Apsvarstiau daugybę šio vaizdo įrašo pavadinimų: paspauskite F9 iki uždarymo, atspėkite, kol nepasiteisins, grubus jėgos sprendimas, artumo matas

Atkreipkite dėmesį, kad bandžiau išspręsti problemą naudodamas „Solver“. Bet Solveris negalėjo priartėti. Niekada nebuvo geriau nei 26 komandos, kai tikslas buvo 28.

Taip pat atkreipkite dėmesį, kad bet koks sprendimas, kurį gaunu šiame vaizdo įraše, yra „nebyli sėkmė“. Sprendimo metode nėra nieko protingo. Pavyzdžiui, makrokomandoje nėra sakoma: „Turėtume pradėti nuo geriausio sprendimo iki šiol ir atlikti keletą mikrokoregavimų“. Net jei gaunate sprendimą, kuris yra tik vienas skaičius, jis vėl aklai spaudžia F9. Tikėtina, kad yra protingesnis būdas užpulti problemą. Bet … dabar … mūsų plaukimo komisarui šis požiūris pasiteisino.

Atsisiųskite darbaknygę

Žiūrėti video

Atsisiųsti failą

Failo pavyzdį atsisiųskite čia: Podcast2180.zip

Įdomios straipsniai...