Condividi tramite

Excel - Estrarre 2 numeri da cella alfanumerica.

Anonimo
2017-11-13T14:18:29+00:00

Salve , 

Vi chiedo per piacere di aiutarmi : 

Ho due celle da compilare con due numeri , questi numeri mi vengono forniti da una serie di notizie ; ogni notizia mi da due numeri .

Il mio compito è , ignorando ogni parte di testo , mettere il primo numero nella prima cella ed il secondo nella seconda.

Il compito inoltre viene complicato dal fatto che tra tutte le notizie io devo attingere solo da quelle che iniziano con T:49 o T:79 .

Grazie mille per la disponibilità

Esempio:

Notizia 1 

Week 2 CL actual draw 2 mln bbls vs forecast build 1 mln bbls

Notizia 2

Pipeline cost for Alaska is now 40000$

Notizia 3

Week 4 CL actual build 5 mln bbls vs forecast draw 1 mln bbls

Delle tre notizie devo tener conto solo della prima e della terza poichè iniziano con la parola 'Week'

Devo inserire nelle caselle A1 e A2 il numero 2 ed il numero 1 (per la notizia1)

Devo inserire nelle caselle B1 e B2 il numero 5 ed il numero 2 (per la notizia2)

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

6 risposte

Ordina per: Più utili
  1. Anonimo
    2017-11-13T20:48:59+00:00

    Nell'attesa del secondo tempo della partita ...

    Non ho idea di come siano posizionati i dati da cui estrarre i numeri ma questa che segue:

    '<----

    Function EstraiDueNumeri(stringa As String) As Variant

      Dim oRegExp As Object: Set oRegExp = CreateObject("VBScript.RegExp")

      Dim oMatchs As Object

      Const srcPat1 = "^Week \d{1,}" '<--- cerca le strighe che iniziano per Week seguite da un numero

      Const srcPat2 = "\d{1,}" '<---cerca i soli numeri nella stringa

      Dim i As Long

      Dim bMatch As Boolean

      Dim arrNumeri(1 To 2, 1 To 1) As Variant

      With oRegExp

        .Global = True

        .IgnoreCase = False

        .Pattern = srcPat1

        bMatch = .Test(stringa)

        If bMatch Then

          stringa = .Replace(stringa, "")

          .Pattern = srcPat2

          Set oMatchs = .Execute(stringa)

          If oMatchs.Count = 2 The n

            For i = 0 To 1

              arrNumeri(i + 1, 1) = CDbl(oMatchs(i))

            Next i

          End If

        End If

      End With

      EstraiDueNumeri = arrNumeri

      Set oRegExp = Nothing

    End Function

    '<----

    è una funzione (FDU), presente nel Modulo1 del progetto VBA della cartella di lavoro, il cui argomento è una stringa di testo, e che se trova come testo iniziale Week # (dove # rappresenta un numero) estrae, se presenti, i primi due numeri successivi e li restituisce sotto forma di una matrice di due "righe" per una "colonna".

    Nel file di cui al seguente link:

    File esempio

    vedi come inserendo in forma matriciale la formula nelle due celle sottostanti i testi presenti in riga 1, celle vengono restituiti i numeri, ove presenti, dopo il testo Week e relativo numero di settimana.

    Questa funzione potrebbe essere utilizzata con una procedura VBA che richiami il testo presente nelle celle ed estragga i due numeri da riportare in un foglio.

    ciao

    edit: ho modificato la condizione, evidenziata in grassetto, impostando da "> 0" a "= 2"

    La risposta è stata utile?

    1 persona ha trovato utile questa risposta.
    0 commenti Nessun commento
  2. Anonimo
    2017-11-14T09:10:24+00:00

    Adesso provo , grazie mille ! :)

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2017-11-13T17:55:16+00:00

    Per questa:

    > Week 2 CL actual draw 2 mln bbls vs forecast build 1 mln bbls

    vedo due 2 e un 1 e immagino tu voglia il 2 seguito da mln e poi 1 seguito da mln (e non il 2 dopo Week).

    Per questa:

    > Week 4 CL actual build 5 mln bbls vs forecast draw 1 mln bbls

    ma dici di voler inserire il 5 e il 1, ma io non vedo alcun 2 :)

    Inoltre i numeri possono essere a più cifre? O sono sempre ad una sola cifra?

    Credo che per queste estrazioni la strada migliore sarebbe l'utilizzo di RegExp, anche se personalmente non ne conosco molto il funzionamento :).

    Ma probabilmente volendo, se la struttura fosse sempre la medesima (numero seguito da "mln"), un modo per etrarre i numeri si dovrebbe poter trovare :)

    ciao

    edit: in grassetto ho corretto il numero che io vedo (avevo erroneamente riportato sempre 2)

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2017-11-13T17:04:13+00:00

    Spero adesso sia più chiaro  , grazie :)

    La risposta è stata utile?

    0 commenti Nessun commento
  5. Anonimo
    2017-11-13T16:32:28+00:00

    Credo che inserire qualche esempio di come è composta la stringa di testo anche con le eccezioni che non dovrebbero essere prese in considerazione aiuterebbe chi potrebbe essere disponibile a dare una mano :)

    ciao

    La risposta è stata utile?

    0 commenti Nessun commento