Questo può essere fatto, ma richiede a VBA di sovrascrivere temporaneamente un valore numerico "segnaposto" nella tabella pivot con del testo. Per abilitare ciò, è necessario impostare EnableDataValueEditing = True per la tabella pivot. All'aggiornamento, si effettua una ricerca sul valore numerico del segnaposto e lo si sostituisce con il testo. Convolto, sì. Soluzione alternativa, sì. Ma fa il trucco. Notare che questo "si blocca" solo fino al successivo aggiornamento della tabella pivot, quindi questo codice deve essere attivato per ogni aggiornamento.
Ecco il codice che uso per farlo in uno dei miei progetti. Mettere questo in un modulo di codice standard:
Function Pivots_TextInValuesArea(pt As PivotTable, rngNumeric As Range, rngText As Range, Optional varNoMatch As Variant)
Dim cell As Range
Dim varNumeric As Variant
Dim varText As Variant
Dim varResult As Variant
Dim bScreenUpdating As Boolean
Dim bEnableEvents As Boolean
Dim lngCalculation As Long
On Error GoTo errHandler
With Application
bScreenUpdating = .ScreenUpdating
bEnableEvents = .EnableEvents
lngCalculation = .Calculation
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual
End With
varNumeric = rngNumeric
varText = rngText
pt.EnableDataValueEditing = True
'Setting this to TRUE allow users or this code to temporarily overwrite PivotTable cells in the VALUES area.
'Note that this only 'sticks' until the next time the PivotTable is refreshed, so this code needs to be
' triggerred on every refresh
For Each cell In pt.DataBodyRange.Cells
With cell
varResult = Application.Index(varText, Application.Match(.Value2, varNumeric, 0))
If Not IsError(varResult) Then
cell.Value2 = varResult
Else:
If Not IsMissing(varNoMatch) Then cell.Value2 = varNoMatch
End If
End With
Next cell
errHandler:
If Err.Number > 0 Then
If gbDebug Then
Stop: Resume
Else:
MsgBox "Whoops, there was an error: Error#" & Err.Number & vbCrLf & Err.Description _
, vbCritical, "Error", Err.HelpFile, Err.HelpContext
End If
End If
With Application
.ScreenUpdating = bScreenUpdating
.EnableEvents = bEnableEvents
.Calculation = lngCalculation
End With
End Function
Ed ecco il risultato: una tabella pivot con il testo nella zona VALORI:

Ecco la tabella di 'conversione' che dice il codice cosa visualizzare per ogni numero:

ho assegnato due intervalli denominati a questi, in modo che il mio codice k nows dove trovare la tabella di ricerca:
- tbl_PivotValues.TextValue
- tbl_PivotValues.NumericValue
... ed ecco come ho attivare la funzione e passare gli argomenti richiesti:
Option Explicit
Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
If Target.Name = "GroupView" Then Pivots_TextInValuesArea Target, [tbl_PivotValues.NumericValue], [tbl_PivotValues.TextValue]
End Sub
Questo codice va nel modulo del codice del foglio di lavoro che corrisponde al foglio di lavoro in cui si trova la tabella pivot:

Vedere [Devo usare i tag nei titoli?] (Http://meta.stackexchange.com/help/tagging). – pnuts
Io rispettosamente non sono d'accordo con la tua modifica. Il modo in cui hai modificato il mio titolo rende impossibile capire se la domanda si riferisce a Excel, a SQL o a uno dei software e lingue disponibili. Potresti dire che avrei potuto scrivere 'Pivot [...] in Excel' piuttosto che 'Excel: Pivot' (le piccole cose divertono le piccole menti ...) ma rimango convinto che citare Excel nel titolo sia importante, altrimenti il titolo diventa troppo ambiguo. –
Sentiti libero di tornare indietro. Ma sappiamo che il tuo post riguarda Excel dal tag e con 10M + domande lo spazio limitato in Titoli è, IMO, meglio utilizzato per * differenziare * il tuo Q dagli altri, piuttosto che perderlo tra 75k + altri Excel Q. cioè stavo cercando di far risaltare il tuo Q - potrebbe essere una migliore possibilità di risposte veloci/di qualità - ma se preferisci "fondere" ciò va bene per me. – pnuts