Умножить несколько столбцов на основе if then logic

Я пытаюсь сформулировать логику vba, которая будет умножать ячейки в одном столбце на другие столбцы на основе имени заголовка. Например, если у меня есть данные ниже: введите описание изображения здесь

В столбце I я пытаюсь умножить диапазон ячеек A2: A11 на B2: B11 на D2: D11. Так как значение в A1 такое же, как два левых двух символа в D1, а B1 совпадает с двумя правыми двумя символами в D1. В столбце J это будет диапазон ячеек A2: A11 умножить на E2: E11 и так далее. Результат должен выглядеть следующим образом: введите описание изображения здесь

Макрос пытается это сделать, сравнивая значения ячеек в ядре ячеек A1: B1-D1: G1, но то, что я не могу понять, состоит в том, как умножать 3 диапазона ячеек вместе.

Vba:

Sub IfThenLogic2() Dim SrchRng1 As Range, cel1 As Range Dim SrchRng2 As Range, cel2 As Range Set SrchRng1 = Sheets("Sheet2").Range("A1:B1") Set SrchRng2 = Sheets("Sheet2").Range("F1:G1") c = 13 For Each cel1 In SrchRng1 For Each cel2 In SrchRng2 If (cel1.Value = Left(cel2.Value, 2) Or cel1.Value = Right(cel2.Value, 2)) Then 'If cel1.Value = cel2.Value Then For r = 2 To 11 Cells(r, c).FormulaR1C1 = "=" & cel1.Offset(r - 1, 0).Address(ReferenceStyle:=xlR1C1) & "*" & cel2.Offset(r - 1, 0).Address(ReferenceStyle:=xlR1C1) & "" Next r c = c + 1 End If Next cel2 Next cel1 End Sub 

Оператор OR производит (как и ожидалось): введите описание изображения здесь

Может быть, лучший способ сделать это, не используя for each loops ? Спасибо за любые предложения!

если вы хотите его в VBA:

 Sub IfThenLogic2() Dim SrchRng1 As Range, cel1 As Range Dim SrchRng2 As Range, cel2 As Range Dim i As Integer Dim sht As Worksheet Set sht = Sheets("Sheet2") Set SrchRng1 = sht.Range("A1:B1") Set SrchRng2 = sht.Range("D1:G1") Dim title() As String c = 13 For Each cel1 In SrchRng1 For Each cel2 In SrchRng2 title = Split(cel2, "_") For i = LBound(title) To UBound(title) If title(i) = cel1.Value Then 'If cel1.Value = cel2.Value Then For r = 2 To 11 If sht.Cells(r, c).HasFormula Then sht.Cells(r, c).Formula = sht.Cells(r, c).Formula & "*" & cel1.Offset(r - 1, 0).Address Else sht.Cells(r, c).Formula = "=" & cel1.Offset(r - 1, 0).Address & "*" & cel2.Offset(r - 1, 0).Address End If Next r End If Next i c = c + 1 Next cel2 c = 13 Next cel1 End Sub 

Вот нормальная (не массивная) формула для этого. Просто введите его в ячейку I2 и скопируйте по мере необходимости:

 =INDEX($D2:$G2,MATCH(I$1,$D$1:$G$1,)) * IFERROR(INDEX($A2:$B2,MATCH(LEFT(I$1,2),$A$1:$B$1,)),1) * IFERROR(INDEX($A2:$B2,MATCH(RIGHT(I$1,2),$A$1:$B$1,)),1) 

Если вы хотите автоматизировать это, вы можете использовать этот VBA:

 Public Sub excelhero() [i2].Formula = "=INDEX($D2:$G2,MATCH(I$1,$D$1:$G$1,)) * IFERROR(INDEX($A2:$B2,MATCH(LEFT(I$1,2),$A$1:$B$1,)),1) * IFERROR(INDEX($A2:$B2,MATCH(RIGHT(I$1,2),$A$1:$B$1,)),1)" [i2].Copy [i2:L11] [i2:L11].Value = [i2:L1].Value '<-- replaces formulas with literal values End Sub 

Если вы не возражаете против формулы, я получаю Формулу Array, которая работает.

Вот как выкладываются данные (вам может потребоваться настроить формулу, если она отличается от вас):

введите описание изображения здесь

Формула для ввода в I2 : =IF(AND(COUNTIF($A$1:$G$1,LEFT(I$1,2)),COUNTIF($A$1:$G$1,RIGHT(I$1,2))),INDEX($A2:$G2,,MATCH(LEFT(I$1,2),$A$1:$B$1,0))*INDEX($A2:$G2,,MATCH(RIGHT(I$1,2),$A$1:$B$1,0))*INDEX($A2:$G2,,MATCH(I$1,$A$1:$G$1,0)),INDEX($A2:$G2,,MATCH(RIGHT(I$1,2),$A$1:$B$1,0))*INDEX($A2:$G2,,MATCH(I$1,$A$1:$G$1,0)))

и подтвердите с помощью CTRL+SHIFT+ENTER . Просто нажмите ENTER .

Это в основном три формулы индекс / матч, умноженные вместе. Index / Matching использует левый и правый 2 символа вашего заголовка, чтобы найти столбец с соответствующим номером.

PS: Просто для кого-то еще, вот таблица информации в текстовой форме (чтобы вы могли копировать / вставлять). Скобки представляют собой пустой столбец, разделяющий остальные.

 A1 A5 [] A1_A5 A3_A1 A3_A5 A9_A5 [] A1_A5 A3_A1 A3_A5 A9_A5 16 16 61 17 38 46 41 6 6 58 22 95 39 38 19 37 92 14 98 99 64 74 53 88 14 35 92 47 34 58 18 76 93 20 54 25 94 47 78 37 96 44 32 25 61 61 66 39 9 74 31 43 75 22 8 19 14 83 9 89 
  • SUMIF игнорирует отрицательное число
  • Почему синтаксис для функции IF () листа с необязательными параметрами отличается от UDF?
  • Формула или макрос для группировки клеток в соответствии с их значениями
  • Если выражение в листе листа
  • IF / AND между двумя датами Условное форматирование
  • Использование числовых данных в 3 столбцах для получения текстового значения в 4-м столбце
  • Excel-функция для суммирования непустых столбцов, тогда найдите строку, если большинство
  • Excel VBA Скопируйте одну ячейку с некоторых листов и сохраните на другом листе
  • IF в R - Всегда вложенные?
  • VBA Для цикла IF Instr не находит подстроку
  • Как вы комбинируете вложенные операторы IF с несколькими результатами в Excel?
  • Давайте будем гением компьютера.