How to conduct a factor analysis on questionnaire data based on 30 items in three blocks? I have a questionnaire with 30 questions divided into 3 blocks of 10 questions each. Each question is answered with a number 1 to 10 and then an average of them all is calculated. I need to know how much each block has contributed to the final score (and if possible - how much each question has contributed). How do I do this? I have access to R. 
 A: I think that what you need is Multiple Correspondence Analysis (MCA). You can lookup the basics on Wikipedia.
MCA is part of the R-core, in the package MASS. So I suggest you start with
library(MASS)
?mca

Here is the help page for the function mca.
The output of MCA is a set of ordered factors capturing the relationships between your variables. The absolute loadings  of the first factor (i.e. the coordinates of the projections of the variables on the first factor) says which groups of variables most heavily influence the variation.
As pointed out in the comments, MCA works with categorical and not numeric variables. This means that the ordered relationship (1 < 2 < 3 < ... < 10) will not be taken into account. How well MCA is appropriate depends on the nature of your questions. For instance, if those are binned numeric variables (e.g. monthly income / 1000, rounded up) then I'd say MCA is inappropriate. If these are subjective evaluations (e.g. "how much does it hurt?") then I would give it a try because the categories can sometimes be good to show non linear relationships between variables.
To do it in practice, in R, you would present your data in a data.frame of 30 columns and as many rows as you have individuals. Each column would be the answers to a question in the form of a factor, meaning that a 9, say, would be interpreted as the category 9, not the score 9.
Say that you have collected this in a data.frame that you call answers you could do the following:
mca_result <- mca(answers)
plot(mca_results)

You would have a biplot representing the individuals, the answers to the questions (as categories) and the relationship between all this expressed by spatial proximity. Two individuals close to each other on that space gave similar answers, two answers close to each other on that space were chosen by the same individuals. Similarly, an individual close to a group of answers has chosen many of them, and an answer close to a group of individuals was chosen by many of them.
MCA does not natively accomodate block design. A go-around that might be informative is to sum the squares of the loadings of the answers of each block on the first factor. The square of the loading is called the inertia and says how much the variation of a variable (an answer to a question) is represented in the simpler model consisting of only that factor. In R you could do it this way:
inertia_on_1 <- mca_results$cs[,1]^2
tapply(X=inertia_on_1, INDEX=rep(1:3, each=100), sum)

The part that says INDEX=rep(1:3, each=100) is to build an index corresponding to the variables of each block (labelled 1, 2, and 3) -- and there are 100 of each (because you have 10 categories for 10 questions).
A: One approach would be to calculate first principal component in each of the three blocks, and then perform a regression with your final score as the response variable and those three block scores as the explanatory variables.  This seems to me one way to answer your question of how much each block contributes to variance in the final score.
You could do the same basic approach at the individual question level too, by skipping the principal components part.
Some very skimpy R code to do the Block approach is pasted below.  This skips all sorts of things like diagnostic checks, plotting the data, looking to see how much variance within each block the first principal component explains, etc.
Also be warned - even with completely random data, one of the blocks will be more strongly linked to the final score - you need to think carefully about how to interpret that!
# simulate random data
x <- matrix(sample(1:10, 3000, replace=TRUE), nrow=100)

# create score as you say it is calculated
score <- apply(x,1, mean) 

# estimate a score for the principal component of each block
BlockA <-predict(princomp(x[,1:10]))[,1]
BlockB <-predict(princomp(x[,11:20]))[,1]
BlockC <-predict(princomp(x[,21:30]))[,1]

# fit a model
summary(lm(score ~ BlockA + BlockB + BlockC))

