Bob ha un foglio di lavoro con i nomi dei membri in basso a sinistra e i mesi dell’anno in alto. In ogni cella della griglia inserisce le date in cui si verificano le riunioni cui ha partecipato il membro. Bob sta cercando un modo per dire a colpo d’occhio chi non ha incontrato chi.

Esistono diversi modi in cui è possibile affrontare una soluzione a questo problema. Se il design del tuo tavolo è flessibile, puoi “semplificare” le cose cambiando il modo in cui è disposto il tuo tavolo. Invece di mettere i mesi nelle colonne, puoi semplicemente fare in modo che ogni colonna sia una data di riunione.

Quindi, ogni cella potrebbe contenere una sorta di indicatore (un numero o un carattere) che indica la persona che ha partecipato alla riunione in quella particolare data. Sarebbe stato un processo relativamente facile capire chi non aveva incontrato chi:

  1. Scegli il membro chiave, quello che desideri controllare e spostalo all’inizio della tabella dei dati.

  2. Ordinare la tabella dei dati orizzontalmente sulla riga del membro chiave, in modo che tutte le riunioni a cui ha partecipato il membro chiave si trovino nelle colonne più a sinistra.

  3. Ordinare verticalmente tutti tranne il membro chiave nelle prime tre date della riunione. Tutti coloro che hanno incontrato il membro chiave in quei tre incontri sono ora in cima alla tabella dei dati, appena sotto il membro chiave.

  4. Spostati verso il basso nella tabella dei dati e seleziona tutti coloro che non hanno ancora incontrato il membro chiave e ordina le tre date della riunione successive.

  5. Ripetere i passaggi 3 e 4 fino a quando tutte le date della riunione non sono state ordinate.

  6. Tutti coloro che rimangono in fondo alla tabella dei dati (quelli non selezionati nei passaggi 3 e 4) non hanno mai incontrato il membro chiave.

Se non è possibile modificare il formato della tabella, è necessaria una soluzione macro. Ci sono molti approcci che potrebbero essere usati in una macro, ma il seguente è forse il più diretto:

Sub PeopleNotMet()

Dim rTable As Range     Dim rOutput As Range     Dim iCols As Integer     Dim iCol As Integer     Dim iRows As Integer     Dim iRow As Integer     Dim iCompRow As Integer     Dim sNotMet As String     Dim sMet As String

Set rTable = Worksheets("Sheet1").Range("A1").CurrentRegion     Set rOutput = Worksheets("Sheet2").Range("a1")

sNotMet = "X"

sMet = ""



Application.ScreenUpdating = False     With rTable         iRows = .Rows.Count         iCols = .Columns.Count                  .Columns(1).Copy         With rOutput             .PasteSpecial             .PasteSpecial Transpose:=True             Application.CutCopyMode = False             Range(.Offset(1, 1), .Offset(iRows - 1, _               iRows - 1)).Value = sNotMet             Range(.Offset(1, 1), .Offset(iRows - 1, _               iRows - 1)).HorizontalAlignment = xlCenter         End With     End With     With rTable.Cells(1)

For iRow = 1 To iRows - 1             For iCol = 1 To iCols - 1                 For iCompRow = 1 To iRows - 1                     If Not (IsEmpty(.Offset(iRow, iCol))) Then                         If Not (IsEmpty(.Offset(iCompRow, iCol))) Then                             If .Offset(iRow, iCol).Value = _                               .Offset(iCompRow, iCol).Value Then _                               rOutput.Offset(iRow, iCompRow).Value = sMet                         End If                     End If                 Next             Next         Next     End With

Set rTable = Nothing     Set rOutput = Nothing     Application.ScreenUpdating = True End Sub

Questa macro presuppone un paio di cose. Innanzitutto, si presume che la tabella dati originale di Bob si trovi su Sheet1, a partire dalla cella A1. In secondo luogo, si presuppone che la tabella “chi non ha incontrato chi” dovrebbe essere su Sheet2, a partire dalla cella A1. Se questi presupposti sono corretti, quando si esegue la macro, la tabella creata su Sheet2 mostra i nomi in basso a sinistra e i nomi in alto. Le celle che si intersecano non conterranno nulla (il che significa che le persone si sono incontrate) o una X maiuscola (il che significa che non si sono incontrate).

_Nota: _

Se desideri sapere come utilizzare le macro descritte in questa pagina (o in qualsiasi altra pagina dei siti ExcelTips), ho preparato una pagina speciale che include informazioni utili.

ExcelTips è la tua fonte di formazione economica su Microsoft Excel.

Questo suggerimento (2304) si applica a Microsoft Excel 97, 2000, 2002 e 2003. Puoi trovare una versione di questo suggerimento per l’interfaccia a nastro di Excel (Excel 2007 e versioni successive) qui: