2013-05-31 15:52:45 +0000 2013-05-31 15:52:45 +0000
8
8

Come si scrive una formula Excel che incollerà un valore specifico in un'altra cella?

Quindi fondamentalmente voglio scrivere una formula che controllerà una condizione, e se questa condizione è soddisfatta, allora voglio incollare una specifica riga di testo in una cella diversa. Devo notare che non voglio che la formula esista nella cella in cui voglio incollare un valore. Così, per esempio, se voglio incollare un valore in B5, non voglio che la formula sia nella cella B5…

Risposte (4)

7
7
7
2013-06-02 23:43:38 +0000

Il seguente approccio fa uso di un workaround descritto qui e qui per permettere a una funzione del foglio di lavoro definita in VBA di impostare il valore di un'altra cella.

La funzione personalizzata memorizza in variabili globali l'indirizzo della cella di destinazione e il valore a cui quella cella deve essere impostata. Poi, una macro che viene attivata quando il foglio di lavoro ricalcola legge le variabili globali e imposta la cella di destinazione al valore specificato.

L'uso della funzione personalizzata è semplice:

=SetCellValue(target_cell, value)

dove target_cell è un riferimento a una cella del foglio di lavoro (per esempio, “A1”) o un'espressione che valuta un tale riferimento. Questo include un'espressione come =B14 dove il valore di B14 è “A1”. La funzione può essere usata in qualsiasi espressione valida.

SetCellValue restituisce 1 se il valore viene scritto con successo nella cella di destinazione, e 0 altrimenti. Qualsiasi contenuto precedente della cella di destinazione viene sovrascritto.

Sono necessari tre pezzi di codice:

  • il codice che definisce SetCellValue stesso
  • la macro che viene attivata dall'evento di calcolo del foglio di lavoro; e
  • una funzione di utilità IsCellAddress per assicurare che target_cell sia un indirizzo di cella valido.

Codice per la funzione SetCellValue

Questo codice deve essere incollato in un modulo standard inserito nella cartella di lavoro. Il modulo può essere inserito tramite il menu dell'editor di Visual Basic, a cui si accede selezionando Visual Basic dalla scheda Developer del nastro.

Option Explicit

  Public triggerIt As Boolean
  Public theTarget As String
  Public theValue As Variant

  Function SetCellValue(aCellAddress As String, aValue As Variant) As Long

      If (IsCellAddress(aCellAddress)) And _
             (Replace(Application.Caller.Address, "$", "") <> _
              Replace(UCase(aCellAddress), "$", "")) Then
          triggerIt = True
          theTarget = aCellAddress
          theValue = aValue
          SetCellValue = 1
      Else
          triggerIt = False
          SetCellValue = 0
      End If

  End Function

Worksheet\Calculate Macro Code

Questo codice deve essere incluso nel codice specifico del foglio di lavoro in cui userete SetCellValue. Il modo più semplice per farlo è cliccare con il tasto destro del mouse sulla scheda del foglio di lavoro nella vista Home, selezionare View Code, e poi incollare il codice nel pannello dell'editor che si apre.

Private Sub Worksheet_Calculate()

      If Not triggerIt Then
          Exit Sub
      End If
      triggerIt = False
      On Error GoTo CleanUp
      Application.EnableEvents = False
      Range(theTarget).Value = theValue
  CleanUp:
      Application.EnableEvents = True
      Application.Calculate

  End Sub

Codice per la funzione IsCellAddress

Questo codice può essere incollato nello stesso modulo del codice SetCellValue.

Function IsCellAddress(aValue As Variant) As Boolean

      IsCellAddress = False

      Dim rng As Range ' Input is valid cell reference if it can be
      On Error GoTo GetOut ' assigned to range variable
      Set rng = Range(aValue)
      On Error GoTo 0

      Dim colonPos As Long 'convert single cell "range" address to
      colonPos = InStr(aValue, ":") 'single cell reference ("A1:A1" -> "A1")
      If (colonPos <> 0) Then
          If (Left(aValue, colonPos - 1) = _
                Right(aValue, Len(aValue) - colonPos)) Then
              aValue = Left(aValue, colonPos - 1)
          End If
      End If

      If (rng.Rows.Count = 1) And _
          (rng.Columns.Count = 1) And _
          (InStr(aValue, "!") = 0) And _
          (InStr(aValue, ":") = 0) Then
          IsCellAddress = True
      End If 'must be single cell address in this worksheet
      Exit Function

  GetOut:

  End Function
