Wie kann ich Zahlen in Google Sheets dezimal ausrichten?

13

In Google Sheets möchte ich Zahlen dezimal ausrichten, ohne nachgestellte Nullen im Bruchteil hinzuzufügen.

Instead of:  I want:
+------+     +------+
|  56.0|     |  56  |
|  27.0|     |  27  |
|  83.0|     |  83  |
|   2.4|     |   2.4|
|   1.2|     |   1.2|
| 120.0|     | 120  |
+------+     +------+

Das Format der ersten Spalte lässt sich leicht festlegen (z. B. mithilfe des Formats "0.0" oder einfach durch Festlegen benutzerdefinierter Dezimalstellen unter der Schaltfläche 123).

In Excel wird das Format der zweiten Spalte meines Erachtens mit dem Format "0?"

Umgehung

Es ist möglich, nachfolgende Zeichen durch Ersetzen zu erzwingen:

= Substitute( Text( formula ; "0.0" ) ; ".0" ; "  ")
= Substitute( Text( formula ; "0.0" ) ; ".0" ; "__" )

Hinweis: Die beiden ersetzten Leerzeichen sind nicht U + 0020 SPACE, sondern U + 2002 EN SPACE . ( U + 00A0 NO-BREAK SPACE funktioniert auch.)

Einige unerwünschte Nebenwirkungen dieser Problemumgehung sind, dass es

  • Ändert nicht nur das Anzeigeformat, sondern auch den Wert der Zelle
  • erfordert die Verwendung einer monospaced Schriftart in der Zelle
  • Das nachfolgende Leerzeichen führt aufgrund von Unicode zu einer Ersetzung der Schrift und wird nicht korrekt gedruckt
  • Nachgestellte Unterstriche sind nicht so wünschenswert wie nachgestellte Leerzeichen
  • Verwirrt die Betreuer, weil es nicht offensichtlich ist, dass ein EN SPACE verwendet wird
  • (Vermutlich) Fehler in Gebietsschemata, bei denen der Punkt anstelle des Dezimaltrennzeichens als Punkttrennzeichen (Tausendertrennzeichen) verwendet wird
MetaEd
quelle

Antworten:

5

Mit dem folgenden benutzerdefinierten Zahlenformat können Sie Zahlen in Google Sheets dezimal ausrichten, auch wenn Sie Schriftarten verwenden, die Kerning verwenden.

Benutzerdefiniertes Format

???.?????

Bildschirmfoto

benutzerdefiniertes Zahlenformat
Bildbeschreibung hier eingeben

Ergebnis
Bildbeschreibung hier eingeben

Beispiel

Ich habe diese Lösung in einer Beispieldatei hinzugefügt: Dezimal ausgerichtete Zahlen

Jacob Jan Tuinstra
quelle
1
Unterstützung für das "?" Formatzeichen fehlte, als ich die Frage ursprünglich stellte. Ich frage mich , ob es im Rahmen von Google jüngster Unterstützung hinzugefügt wurde Accounting Zahlenformate . Dies ist eine nützliche Problemumgehung, die meinen Vorstellungen sehr nahe kommt. Die einzige Einschränkung besteht darin, dass ein Dezimalpunkt angezeigt wird, auch wenn kein Bruchteil vorhanden ist. In Excel kann diese Einschränkung mit bedingter Formatierung umgangen werden. Aber nicht, wie es scheint, in Sheets. Ich akzeptiere diese Antwort.
MetaEd
4

Ich habe Code geschrieben, um Ihnen das Leben ein wenig zu erleichtern und dezimal ausgerichtete Zahlen anzuzeigen.

Der erste Code

kann nur in einem Bereich verwendet werden, da sich dadurch die Darstellung der Zahlen entsprechend der höchsten Dezimalstelle im Bereich dynamisch ändert. Außerdem können Sie das nachfolgende Zeichen wie CHAR (160) auswählen:

function RANGETRAIL(range,chr){
  chr = chr || '0'; 
  var aValues = new Array(), aDecimals = new Array();

  var max=0;
  for(i in range) {
    if(range[i] != "") {
      var string = range[i].toString();
      aValues.push([string]);
      var aSplit = string.split("."); 

      if(aSplit.length > 1) {
        aDecimals.push([aSplit[1].length]);
        if(aSplit[1].length > max) {
          max = parseInt(aSplit[1].length);        
        } 
      } else {
        aDecimals.push(["-1"]);
      }
    }
  } 

  for(k in aDecimals) {
    if(parseInt(aDecimals[k]) != parseInt(max)) {
      for(var l=parseInt(aDecimals[k]); l<parseInt(max); l++) {        
        aValues[k][0] += chr;
      }
    }
  }     
  return aValues;
}

