# Workbook Analysis: F425_EXXRXX_XXXX_RunSheet_Alpha.xlsm

## Executive Summary

- Sheets: 25
- Formula cells: 54060
- Dependency edges: 172018
- Defined names: 39
- VBA project: yes
- Extracted macro source files: 35
- Charts/drawings/images: 93 charts, 18 drawings, 12 images

## Sheets

| Sheet | State | Used Range | Cells | Formulas | Merged | Validations | CF Rules | Charts | Images |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| HOWTO | hidden | A1:O64 | 47 | 2 | 29 | 0 | 0 | 0 | 1 |
| Info | visible | A1:F16 | 68 | 0 | 0 | 0 | 0 | 0 | 0 |
| Event Info | visible | A1:EW72 | 1482 | 260 | 51 | 5 | 13 | 0 | 2 |
| Tyres | visible | A1:BV57 | 1292 | 1162 | 50 | 1 | 1 | 0 | 0 |
| CheckList | hidden | A1:BR338 | 946 | 112 | 897 | 0 | 6 | 8 | 2 |
| BaseSheet | hidden | A1:EU68 | 382 | 80 | 62 | 0 | 15 | 0 | 0 |
| Weight | visible | A1:AT60 | 216 | 172 | 571 | 2 | 38 | 0 | 3 |
| PressureTest | hidden | A1:AD115 | 740 | 440 | 167 | 2 | 181 | 0 | 0 |
| PressureTest (2) | hidden | A1:AD115 | 754 | 438 | 167 | 2 | 181 | 0 | 0 |
| PressureTest PSI | visible | A1:AD115 | 740 | 440 | 167 | 2 | 192 | 0 | 0 |
| RP_Test | hidden | A1:DN112 | 2558 | 2061 | 389 | 15 | 46 | 1 | 2 |
| RP_Session | visible | A1:DN112 | 2570 | 2061 | 391 | 15 | 46 | 1 | 2 |
| RP_Wet | hidden | A1:DN112 | 2570 | 2061 | 391 | 15 | 46 | 1 | 2 |
| D1 | visible | A1:FG198 | 7596 | 6029 | 1426 | 4 | 334 | 2 | 1 |
| D1 Delta Time | hidden | A1:FG198 | 7437 | 5898 | 1494 | 4 | 332 | 2 | 1 |
| PressureRace | hidden | A1:AG121 | 622 | 369 | 153 | 3 | 153 | 0 | 0 |
| FP | visible | A1:FG198 | 7596 | 6029 | 1426 | 4 | 334 | 2 | 1 |
| Q1 | visible | A1:FG198 | 7596 | 6029 | 1426 | 4 | 334 | 2 | 1 |
| Q2 | visible | A1:FG198 | 7596 | 6029 | 1426 | 4 | 334 | 2 | 1 |
| PressureRace PSI | visible | A1:AD115 | 740 | 438 | 167 | 2 | 192 | 0 | 0 |
| RP_Race | visible | A1:DK112 | 2549 | 2085 | 389 | 15 | 46 | 1 | 2 |
| R1 | visible | A1:GF235 | 3285 | 2807 | 300 | 6 | 22 | 3 | 1 |
| R2 | visible | A1:GF235 | 3285 | 2807 | 300 | 6 | 22 | 3 | 1 |
| R3 | visible | A1:GF235 | 3285 | 2807 | 300 | 6 | 22 | 3 | 1 |
| Strategy | visible | B2:BO100 | 3603 | 3444 | 59 | 3 | 0 | 0 | 0 |

## Formula Hotspots

| Sheet | Formulas | Non-empty cells | Used range |
| --- | --- | --- | --- |
| D1 | 6029 | 7596 | A1:FG198 |
| FP | 6029 | 7596 | A1:FG198 |
| Q1 | 6029 | 7596 | A1:FG198 |
| Q2 | 6029 | 7596 | A1:FG198 |
| D1 Delta Time | 5898 | 7437 | A1:FG198 |
| Strategy | 3444 | 3603 | B2:BO100 |
| R1 | 2807 | 3285 | A1:GF235 |
| R2 | 2807 | 3285 | A1:GF235 |
| R3 | 2807 | 3285 | A1:GF235 |
| RP_Race | 2085 | 2549 | A1:DK112 |

## Cross-Sheet Formula Links

