web-dev-qa-db-fra.com

Comment obtenir Excel pour afficher un certain nombre de chiffres significatifs?

J'utilise Excel et je souhaite afficher une valeur correspondant à un certain nombre de chiffres significatifs.

J'ai essayé d'utiliser l'équation suivante

=ROUND(value,sigfigs-1-INT(LOG10(ABS(value))))

avec valeur remplacée par le nombre que j'utilise et sigfigs remplacé par le nombre de chiffres significatifs que je veux.

Cette formule fonctionne parfois, mais parfois pas.

Par exemple, la valeur 18,036 passera à 18, ce qui donne deux chiffres significatifs. La solution consiste à modifier le formatage source afin de conserver une décimale. Mais cela peut introduire un chiffre supplémentaire important. Par exemple, si le résultat est 182 et que la décimale le fait passer à 182,0, je disposerais maintenant de 4 chiffres au lieu de 3.

Comment puis-je demander à Excel de définir le nombre de chiffres de signature pour que je n’aie pas à le calculer manuellement?

7
Veridian

La formule (A2 contient la valeur et les sigfigs B2)

=ROUND(A2/10^(INT(LOG10(A2))+1),B2)*10^(INT(LOG10(A2))+1)

peut vous donner le numéro que vous voulez, par exemple, en C2. Mais si le dernier chiffre est zéro, il ne sera pas affiché avec un format général. Vous devez ensuite appliquer un format numérique spécifique à cette combinaison (valeur, sigfigs), via VBA. Ce qui suit devrait fonctionner. Vous devez passer trois paramètres (val,sigd,trg), trg est la cellule cible à formater, où vous avez déjà le numéro que vous souhaitez.

Sub fmt(val As Range, sigd As Range, trg As Range)
    Dim fmtstr As String, fmtstrfrac As String
    Dim nint As Integer, nfrac As Integer
    nint = Int(Log(val) / Log(10)) + 1
    nfrac = sigd - nint
    If (sigd - nint) > 0 Then
      'fmtstrfrac = "." & WorksheetFunction.Rept("0", nfrac)
      fmtstrfrac = "." & String(nfrac, "0")
    Else
      fmtstrfrac = ""
    End If
    'fmtstr = WorksheetFunction.Rept("0", nint) & fmtstrfrac
    fmtstr = String(nint, "0") & fmtstrfrac
    trg.NumberFormat = fmtstr
End Sub

Si cela ne vous dérange pas d’avoir une chaîne au lieu d’un nombre, vous pouvez obtenir la chaîne de format (en D2, par exemple)

=REPT("0",INT(LOG10(A2))+1)&IF(B2-(INT(LOG10(A2))+1)>0,"."&REPT("0",B2-(INT(LOG10(A2))+1)),"")

(cela reproduit le code VBA) et ensuite utiliser (dans, disons, E2)

=TEXT(C2,D2).

où la cellule C2 a encore la formule ci-dessus. Vous pouvez utiliser la cellule E2 à des fins de visualisation et le nombre obtenu en C2 pour d’autres calculs, si nécessaire.

4
sancho.s

Utilisez la notation scientifique, si vous avez 180000 et vous avez besoin de 4 sigfigs, le seul moyen est de taper 1.800x10 ^ 5

3
aberg

AVERTISSEMENT: une formule Excel longue comme un fou

Je cherchais également à travailler avec des personnalités importantes et je ne pouvais pas utiliser VBA, car les feuilles de calcul ne pouvaient pas les supporter. Je suis allé à cette question/réponse et à de nombreux autres sites, mais toutes les réponses ne semblent pas traiter tous les chiffres tout le temps. La réponse acceptée m’intéressait et c’était proche, mais dès que mes chiffres étaient inférieurs à 0,1, j’ai une valeur #! Erreur. Je suis sûr que j'aurais pu le réparer, mais j'étais déjà sur un chemin et je continuais d'avancer.

Problème:

J'avais besoin de signaler un nombre variable de chiffres significatifs en mode positif et négatif avec des nombres de 10 ^ -5 à 10 ^ 5. De plus, selon le client (et pour calcul violet ), si une valeur de 100 était fournie et était exacte à +/- 1 et que nous souhaitons présenter avec 3 chiffres, la réponse devrait être '100.' donc j'ai inclus cela aussi.

