Are all these records on one table (hopefully not). If you run a report based on the Skills Table, with skills in your body part, and above that a sub-summary part of instructors, and above that a sub-summary part of students, this should get you closer.
Sort by Students, skills, dates.
Up in the header you can have a global start field and global end field. Upon modification you can then have a script that finds/constrains the found set by date range, then sort if needed (or refresh)
Or, you can use the globals and sort the relationship to show only then records that fall into that date range.
Just remember with reports and sub-summary parts, you usually don't get the report you thought you were going to get until you sort
Edit: had it backwards--corrected
If I read this right, you have 20 fields for this in each record. This makes your report pretty much impossible without restructuring your database to add a table where you have up to 20 related records, one for each of these skills. A report based on this added table then makes this a pretty straightforward process. You might want to consider adding that table/relationship and then using a script to move this data into such a system of related records.