| Formula sheet | Referenced sheet | Count |
| --- | --- | --- |
| D1 Delta Time | Event Info | 2444 |
| D1 | Event Info | 2380 |
| FP | Event Info | 2380 |
| Q1 | Event Info | 2380 |
| Q2 | Event Info | 2380 |
| Strategy | Tyres | 1384 |
| Strategy | Event Info | 407 |
| R1 | Event Info | 233 |
| R2 | Event Info | 233 |
| R3 | Event Info | 233 |
| D1 | Tyres | 183 |
| D1 Delta Time | Tyres | 183 |
| FP | Tyres | 183 |
| Q1 | Tyres | 183 |
| Q2 | Tyres | 183 |
| R1 | Tyres | 160 |
| R2 | Tyres | 160 |
| R3 | Tyres | 160 |
| RP_Race | Tyres | 71 |
| RP_Test | Event Info | 33 |
| RP_Session | Event Info | 33 |
| RP_Wet | Event Info | 33 |
| RP_Race | Event Info | 33 |
| RP_Test | Tyres | 31 |
| RP_Session | Tyres | 31 |
| RP_Wet | Tyres | 31 |
| Event Info | Tyres | 20 |
| Weight | Tyres | 15 |
| Tyres | Event Info | 4 |
| CheckList | Event Info | 4 |

## Likely App Inputs

These are non-formula cells that formulas reference. They are good candidates for editable fields, source data, or imported tables.

| Cell | Nearby label | Current value | Referenced by |
| --- | --- | --- | --- |
| RP_Test!BR28 | run # | 1 | 641 |
| RP_Test!BR29 | 1 | 2 | 641 |
| RP_Test!BR30 | 2 | 3 | 641 |
| RP_Test!BR31 | 3 | 4 | 641 |
| RP_Test!BR32 | 4 | 5 | 641 |
| RP_Test!BR33 | 5 | 6 | 641 |
| RP_Test!BR34 | 6 | 7 | 641 |
| RP_Test!BR35 | 7 | 8 | 641 |
| RP_Test!BR38 |  | 9 | 641 |
| RP_Test!BR39 | 9 | 10 | 641 |
| RP_Test!BR40 | 10 | 11 | 641 |
| RP_Test!BR41 | 11 | 12 | 641 |
| RP_Test!BR42 | 12 | 13 | 641 |
| RP_Test!BR43 | 13 | 14 | 641 |
| RP_Test!BR44 | 14 | 15 | 641 |
| RP_Test!BR45 | 15 | 16 | 641 |
| RP_Test!BR77 | run # | 1 | 641 |
| RP_Test!BR78 | 1 | 2 | 641 |
| RP_Test!BR79 | 2 | 3 | 641 |
| RP_Test!BR80 | 3 | 4 | 641 |
| RP_Test!BR81 | 4 | 5 | 641 |
| RP_Test!BR82 | 5 | 6 | 641 |
| RP_Test!BR83 | 6 | 7 | 641 |
| RP_Test!BR84 | 7 | 8 | 641 |
| RP_Test!BR87 |  | 9 | 641 |

## Likely Terminal Outputs

These formula cells are not referenced by other formulas in the workbook graph. They are candidate displayed results or report-only fields.

