Репликация шаблона формулы в Excel

651
M Agil

У меня есть таблица, которая выглядит следующим образом : этот.

Я хочу заполнить вторую таблицу, используя значения из первой таблицы. Очевидным (и трудоемким способом) будет сделать это вручную, например, B7 будет иметь формулу =B2, B8 будет =D2и так далее.

Есть ли способ заставить Excel распознавать шаблон, т.е. один столбец во второй таблице равен каждому второму значению в строке в первой таблице? Когда я пытаюсь перетащить нижний правый угол ячейки, получается неправильный шаблон.

0
Ручной способ, которым вы описываете, сработал бы - я не уверен, почему вы чувствуете, что это трудоемко, поэтому я подозреваю, что вы «ошарашены» в вопросе, чтобы сохранить его кратким (что круто), но не могли бы вы объяснить, почему это трудоемко, пожалуйста? :) Dave 8 лет назад 0
Да, я «ошеломил» этот вопрос. Реальные данные, с которыми я имею дело, представляют собой таблицу намного большего размера, и в последующие годы ее необходимо будет повторить для аналогичных наборов данных. M Agil 8 лет назад 0
VBa вариант? Это единственный способ автоматизировать это Dave 8 лет назад 0
Решение Мате сработало отлично, спасибо :) M Agil 8 лет назад 0

2 ответа на вопрос

1
Máté Juhász

Нет, точного пути для этого нет, у вас есть два обходных пути:

  1. С транспонирования:

    • Удалить пустые столбцы
    • выберите ваши данные и нажмите CTRL + C
    • пойти домой - вставить - транспонировать
  2. с формулой

    • заполнить заголовки
    • в B7 введите =INDEX($B$2:$H$4,MATCH(B$6,$A$2:$A$4,0),MATCH($A7,$B$1:$H$1,0))
    • заполнить формулу вниз и вправо
0
Dave

У меня закончилось время, поэтому я не обещаю, что это эффективно или даже хорошо написано, но этот VBa работает. (отредактируйте, а также не поняли, что у вас есть принятый ответ, но сохраните его в любом случае)

При запуске VBa опция отмены отсутствует, поэтому сначала выполните резервное копирование.

Option Explicit  Sub doTheThing()  Dim userStartRowInColA As Integer userStartRowInColA = 2 'update this as needed, in your example I assume the rows start on row 2  Dim userColDifference As Integer userColDifference = 2 'in your example, the top table is every 2 rows, hence the 2    Dim startRowInColA As Integer startRowInColA = userStartRowInColA  Dim vals As String vals = ""  Dim items As String items = ""  Dim valsMissedTwo As Boolean valsMissedTwo = False  Dim startCol As Integer startCol = 65  Do While (True)  Dim col As String col = Chr(startCol)  If Range(col & 1).Value = "" And valsMissedTwo Then Exit Do Else valsMissedTwo = False End If  If Range(col & 1).Value = "" And Not valsMissedTwo Then valsMissedTwo = True End If  If Range(col & 1).Value <> "" Then vals = vals + Range(col & 1).Value + "," End If   startCol = startCol + 1 Loop    Do While Range("A" & startRowInColA).Value <> ""  items = items + Range("A" & startRowInColA).Value + ","  startRowInColA = startRowInColA + 1 Loop   Dim table2StartCol As Integer Dim table2StartRow As Integer table2StartRow = startRowInColA + 1 table2StartCol = 66   Dim splitVals() As String splitVals = Split(vals, ",")  Dim splitItems() As String splitItems = Split(items, ",")  'add the items as cols For startCol = 1 To UBound(splitItems) If splitItems(startCol - 1) <> "" Then Range(Chr(65 + startCol) & startRowInColA + 5).Value = splitItems(startCol - 1) End If Next startCol   'add the vals on left as rows  For startCol = 1 To UBound(splitVals) If splitVals(startCol - 1) <> "" Then Range("A" & startCol + startRowInColA + 5).Value = splitVals(startCol - 1) End If Next startCol  'now to populate  Dim sr As Integer sr = startRowInColA + 6  Dim sc As Integer sc = 66  Dim oSr As Integer oSr = userStartRowInColA   Dim i As Integer i = 0  Dim j As Integer j = 0    Do While (True) Do While Range(Chr(sc) & oSr).Value <> ""  Range(Chr(sc + i) & sr).Value = Range(Chr(sc + j) & oSr).Value  i = i + 1 oSr = oSr + 1  Loop  j = j + userColDifference i = 0 oSr = userStartRowInColA sr = sr + 1 If Range("A" & sr).Value = "" Then Exit Do End If  Loop   End Sub 

До

enter image description here

После

enter image description here

Как видите, вам не нужно создавать вторую таблицу, это также делается автоматически

Как добавить VBA в MS Office?

Похожие вопросы