Ниже код будет работать, если вы наберете в ваших Code
значений в sheet2
и выделить их, и запустить этот макрос:
Selection.Offset(0, 1).FormulaR1C1 = "=IFERROR(VLOOKUP(RC[-1],Sheet1!C[-1]:C,2,FALSE),"""")"
Selection.Offset(0, 2).FormulaR1C1 = "=IFERROR(VLOOKUP(RC[-2],Sheet1!C[-2]:C,3,FALSE),"""")"
Selection.Offset(0, 1).Value = Selection.Offset(0, 1).Value
Selection.Offset(0, 2).Value = Selection.Offset(0, 2).Value
Edit: Если вы желаете, чтобы обновить значения, как вы набираете использование (спасибо @PeterAlbert для дополнительной оптимизации):
Private Sub Worksheet_Change(ByVal Target As Range)
'end if the user made a change to more than one cell at once?
If Target.Count > 1 Then End
'stop system activating worksheet_change event while changing the sheet
Application.EnableEvents = False
'continue if column 1(A) was updated
'and
'dont continue if header or row 1 was changed
If Target.Column = 1 And Target.Row <> 1 Then
With Target.Offset(0, 1) 'alter the next cell, current column +1 (column B)
'RC1 = current row and column 1(A) e.g. if A2 was edited, RC1 = $B2
'C1:C2 = $A:$B
.FormulaR1C1 = "=IFERROR(VLOOKUP(RC1,Sheet1!C1:C2,2,FALSE),"""")"
.Value = .Value 'store value
End With
With Target.Offset(0, 2) 'alter the next cell, current column +2 (column C)
'C1:C3 = $A:$C
.FormulaR1C1 = "=IFERROR(VLOOKUP(RC1,Sheet1!C1:C3,3,FALSE),"""")"
.Value = .Value 'store value
End With
End If
Application.EnableEvents = True 'reset system events
End Sub
Explinatioin РЦ:
Типы формул FormulaR1C1
полезны при обращении к ячейке относительно текущей ячейки. Там несколько правил, чтобы помнить:
- The
R
стенды для Row и C
для столбца и после того, как целое число, если таковые имеются, определяет строку или столбец;
- В качестве основы формула
RC
сама ссылается;
- Любое число, следующее за
R
или C
, скрещенное в []
является смещением к себе, например. если вы находитесь в ячейке A1
и используете R[1]C[1]
, вы будете ссылаться на ячейку B2
;
- Также любое число, следующее за
R
и C
, является точным, например. если вы ссылаетесь на R2C2
независимо от того, в какой ячейке вы находитесь, укажите также B2
; и
Чтобы усложнить ситуацию, если вы были в камере C5
, например.используя Range("C5").FormulaR1C1 =
и закодировал follwing:
"=RC[-1]"
ссылки клеток B5
"=RC1"
ссылки на ячейки A5
, более справедливо $A5
"=R[1]C[-2]"
ссылки клеток A6
"=Sum(C[-1]:C5)"
является =Sum(B:E)
, более справедливо =Sum(B:$E)
Что именно вы хотите от макроса? если вы хотите разместить формулу в диапазоне, вы можете попробовать что-то вроде «Range (« B2: B20 »). Formula =« = IFERROR (VLOOKUP (A2, Sheet1! A: C, 2, FALSE) », "") "' –
Показать код «Excel VBA» (указать контекст) и объяснить *, как это не работает. – 2013-02-16 23:05:07
ну, в первую очередь, вы можете легко удалить формулы из ячейки и не иметь того, что вы хотели. с макросами я думаю, что это еще одна история. – Sylca