| Cell | Nearby label | Cached value | Formula |
| --- | --- | --- | --- |
| HOWTO!B1 |  | 'User manual, runsheet  2001' | ="User manual, runsheet  " &A1 |
| Event Info!AK2 |  | 0 | =VLOOKUP(C6,AA6:AF12,6,FALSE) |
| Event Info!AK4 | Best Time on Setup | None | =IFERROR(IF(LEFT(AK3)="R",IF(OR(INDIRECT(AK3&"!$G$4")<=0,INDIRECT(AK3&"!$G$4")=""),"",INDIRECT(AK3&" |
| Event Info!AL4 |  | None | =IFERROR(IF(LEFT(AL3)="R",IF(OR(INDIRECT(AL3&"!$G$4")<=0,INDIRECT(AL3&"!$G$4")=""),"",INDIRECT(AL3&" |
| Event Info!AM4 |  | None | =IFERROR(IF(LEFT(AM3)="R",IF(OR(INDIRECT(AM3&"!$G$4")<=0,INDIRECT(AM3&"!$G$4")=""),"",INDIRECT(AM3&" |
| Event Info!AN4 |  | None | =IFERROR(IF(LEFT(AN3)="R",IF(OR(INDIRECT(AN3&"!$G$4")<=0,INDIRECT(AN3&"!$G$4")=""),"",INDIRECT(AN3&" |
| Event Info!AO4 |  | None | =IFERROR(IF(LEFT(AO3)="R",IF(OR(INDIRECT(AO3&"!$G$4")<=0,INDIRECT(AO3&"!$G$4")=""),"",INDIRECT(AO3&" |
| Event Info!AP4 |  | None | =IFERROR(IF(LEFT(AP3)="R",IF(OR(INDIRECT(AP3&"!$G$4")<=0,INDIRECT(AP3&"!$G$4")=""),"",INDIRECT(AP3&" |
| Event Info!AQ4 |  | None | =IFERROR(IF(LEFT(AQ3)="R",IF(OR(INDIRECT(AQ3&"!$G$4")<=0,INDIRECT(AQ3&"!$G$4")=""),"",INDIRECT(AQ3&" |
| Event Info!AR4 |  | None | =IFERROR(IF(LEFT(AR3)="R",IF(OR(INDIRECT(AR3&"!$G$4")<=0,INDIRECT(AR3&"!$G$4")=""),"",INDIRECT(AR3&" |
| Event Info!AS4 |  | None | =IFERROR(IF(LEFT(AS3)="R",IF(OR(INDIRECT(AS3&"!$G$4")<=0,INDIRECT(AS3&"!$G$4")=""),"",INDIRECT(AS3&" |
| Event Info!AT4 |  | None | =IFERROR(IF(LEFT(AT3)="R",IF(OR(INDIRECT(AT3&"!$G$4")<=0,INDIRECT(AT3&"!$G$4")=""),"",INDIRECT(AT3&" |
| Event Info!C11 | Engine | 317 | =IF(VLOOKUP(C6,AA5:AE12,5,FALSE)<>"",VLOOKUP(C6,AA5:AE12,5,FALSE),"") |
| Event Info!C12 | Driver Weight (Kg) | 62 | =IF(VLOOKUP(C6,AA5:AE12,2,FALSE)<>"",VLOOKUP(C6,AA5:AE12,2,FALSE),"") |
| Event Info!K12 |  | 'Weekend Ideal KN' | ="Weekend Ideal "&C6 |
| Event Info!M12 | S4 | datetime.time(0, 0) | =(IF(IFERROR(MIN(M8:V8),"")="","",IFERROR(MIN(M8:V8),""))+IF(IFERROR(MIN(M9:V9),"")="","",IFERROR(MI |
| Event Info!D15 | Race Duration | '+1 lap' | =IF(C3="F4 ADAC","","+1 lap") |
| Event Info!M17 | Weekend Ideal All | datetime.time(0, 0) | =(IF(IFERROR(MIN(M13:V13),"")="","",IFERROR(MIN(M13:V13),""))+IF(IFERROR(MIN(M14:V14),"")="","",IFER |
| Event Info!R22 | 0.04 | 0.20943954426541858 | =300*TAN(Q22*PI()/180) |
| Event Info!T22 | -0.08 | 0.35 | =T23/2 |
| Event Info!R23 | 0.08 | 0.4188792926875904 | =300*TAN(Q23*PI()/180) |
| Event Info!AK28 | Ratio LLT/AB | None | =IF(AK11="","",AK27/AK11) |
| Event Info!AL28 | Ratio LLT/AB | None | =IF(AL11="","",AL27/AL11) |
| Event Info!AM28 | <openpyxl.worksheet.formula.ArrayFormula object at 0x1150d0320> | None | =IF(AM11="","",AM27/AM11) |
| Event Info!AN28 | <openpyxl.worksheet.formula.ArrayFormula object at 0x1150d0470> | None | =IF(AN11="","",AN27/AN11) |

## VBA / Macro Findings

| Source file | Stream | Lines | Procedures |
| --- | --- | --- | --- |
| Questa_cartella_di_lavoro.cls | Root Entry/VBA/Questa_cartella_di_lavoro | 9 |  |
| Foglio17.cls | Root Entry/VBA/Foglio17 | 135 | Worksheet_Change |
| Sheet5.cls | Root Entry/VBA/Sheet5 | 9 |  |
| Foglio3.cls | Root Entry/VBA/Foglio3 | 9 |  |
| Foglio7.cls | Root Entry/VBA/Foglio7 | 9 |  |
| Modulo1.bas | Root Entry/VBA/Modulo1 | 239 | Import_run1 |
| Remaining_Laps_to_show_fp.cls | Root Entry/VBA/Remaining_Laps_to_show_fp | 38 | TextBox1_Change, TextBox2_Change |
| Modulo2.bas | Root Entry/VBA/Modulo2 | 73 | StartTimer_Perf, RefreshTimer_Perf, StartTimer_Race, RefreshTimer_Race |
| Foglio5.cls | Root Entry/VBA/Foglio5 | 9 |  |
| Foglio45.cls | Root Entry/VBA/Foglio45 | 122 | Worksheet_Change |
| Foglio12.cls | Root Entry/VBA/Foglio12 | 9 |  |
| Remaining_Laps_to_show_race.cls | Root Entry/VBA/Remaining_Laps_to_show_race | 41 | TextBox1_Change, TextBox2_Change |
| Module2.bas | Root Entry/VBA/Module2 | 114 | GetPic, InsertTrackMap |
| Others.bas | Root Entry/VBA/Others | 60 | Showlap, ISFORMULA, Graphscale |
| Module6.bas | Root Entry/VBA/Module6 | 86 | ToggleButton_Click |
| Sheet3.cls | Root Entry/VBA/Sheet3 | 9 |  |
| Foglio37.cls | Root Entry/VBA/Foglio37 | 32 | ToggleButton1_Click, Show_Click |
| Sheet6.cls | Root Entry/VBA/Sheet6 | 250 | Worksheet_Change |
| Sheet4.cls | Root Entry/VBA/Sheet4 | 249 | Worksheet_Change |
| Foglio4.cls | Root Entry/VBA/Foglio4 | 38 | ToggleButton1_Click |
| Foglio40.cls | Root Entry/VBA/Foglio40 | 32 | ToggleButton1_Click, Show_Click |
| Foglio39.cls | Root Entry/VBA/Foglio39 | 32 | ToggleButton1_Click, Show_Click |
| Sheet1.cls | Root Entry/VBA/Sheet1 | 9 |  |
| Module1.bas | Root Entry/VBA/Module1 | 2 |  |
| Foglio46.cls | Root Entry/VBA/Foglio46 | 122 | Worksheet_Change |
| ImportWTXtable.bas | Root Entry/VBA/ImportWTXtable | 264 | SummaryTableImport_MultipleLaps, SummaryTableImport_SingleLap, IsInArray |
| Foglio41.cls | Root Entry/VBA/Foglio41 | 32 | ToggleButton1_Click, Show_Click |
| Sheet7.cls | Root Entry/VBA/Sheet7 | 250 | Worksheet_Change |
| Sheet10.cls | Root Entry/VBA/Sheet10 | 250 | Worksheet_Change |
| Sheet11.cls | Root Entry/VBA/Sheet11 | 250 | Worksheet_Change |
| Foglio47.cls | Root Entry/VBA/Foglio47 | 122 | Worksheet_Change |
| Foglio48.cls | Root Entry/VBA/Foglio48 | 122 | Worksheet_Change |
| Foglio49.cls | Root Entry/VBA/Foglio49 | 122 | Worksheet_Change |
| Foglio18.cls | Root Entry/VBA/Foglio18 | 135 | Worksheet_Change |
| Foglio19.cls | Root Entry/VBA/Foglio19 | 135 | Worksheet_Change |

## Translation Model Notes

- Treat each visible worksheet with user-facing layout as a candidate app screen or workflow area.
- Treat hidden sheets, defined names, and dense formula-only regions as candidate domain/model layers.
- Rebuild formulas as pure deterministic functions first. The dependency CSV is the starting point for ordering calculations and discovering shared submodels.
- Rebuild macros as commands/events. Extracted procedures should be classified into UI actions, data movement, printing/export, validation, and calculation orchestration.
- Preserve workbook constants referenced by many formulas as editable configuration or imported event metadata.
- Investigate terminal outputs with domain stakeholders before implementing UI, because some may be helper/check cells rather than user-visible results.

## Output Files

- JSON model: `F425_EXXRXX_XXXX_RunSheet_Alpha_analysis.json`
- Formula CSV: `F425_EXXRXX_XXXX_RunSheet_Alpha_formulas.csv`
- Dependency CSV: `F425_EXXRXX_XXXX_RunSheet_Alpha_dependencies.csv`
