4 alternatives to all questions need randomization

  • Thread starter freeofcosthotelstay
  • Start date
F

freeofcosthotelstay

In my excel file (version 2007), the first sheet is "quiz" and second sheetis "sheet1". It has a question/answer sheet (sheet1) that is designed in such a way that the first letter of the question is prefixed with the answer.. For example here is a sample data in the range A1:A20. Answer to first question is "b" hence the question is prefixed with "b".

bWho is a cricketer?
Tiger Woods
Sachin Tendulkar
Will Smith
Bill Gates
aWho is a Golfer
Tiger Woods
Sachin Tendulkar
Will Smith
Bill Gates
dWho is an Entrepreneur
Tiger Woods
Sachin Tendulkar
Will Smith
Bill Gates
cWho is an actor
Tiger Woods
Sachin Tendulkar
Will Smith
Bill Gates

I need to shuffle/jumble the four options for every question (in sheet1) whenever the workbook is opened without changing the logic of prefixing answer to the question's first letter and keeping all other things intact. Please help me how can I achieve this. What kind of code can be written and which section of vba (sheet/module)? Here is an example of question # 1 how it should be after randomization (on file open).


cWho is a cricketer?
Will Smith
Bill Gates
Sachin Tendulkar
Tiger Woods


Here, the options are shuffled/jumbled and also the correct answer is updated in the question (prefixed by 'c' which was earlier 'b'). I was looking at the chip article at http://www.cpearson.com/excel/ShuffleArray.aspx but Iam not able to implement this in my question. I also tried finding source on how we can make use of these functions that suits my question to no avail. I am still trying... even if i randomize the four options, how can i getthe correct answer sequence (a, b, c, d) to prefix in the question is another tough task. Appreciate some help here. Thank you!
 
R

Rajnish Malhotra

I got an answer at excelforum and thought I should update the link http://www.excelforum.com/excel-pro...ne-question-with-a-condition-and-loop-it.html
Thank you

Sub test()
Dim r As Long
Dim CA As String

For r = 1 To Cells(Rows.Count, "A").End(xlUp).Row Step 5
CA = Cells(r, "A").Offset(Asc(LCase(Left(Cells(r, "A").Value, 1))) - 96, 0).Value
Cells(r, "A").Offset(1, 1).Resize(4, 1).Formula = "=RAND()"
With ActiveSheet.Sort
.SortFields.Clear
.SortFields.Add Key:=Cells(r, "A").Offset(1, 1).Resize(4, 1),_
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SetRange Cells(r, "A").Offset(1, 0).Resize(4, 2)
.Header = xlNo
.Orientation = xlTopToBottom
.Apply
End With
Cells(r, "A").Offset(1, 1).Resize(4, 1).Clear
CA = Chr(Application.Match(CA, Cells(r, "A").Offset(1, 0).Resize(4, 1), False) + 96)
Cells(r, "A").Value = CA & Right(Cells(r, "A").Value, Len(Cells(r, "A").Value) - 1)
Next r
End Sub
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top