Convertir une chaîne de texte avec un tiret en un nombre négatif

2

Le courtier en ligne que j'utilise doit avoir le site Web le plus dysfonctionnel au monde! Ils ne fournissent aucune fonction "d'exportation", mais indiquent à leurs utilisateurs qu'ils peuvent simplement copier les données des tableaux affichés dans leur navigateur et les coller dans Excel. (Vraiment!)

Étonnamment, Excel (2016, pour Mac) peut être amené à convertir les "numéros de texte positifs" en nombres réels pouvant être gérés par les fonctions numériques ( SUM typiquement). Cependant, les "numéros de texte négatifs" ont défié tous les efforts que j'ai trouvés pour être convertis en un nombre négatif.

Un "numéro de texte positif" est égal à: 123,45 $
Un "numéro de texte négatif" est: - 543,21 $ (notez le caractère de texte en tête) hyphen )

MODIFIER:
Un "numéro de texte négatif" est: - 299,55 $ (découvert que le personnage principal est NE PAS une hyphen; ce peut être un em dash
Mes excuses pour la confusion ... Je me demande maintenant quel genre de programmeurs pourraient utiliser un em dash au lieu d'une minus sign/hyphen dans une page Web pleine de chiffres, mais c'est une question pour mon courtier en ligne .

Je suis capable de convertir un "numéro de texte positif" dans la cellule A1 comme suit: =VALUE(RIGHT(A1,6))

Mais cela ne fonctionne pas sur un "numéro de texte négatif". Le nombre est correct, mais le signe négatif est perdu. J'ai essayé de changer le chars valeur, mais cela n'aide pas.

J'ai aussi essayé ce qui suit sans succès:
1. multipliant par 1
2. texte en colonnes
3. cellules de format ...

Y a-t-il un moyen de le faire - autre que de le ressaisir manuellement?

Seamus
la source
Je suis capable de convertir un "numéro de texte positif" dans la cellule A1 comme suit: =VALUE(RIGHT(A1,6)) Vous extrayez une partie du milieu de la valeur de la cellule. Le texte est rempli à gauche avec des espaces? Si c'est le cas, une valeur de texte avec une valeur numérique négative est-elle décalée d'un trait d'union? Ou un trait d'union remplace-t-il un espace en 4ème position?
Akina

Réponses:

1

Si la cellule A1 contient texte c'est-à-dire au format "123,45 $" ou "- 543,21 $", vous pouvez utiliser la formule suivante pour obtenir la valeur numérique.

=IF(LEFT(A1,1)="-",0-VALUE(RIGHT(A1,LEN(A1)-1)),VALUE(A1))

Si le texte commence par un "-", cela prendra la valeur de tout ce qui suit le "-" et le rendra négatif.

Blackwood
la source
Cela n'a pas fonctionné au début à cause peut-être de mon ignorance: je devais faire un petit changement car je n'obtenais pas une valeur VRAIE au symbole que vous avez cité dans votre macro. J'ai copié et collé quel que soit le caractère de ma cellule "numéro de texte négatif" par-dessus celle que vous avez suggérée; c'est à dire. =IF(LEFT(I8,1)="–",0-VALUE(RIGHT(I8,LEN(I8)-1)),VALUE(I8)) (Remarque I8 plutôt que A1 est immatériel)
Seamus
0

Je recommanderais:

  1. Extraire la valeur après $ signe, ne pas utiliser la position fixe
  2. Vérifiez le signe de valeur en cochant un symbole immédiatement avant $ signe.

Donc, la formule peut être

=IF(IF(ISERROR(FIND(MID(A1,FIND("$",A1)-1,1),"<dash><hyphen>")),3,FIND(MID(A1,FIND("$",A1)-1,1),"<dash><hyphen>"))<3,-MID(A1,FIND("$",A1)+1,LEN(A1)),0+MID(A1,FIND("$",A1)+1,LEN(A1)))

"<dash><hyphen>" - un littéral avec des signes négatifs possibles (remplacez les espaces réservés par des caractères appropriés dans n'importe quel ordre, afin d'obtenir un littéral à 2 symboles dans le cas indiqué)

3 - le nombre qui est supérieur au nombre de caractères dans le littéral précédent

Ces valeurs peuvent être remplacées par une référence à une cellule contenant tous les signes "moins" possibles (comme Z1 et 1+LENGTH(Z1) respectivement).


Mettre à jour. Debugginig la formule.

Créez une table sur une feuille de calcul vide.

Insérez 4 valeurs différentes dans la colonne A (sans / avec les espaces de début, positif / négatif).

Insérer les formules ci-dessous:

Cell          Formula                      Meaning
-------------------------------------------------------------
$B$1          =IF(I1,-G1,0+G1)             Result
$C$1          =LEN(A1)                     Data length in source
$D$1          =FIND("$",A1)                $ position in source
$E$1          =MID(A1,D1-1,1)              symbol before $
$F$1          =FIND(E1,"<dash><hyphen>")   symbol before $ position in hyphens list
$G$1          =MID(A1,D1+1,C1)             number from source
$H$1          =ISERROR(F1)                 correction when no symbol before $ in list
$I$1          =IF(H1,3,F1)<3               define is a source positive or negative

Copiez ce pack de formules aux lignes 2 à 4. Vérifiez que vous obtenez une sortie comme ceci:

     A        B      C   D   E      F       G    H       I
1    $123     123    4   1   #VAL!  #VAL!   123  TRUE    FALSE   
2    -$234    -234   5   2   -      1       234  FALSE   TRUE    
3      $345   345    6   3          #VAL!   345  TRUE    FALSE   
4      -$456  -456   7   4   -      1       456  FALSE   TRUE    

Les colonnes C-I contiennent des étapes de calcul uniques et la colonne B contient la formule finale avec toutes les substitutions.

Où est l'échec du calcul?

Akina
la source
Votre macro semble convertir un "nombre de texte négatif" en un nombre réel, mais je ne parviens pas à le transformer en nombre réel négatif. J'ai remplacé & dt; dash & gt; & lt; trait d'union & gt; dans votre macro avec deux personnages: -–. Le premier caractère est le trait d'union / moins de mon clavier MacBook et le second est le caractère qui se trouvait dans les données que j'ai collées dans Excel. Je pense que c'est un "em dash"? Et oui, j’ai qualifié le personnage principal de "trait d’union" dans ma question, mais j’ai appris lors du test d’une autre réponse ici que c’était ne pas un trait d'union.
Seamus
continuer: est-ce que je manque quelque chose? Ai-je mal compris la substitution dans votre macro?
Seamus
@Seamus Debugging ajouté. Essayer. Ai-je mal compris la substitution dans votre macro? Non, mais j'ai bien peur que les symboles soient "cassés" lors de la copie en parallèle ... Essayez de les vérifier - recherchez un code de trait d'union dans les données source.
Akina
Je vais essayer cela dès que je le pourrai et vous informer du résultat.
Seamus