2017-01-26 6 views
0

Я хотел бы вставить новый столбец каждый столбец около 260 раз, тогда мне нужно заполнить новые столбцы формулу, которая ссылается на непосредственный столбец слева. Вот то, что я должен вставить новый столбец:VBA Excel: вставьте новый столбец каждый n-й столбец, заполненный формулой, которая refrences ближайшего столбца слева

Sub insert_column_every_other() 
For colx = 2 To 266 Step 2 
Columns(colx).Insert Shift:=xlToRight 
Next 
End Sub 

Но я застрял на формуле, она просто копирует формулу, как это .. мне нужно значение С3 для изменения и ссылок на немедленную колонке влево (другие части не могут быть 100% Я новичок в VBA, так что все поправки приветствуются):

Sub Repeat() 
For ColNum = 3 To 2000 Step 2 
    Range(Cells(2, ColNum), Cells(21, ColNum)).FormulaR1C1 ="=AVERAGE(OFFSET(C3,1,0,2,1))" 
Next ColNum 
End Sub 
+1

В формуле смените 'C3' на' C [-1] '. Тем не менее, ваша формула выглядит подозрительной. Что вы хотите сделать? –

+1

В обозначении R1C1 'C3' означает то же, что означает' $ C: $ C' означает в обозначении A1. Предложение @ chrisneilsen будет генерировать эквивалент 'B: B', когда формула находится в столбце C,' D: D', когда формула находится в столбце E и т. д. (Но, как говорит Крис, это кажется подозрительным в сочетании со строкой -расширение 'OFFSET'.) Но если вы предполагаете, что' C3' означает ячейку один столбец слева и одну строку под ячейкой, где находится формула, вы можете просто использовать формулу R1C1 для '= AVERAGE (R [2] C [-1]: R [3] C [-1]) 'и полностью исключить« OFFSET ». – YowE3K

+0

@chrisneilsen ... У меня есть набор данных с двумя измерениями на образец (в ~ 100 строк) для ~ 267 типов измерений (столбцов). Мне нужно извлечь среднее значение для каждого типа измерений для двух повторений, и в итоге мне нужно сократить число строк пополам, чтобы отображать только средние значения. – andemexoax

ответ

1

Я думаю, что следующий код должен делать то, что вы хотите

Sub insert_column_and_Formula() 
    Dim colx As Long 
    Dim H As Worksheet 
    Set H = H3 'Replace H3 with the sheet that contains your data 

    For colx = 2 To 266 Step 2 
     'Insert the Column' 
     Call H.Columns(colx).Insert(Shift:=xlToRight) 
     'Put the formula in the new Column' 
     H.Range(H.Cells(2, colx), H.Cells(21, colx)).FormulaR1C1 = "=AVERAGE(OFFSET(RC[-1],1,0,2,1))" 

    Next colx 
End Sub 

Надеются, что это поможет вам, любым вопрос позвольте мне знайте пожалуйста

+1

Вам не хватает ссылки на объект 'H.', чтобы квалифицировать одну из« Ячейков ». – OldUgly

+0

Спасибо, я редактировать свой пост –

+0

@FernandoCT ... Вот полированный код из ваших предложений ... Спасибо ... 'Sub insert_column_and_Formula() Dim colx As Long Dim H как рабочий лист Set H = Лист1«Лист1 = имя листа, который содержит данные» Для colx = 4 к 536 Шаг 2 „Вставить столбец“ вызовов H.Columns (colx) .Вставьте (Shift: = xlToRight) „Поместите формулу в новой колонке“ H.Range (H.Cells (2, colx), H.Cells (41, colx)). Формула R1C1 = "= СРЕДНЕЕ (R [0] C [-1]: R [1] C [-1])" ', который является таким же, как ... "= СРЕДНЕЕ (OFFSET (RC [-1], 0,0,2,1))"' Next colx End Sub' – andemexoax

Смежные вопросы