Solution:

Ma solution est une formule Excel qui renvoie la valeur de texte avec les chiffres significatifs requis pour les nombres positifs et négatifs.

Il s'agit de long, mais semble générer les résultats corrects définis dans les tests (décrits ci-dessous), quels que soient le nombre et les chiffres significatifs demandés. Je suis sûr que cela peut être simplifié, mais ce n'est pas dans la portée actuelle. Si quelqu'un veut suggérer une simplification, laissez-moi s'il vous plaît un commentaire!

=TEXT(IF(A1<0,"-","")&LEFT(TEXT(ABS(A1),"0."&REPT("0",sigfigs-1)&"E+00"),sigfigs+1)*10^FLOOR(LOG10(TEXT(ABS(A1),"0."&REPT("0",sigfigs-1)&"E+00")),1),(""&(IF(OR(AND(FLOOR(LOG10(TEXT(ABS(A1),"0."&REPT("0",sigfigs-1)&"E+00")),1)+1=sigfigs,RIGHT(LEFT(TEXT(ABS(A1),"0."&REPT("0",sigfigs-1)&"E+00"),sigfigs+1)*10^FLOOR(LOG10(TEXT(ABS(A1),"0."&REPT("0",sigfigs-1)&"E+00")),1),1)="0"),LOG10(TEXT(ABS(A1),"0."&REPT("0",sigfigs-1)&"E+00"))<=sigfigs-1),"0.","#")&REPT("0",IF(sigfigs-1-(FLOOR(LOG10(TEXT(ABS(A1),"0."&REPT("0",sigfigs-1)&"E+00")),1))>0,sigfigs-1-(FLOOR(LOG10(TEXT(ABS(A1),"0."&REPT("0",sigfigs-1)&"E+00")),1)),0)))))

Remarque: J'ai une plage nommée appelée "sigfigs" et mes numéros commencent dans la cellule A1.

Résultats de test:

Je l'ai testé par rapport à la liste d'exemples de wikipedia et à mes propres exemples jusqu'ici, en positif et en négatif. J'ai également testé avec quelques valeurs qui m'ont donné des problèmes très tôt et qui semblent toutes produire les bons résultats.

Results from Wikipedia examples

J'ai également testé quelques valeurs qui m'ont donné des problèmes très tôt et qui semblent toutes maintenant produire les résultats corrects.

3 Sig Figs Test

99.99 -> 100.
99.9 -> 99.9
100 -> 100.
101 -> 101

Remarques:

Traiter les nombres négatifs

Pour traiter les nombres négatifs, j'ai inclus une concaténation avec un signe négatif si inférieur à 0 et utilise la valeur absolue pour tous les autres travaux.

Méthode de construction: Il a été initialement divisé en environ 6 colonnes dans Excel qui ont exécuté les différentes étapes. À la fin, j’ai fusionné toutes les étapes en une seule formule ci-dessus.

3
Sisyphus

C'est une vieille question, mais j'ai modifié le code VBA de sancho.s afin que ce soit une fonction qui prend deux arguments: 1) le nombre que vous voulez afficher avec les chiffres appropriés (val), et 2) le nombre de sig figs (sigd). Vous pouvez l'enregistrer en tant que fonction complémentaire dans Excel pour l'utiliser comme fonction normale:

Public Function sigFig(val As Range, sigd As Range)
    Dim nint As Integer
    Dim nfrac As Integer
    Dim raisedPower As Double
    Dim roundVal As Double
    Dim fmtstr As String
    Dim fmtstrfrac As String

    nint = Int(Log(val) / Log(10)) + 1
    nfrac = sigd - nint

    raisedPower = 10 ^ (nint)
    roundVal = Round(val / raisedPower, sigd) * raisedPower

    If (sigd - nint) > 0 Then
        fmtstrfrac = "." & String(nfrac, "0")
    Else
        fmtstrfrac = ""
    End If

    If nint <= 0 Then
        fmtstr = String(1, "0") & fmtstrfrac
    Else
        fmtstr = String(nint, "0") & fmtstrfrac
    End If

    sigFig = Format(roundVal, fmtstr)
