2013-02-21 3 views
2

У меня есть 4 доступных слота. У меня есть 4 "объекта", и вам нужно создавать комбинации объектов, каждый из которых помещается в «слот» при вращении. Так, например, если у меня есть эти объекты:Комбинации Excel Row?

val1 
val2 
val3 
val4 

Я хочу использовать скрипт/макро/и т.д., чтобы сделать комбинации из диапазона значений, чтобы сделать это:

val1 
val2 
val3 
val4 

val2 
val3 
val4 
val1 

val3 
val4 
val1 
val2 

val4 
val1 
val2 
val3 

Далее, у меня есть 6 «объектов», и каждому из них требуется место в каждом слоте, поэтому всегда будет комбинация, в которой не будут включены 2 объекта, но после того, как все комбинации будут выполнены, каждый объект будет посещать один слот один раз.

Я не уверен, какие ключевые слова для веб-поиска использовать. Я немного застрял. Каков наилучший способ сделать это? У меня установлен Excel 2013.

Спасибо.

EDIT.

на основе ввода от Джо, теперь у меня есть следующий код:

Public Sub makeMore() 
    Dim looper As Integer, colloop As Integer, numcols As Integer 
    numcols = Cells(1, 1).Value 
    For colloop = 1 To numcols 
    For looper = Selection.Row To ((Selection.Row + Selection.Count) - 1) 
     ActiveSheet.Cells(looper, colloop).Value = ActiveSheet.Cells((looper + colloop - 2) Mod numcols + 1, 1).Value 
    Next looper 
    Next colloop 
End Sub 

я поставил значение «6» от А1 на листе, положить значение от С4 до С9 «знач1» «val2» " val3 "" val4 "" val5 "" val6 ", выбрали значения, и я вижу, что число« 6 »распространяется по листу. То, что я пытаюсь создать, - это несколько наборов из 4, причем каждый «val» одинаково представлен во всех наборах. Думаю, я что-то теряю в настройке значения в цикле.

Все дальнейшие идеи оценены. Еще раз спасибо.

+0

Вы хотите взять четыре последовательных ячейки и сделать 4 набора из них в том же порядке, но с каждым первым в одном наборе? IE 1-2-3-4 в A1-A4, затем в B1-B4 у вас 2-3-4-1, затем в C1-4 у вас 3-4-1-2 и т. Д.? В конечном итоге это будет большая задача - если да, какие параметры будут? – Joe

+0

Джо, вы правы в необходимости последовательных ячеек, каждый из которых имеет шанс быть «первым». Нет параметров, отличных от того, что находится в отдельных ячейках. Мои фактические данные имеют 4 строки, около 12 строк и т. Д. – Snowy

+0

Итак, если это 12 строк, вам нужно 12 наборов комбинаций? – Joe

ответ

0

Псевдокод решение

Get reference to the data range 
Copy range data to a variant array 
Get reference to output range 
for i = 1 to number of output sets 
    write array to sheet 
    rotate array data 
    offset output range reference 
next i 

Имейте идти на кодирование это, и после обратно, если вы застряли

+0

Прошел, пропустил что-то в цикле ... – Snowy

1

Это будет делать это; Я прочитал из O15 значение # строк. Вы можете установить это в константе в верхней части программы, прочитать ее где-нибудь, поместить ее в msgbox, что бы вы ни хотели.

Public Sub makeMore() 
    Dim looper As Integer, colloop As Integer, numcols As Integer 
    numcols = Cells(15, 15).Value 
    For colloop = 2 To numcols 
    For looper = 1 To 4 
     ActiveSheet.Cells(looper, colloop).Value = ActiveSheet.Cells((looper + colloop - 2) Mod numcols + 1, 1).Value 
    Next looper 
    Next colloop 

End Sub