Der zweite Code

soll für Zellen verwendet werden. Hier müssen Sie die Nachlauflänge einstellen:

function CELLTRAIL(cell,len,chr){
  // Brad Christie, http://stackoverflow.com/a/5024108/1536038
  chr = chr || '0'; 
  cell = cell.toString();

  if (!len) return cell;

  var p = cell.indexOf('.');
  p = (p!==-1?(cell.length-p-1):-1);

  for (var m = p; m < len; m++) {
    cell += chr;
  }
  return cell;
}

Der dritte Code

wird eine Zeichenkette aus allen nicht numerischen Zeichen mit Ausnahme eines "." und ",":

function RTRIM(cell) {   
  return Number(cell.replace(/[^0-9$.,]/g, ''));
}

Beispieldatei

Dezimal ausgerichtete Zahlen Bildbeschreibung hier eingeben


Gedanken

Diese Antwort beseitigt nicht die Bedenken, die Sie in Ihrer Frage angesprochen haben, aber es gibt eine gewisse Automatisierung (dynamisch) bei der Anzeige !! Viel Glück.

Jacob Jan Tuinstra
quelle
Ich möchte darauf hinweisen, dass dies zu seltsamen Ausrichtungsproblemen führen kann, wenn Sie keine Schriftart mit fester Breite verwenden.
Mir
@mir danke für deinen Kommentar Mir. Hat dir die Antwort gefallen, die ich gegeben habe? In der Überschrift „Gedanken“ erklärte ich, dass dies die Bedenken des OP nicht zerstören würde.
Jacob Jan Tuinstra
1
Die Antwort war wirklich sehr hilfreich, als mir klar wurde, dass ich eine Schriftart mit fester Breite verwenden musste. Ich bin ehrlich - ich habe die Frage nicht sorgfältig gelesen ... Ich habe nur einen Blick darauf geworfen, um zu bestätigen, dass sie meinem Problem ähnelt, und bin dann direkt zu Ihrer Antwort gesprungen. Daher habe ich nicht bemerkt, dass OP Bedenken hinsichtlich der Schriftarten enthält.
Mir
1

Sie können das Format unter bestimmten Bedingungen festlegen, indem Sie mithilfe eines Apps-Skripts den Zellenbereich durchlaufen und verschiedene benutzerdefinierte Zahlenformate anwenden, die auf dem Wert der Zelle basieren (Ganzzahl im Vergleich zu Nicht-Ganzzahl). Mit benutzerdefinierten Zahlenformaten können Sie mit dem Unterstrich Leerzeichen unterschiedlicher Breite anzeigen, z. B. _.Leerzeichen die Breite eines Punkts und _0Leerzeichen die Breite eines Nullzeichens einfügen. Im Übrigen verwenden die meisten Schriftarten die gleiche Breite für alle Ziffernzeichen, sodass ein 0-Zeichen die gleiche Breite wie eine 1 und 2 und 3 usw. hat.

Dies ist ein Beispiel dafür, wie die Zahlen vor und nach dem Anwenden des Formats d durch Ausführen des Skripts angezeigt werden. Ein Nachteil ist, dass bei einer Änderung des Werts der Zelle von Integer zu Non-Integer oder umgekehrt die Formatierung erneut angewendet werden muss, um die Dezimalzahl nach Bedarf anzuzeigen oder auszublenden.

  Raw Numbers  Decimal Aligned
+------------+----------------+
|    1234.777|         1,234.8|
|        5454|         5,454  |
|           7|             7  |
|         0.5|             0.5|
+------------+----------------+

Skript

function decimalAlign() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Sheet1");
  var range = sheet.getRange("B2:B5");
  var numRows = range.getNumRows();
  var numCols = range.getNumColumns();
  for (var i = 1; i <= numRows; i++) {
    for (var j = 1; j <= numCols; j++) {
      var currentCell = range.getCell(i,j);
      var currentValue = currentCell.getValue();
      if (Math.round(currentValue) == currentValue) {
        currentCell.setNumberFormat("#,##0_._0");
      } else {
        currentCell.setNumberFormat("#,##0.0");
      }
    }
  }
}
Collin Anderson
quelle