End Function

Cela semble fonctionner dans tous les cas d'utilisation que j'ai essayés jusqu'à présent.

2
ken

J'ai ajouté à votre formule pour qu'elle affiche également automatiquement le nombre correct de décimales. Dans la formule ci-dessous, remplacez le chiffre "2" par le nombre de décimales souhaité, ce qui signifie que vous devrez effectuer quatre remplacements. Voici la formule mise à jour:

=TEXT(ROUND(A1,2-1-INT(LOG10(ABS(A1)))),"0"&IF(INT(LOG10(ABS(ROUND(A1,2-1-INT(LOG10(ABS(A1)))))))<1,"."&REPT("0",2-1-INT(LOG10(ABS(ROUND(A1,2-1-INT(LOG10(ABS(A1)))))))),""))

Par exemple, si la cellule A1 avait la valeur = 1/3000, ce qui correspond à 0,000333333 .., la formule ci-dessus, telle qu'écrite, génère 0,00033.

1
DavidMack

Arrondir aux chiffres significatifs est une chose… dont nous avons parlé plus haut. Formater en un nombre spécifique de chiffres en est un autre ... et je le posterai ici pour ceux qui essaient de faire ce que j'étais et qui se retrouvent ici (comme je le ferai probablement à l'avenir) ...

Exemple pour afficher quatre chiffres:

.

Utiliser Accueil> Styles> Mise en forme conditionnelle

Nouvelle règle> Formater uniquement les cellules contenant

Valeur de la cellule> entre> -10> 10> Format Numéro 3 décimales

Nouvelle règle> Formater uniquement les cellules contenant

Valeur de cellule> entre> -100> 100> Format Numéro 2 décimales

Nouvelle règle> Formater uniquement les cellules contenant

Valeur de cellule> entre> -1000> 1000> Format Nombre 1 décimale

Nouvelle règle> Formater uniquement les cellules contenant

Valeur de la cellule> pas entre> -1000> 1000> Format Numéro 0 décimale

.

Assurez-vous qu'ils sont dans cet ordre et cochez toutes les cases "Stop If True".

1
dox

Tu pourrais essayer

=ROUND(value,sigfigs-(1+INT(LOG10(ABS(value)))))

valeur :: Le nombre que vous souhaitez arrondir. 

sigfigs :: Le nombre de chiffres significatifs que vous souhaitez arrondir.

0
Rooster

En tant que mesure d’affichage très simple, sans devoir utiliser la fonction d’arrondi, vous pouvez simplement changer le format du nombre et supprimer 3 chiffres significatifs en ajoutant un point décimal après le nombre. 

C'est à dire. #, ###. montrerait les nombres en milliers. #, ### .. indique les nombres en millions. 

J'espère que cela t'aides

0
Don

Vous pouvez plutôt essayer un formatage personnalisé.

Voici un cours intensif: https://support.office.com/en-nz/article/Create-a-custom-number-format-78f2a361-936b-4c03-8772-09fab54be7f4?ui=en-US&rs=en -NZ & ad = NZ .

Pour trois chiffres significatifs, je tape ceci dans la zone de type personnalisé: [> 100] ##. 0; [<= 100] #, ## 0

0
Alexis

La formule ci-dessous fonctionne bien. Le nombre de chiffres significatifs est défini dans la première formule du texte. 0.00 et 4 pour 3sf, 0.0 et 3 pour 2sf, 0.0000 et 6 pour 5sf, etc.

=(LEFT((TEXT(A1,"0.00E+000")),4))*POWER(10,
(RIGHT((TEXT(A1,"0.00E+000")),4)))

La formule est valable pour E +/- 999, si vous avez un nombre supérieur à celui-ci, augmentez le nombre des trois derniers zéros et modifiez le deuxième 4 en nombre +1. 

Notez que les valeurs affichées sont arrondies aux chiffres significatifs et ne doivent être utilisées que pour l'affichage/la sortie. Si vous effectuez d'autres calculs, utilisez la valeur d'origine dans A1 pour éviter de propager des erreurs mineures.

0
Geoff Willis