2
2
2
2013-06-02 05:30:07 +0000

Supponiamo che vogliate che il testo “Testo A” appaia nella cella C5 se la cella B5 contiene il valore “verde”.

Si può usare una formula, ma poiché le formule non possono cambiare i valori in altre celle, la formula dovrà essere inserita nella cella C5.

=IF(ISNUMBER(FIND("green",B5)),"Text A","")

La cella C5 ora mostrerà solo “Testo A” se B5 contiene la parola “verde”.

Una formula come questa può essere costruita per lavorare con molte condizioni. Dovete definire le vostre esigenze per ottenere aiuto sulla vostra situazione specifica.

Se non vuoi che C5 abbia una formula, puoi anche usare un approccio VBA. Puoi eseguire un evento Worksheet Change che verrà eseguito ogni volta che la cella B5 viene cambiata, o modificando manualmente il valore o incollando qualcosa in essa.

Un esempio per una tale macro potrebbe essere

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B5")) Is Nothing Then
    If InStr(1, Target, "green", vbTextCompare) Then
        Target.Offset(0, 1) = "Text A"
    End If
End If
End Sub

Le condizioni e il posizionamento dell'output sono solo un esempio, naturalmente e devono essere adattati alle vostre esigenze.

La differenza tra la formula e l'approccio macro è

  • con l'approccio della formula, la cella C5 conterrà una formula. Se l'utente cancella accidentalmente la formula, anche la funzionalità che fornisce sarà cancellata. (Ci sono modi per gestire questo, però)
  • con la macro VBA, la cella C5 non mostrerà alcuna formula, e avrà il testo verbatim come valore, ma cambiare la configurazione richiede la conoscenza di Excel VBA. Inoltre, con un approccio VBA, la cartella di lavoro deve essere salvata come una cartella di lavoro abilitata alle macro e l'utente deve consentire le macro o rendere il file un file affidabile.

Nota: quanto sopra è solo un esempio. Dovete definire i vostri requisiti, se valutare numeri o testo, se la valutazione è sensibile alle maiuscole e alle minuscole, quali sono le regole di valutazione, dove posizionare il risultato, ecc.

1
1
1
2019-10-06 11:03:17 +0000

Per controllare se una condizione è soddisfatta, scrivi una formula IF in qualche cella per aggiornare “una specifica riga di testo in un'altra cella”. La cella del risultato conterrà solo il valore della formula, NON la formula che ha generato quel valore, così:

Cella di lavoro (es. J5) =IF(A1="yes","Specific line of text","") Cella di risultato (es. B5) =J5

Quindi se la condizione è soddisfatta (A1=“sì”), B5 conterrà “specifica riga di testo”. Altrimenti rimane vuota.

Note: Le celle che hanno valori variabili normalmente contengono un qualche tipo di formula per aggiornare continuamente i loro valori.

Se non vuoi che nessuno sappia la vera formula che sta creando il valore, la formula può andare in qualche altra cella per generare il valore, che sarà poi copiato nella cella del risultato, per esempio B5.

Per nascondere la formula che ha generato il valore o per nascondere la cella a cui si riferisce B5 (per continuare a controllare se il valore deve essere aggiornato), fare riferimento a: https://support.office.com/en-us/article/display-or-hide-formulas-f7f5ab4e-bf24-4efc-8fc9-0c1b77a5356f

Altre funzioni che possono ottenere lo stesso effetto sono CHOOSE, HLOOKUP, LOOKUP, VLOOKUP.

-1
-1
-1
2020-01-17 07:27:23 +0000

=value(cell)

Formula semplice da usare, ho avuto lo stesso problema e funziona.