Replica di un modello di formula in Excel


0

Ho un foglio di calcolo che assomiglia a questo: Questo.

Voglio popolare la seconda tabella usando i valori della prima tabella. Il modo ovvio (e laborioso) sarebbe quello di farlo manualmente, ad es. B7 avrebbe la formula =B2, B8 sarebbe =D2e così via.

Esiste un modo per far riconoscere a Excel il modello, ovvero una colonna nella seconda tabella è uguale al valore di ogni secondo su una riga della prima tabella? Quando provo a trascinare in basso a destra nella cella viene seguito un modello errato.


Il modo in cui descrivi funzionerebbe - non sono sicuro del motivo per cui ritieni che sia laborioso, quindi sospetto che tu abbia "smorzato" la domanda per mantenerlo conciso (il che è bello), ma puoi spiegare perché è laborioso, per favore? :)
Dave,

Sì, ho "stupito" la domanda. I dati reali con cui ho a che fare sono una tabella molto più ampia e dovranno essere ripetuti su set di dati simili negli anni a venire
M Agil

VBa è un'opzione? È l'unico modo per automatizzare questo
Dave,

La soluzione di Mate ha funzionato perfettamente, grazie :)
M Agil

Risposte:


1

No, non esiste un modo esatto per farlo, hai due soluzioni alternative:

  1. Con trasposizione:

    • Elimina le colonne vuote
    • seleziona i tuoi dati e premi CTRL + C
    • vai a casa - incolla - trasponi
  2. con formula

    • riempire le intestazioni
    • in B7 inserire =INDEX($B$2:$H$4,MATCH(B$6,$A$2:$A$4,0),MATCH($A7,$B$1:$H$1,0))
    • riempi la formula in basso e a destra

0

Ho esaurito il tempo, quindi non prometto che sia efficiente o addirittura ben codificato, ma questo VBa funziona. (modifica e inoltre non ti rendevi conto di avere una risposta accettata, ma la conserverò comunque)

Non è disponibile alcuna opzione di annullamento quando si esegue VBa, quindi eseguire prima il backup.

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

Prima

inserisci qui la descrizione dell'immagine

Dopo

inserisci qui la descrizione dell'immagine

Come puoi vedere, non è necessario creare la seconda tabella, inoltre viene eseguita automaticamente

Come posso aggiungere VBA in MS Office?

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.