I have a few spreadsheets that I keep pretty in-depth about different weapons and different shields.
I just set it up like this
-----------WEAPON NAME Price Icons Burrow Sink Air Dark Earth Fire Light Phys Water MISC NOTES
Fungus Ray 1,400,000 11 3 4 0 3 4 0 0 0 5
I do that for all of the weapons I feel threatened by and then I have another list down below for shields and it is set up basically the same way. Then, when I want to compare like how many icons get through GShield or FTabard or Leaf Shiled, I can just then put a new row as "Ghoskershield 7,600,000 x x x 3 999 5 0 3 5 0"
But instead of 999, I would set it to whatever dark Fungus Ray does (make the cell =R16 or whatever cell it is)
Then I would either just look or subtract the different columns.
If I then wanted to compare a different weapon to GShield, I could just paste over the Fungus Ray with the new weapon and then since I had "=R16", it would automatically change everything.
To enter different weapons in, I just do it manually - it is not very hard to just go "0tab3tab4tab0tab0tab0tab5" and then it's already in numerical form and everything - ready to go.
This is how I set it up:

That shows what mine generally looks like, but theres different columns for Defenders and another for Dual-Duties (where I have two rows for each weapon, one in blue that is defense and the other black that is offense).
This picture shows one of my comparison sections:

When I want to change fungus ray, I just paste another weapon into the spot where it is - just copy the icons I have on my main list (above) and it will automatically figure it out for that weapon - as you see I have the GShield's dark set as "=R16" so that it just picks up whatever weapon's dark amount is when I'm testing.
You may also notice that for icons through it says "0 0 0 0 0 0 5" with no negatives... this next picture shows that function:

You will see here that I have the bottom row set as a very simple IF command.
Basically it is saying "If Ghostkershield's air minus Fungus Ray's air is less than zero, make it zero... if not, then make it what it is (make it GS air - FR air)"
That way, you get no negatives when you are adding up all of the icons through at the far right... which uses an even simpler "=sum(x)" where x is all of the rows seperated by commas (you can just drag).
I hope that helps...
EDIT:
If you don't want to have to bother at all with a shield that blocks all of one icon, you can just put 999 as the number of icons that shield defends.
Look at this picture, I am comparing 2 weapons to 2 shields:

You can see that I changed the IF statement for this one. I have it set so that it first adds the total icon type from BOTH weapons and then subtracts that from the total defending of that icon from both of the shields. You will also notice that I just put 999 as the number of dark the GShield defends. If you think back to the IF statement, you will know that if something is less than 0, it will go to zero. Well there are no weapons in neopets that do over 999 dark, so it will always be less than 0. I could have just added the two weapons' dark together and made that the dark, but 999 might be easier.
PS: That same table above works if you simply delete one of the shields or one of the weapons, nothing changes.
PS2: Also note that if you want to see what you(main attacker + shield) would match up against an opponent(main attacker + shield), you can simply do what I showed you up top twice.. once for your total offensive and then once for their's.
I can also post a comparison of some dual-duties +- shields +- regular attackers if you want...
EDIT2: As for your other question, I simply always use the average. If no average is stated and there are maybe 5 random icons, I will just divide that number by 2 and use that. If it has a decimal, I will round up or down depending if I am comparing as an opponent or as me. I don't think using maximums for opponents is a good idea unless you are doing the very worst case scenario (maybe if you're low on health and risking an all-out bomb). In that case, just change the number manually to the maximum and leave it at the average for yourself.