Google 스프레드 시트에서 숫자를 십진수로 정렬하는 방법


13

Google 스프레드 시트에서 소수 부분에 후행 0을 추가하지 않고 숫자를 소수 정렬하고 싶습니다.

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

첫 번째 열의 형식은 쉽게 수행 할 수 있습니다 (예 : "0.0"형식 사용 또는 123 버튼 아래에 사용자 지정 소수점 설정).

Excel에서는 두 번째 열의 형식이 "0.?"형식을 사용하여 달성되었다고 생각하지만이 글을 쓰는 시점에서는 Google 스프레드 시트에서 작동하지 않습니다.

해결 방법

대체 문자로 후행 문자를 강제 실행할 수 있습니다.

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

참고 : 대체 된 두 공백 문자는 U + 0020 SPACE가 아니라 U + 2002 EN SPACE 입니다. ( U + 00A0 NO-BREAK SPACE 도 작동합니다.)

이 대안의 바람직하지 않은 부작용은

  • 표시 형식뿐만 아니라 셀 값도 수정합니다.
  • 셀에 고정 폭 글꼴을 사용해야합니다
  • 후행 공백은 유니 코드로 인해 글꼴 대체를 유발하고 올바르게 인쇄되지 않습니다
  • 후행 밑줄은 후행 공백만큼 바람직하지 않습니다.
  • EN SPACE가 사용되고 있다는 것이 확실하지 않기 때문에 관리자를 혼동합니다
  • (아마도) 소수점 대신 마침표를 마침표 구분 기호 (천 단위 구분 기호)로 사용하는 로캘에서 실패 할 수 있습니다.

답변:


5

다음 맞춤 숫자 형식을 사용하면 커닝을 사용하는 글꼴을 사용하더라도 Google 스프레드 시트에서 숫자를 10 진수로 정렬 할 수 있습니다.

맞춤 형식

???.?????

스크린 샷

맞춤 숫자 형식
여기에 이미지 설명을 입력하십시오

결과
여기에 이미지 설명을 입력하십시오

이 솔루션을 예제 파일에 추가했습니다 : 10 진수 정렬 숫자


1
"?"에 대한 지원 처음에 질문했을 때 형식 문자가 없었습니다. Google의 최근 회계 번호 형식 지원의 일부로 추가되었는지 궁금합니다 . 이것은 내가 원하는 것에 매우 가까운 유용한 해결 방법입니다. 유일한 제한은 소수 부분이없는 경우에도 소수점이 나타나는 것입니다. Excel에서는 이러한 제한 사항을 조건부 서식으로 해결할 수 있습니다. 그러나 시트에서는 그렇지 않습니다. 이 답변을 수락합니다.
MetaEd

4

십진수로 정렬 된 숫자를 표시하는 데 약간의 편의를 제공하는 코드를 작성했습니다.

첫 번째 코드

범위 내에서 소수점 이하 자릿수에 따라 숫자의 모양이 동적으로 변경되므로 범위에서만 사용할 수 있습니다. CHAR (160)과 같이 후행 문자를 선택할 수도 있습니다.

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;
}

두 번째 코드

세포에 사용됩니다. 여기에서 후행 길이를 설정해야합니다.

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;
}

세번째 코드

"."을 제외한 모든 숫자가 아닌 문자열을 묶습니다. 및 ",":

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

예제 파일

십진 정렬 숫자 여기에 이미지 설명을 입력하십시오


생각

이 답변은 귀하의 질문에 언급 한 우려를 없애지 않지만 표시하는 데 (자동으로) 자동화 할 것입니다 !! 행운을 빕니다.


고정 너비 글꼴을 사용하지 않으면 이상한 정렬 문제가 발생할 수 있음을 지적하고 싶습니다.
Mir

의견을 주셔서 감사합니다 @ Mir. 내가 준 대답이 마음에 드셨습니까? 에서 제목 생각 나는 그것이 영업 이익은 준 우려를 빼앗아하지 않을 것이라고 설명했다.
Jacob Jan Tuinstra

1
고정 너비 글꼴을 사용해야한다는 것을 알게되면 실제로 도움이되었습니다. 솔직히 말해서-질문을주의 깊게 읽지 않았습니다. 문제가 내 문제와 비슷한 지 확인한 다음 바로 대답으로 넘어갔습니다. 따라서 OP에 글꼴에 대한 우려가 포함되어 있음을 알지 못했습니다.
Mir

1

Apps Script를 사용하여 셀 범위를 반복 하고 셀 값 (정수 대 비정 수)에 따라 다른 사용자 정의 숫자 형식을 적용하여 형식을 조건부로 설정할 수 있습니다 . 사용자 정의 숫자 형식을 사용하면 밑줄 문자를 사용하여 다양한 너비의 공백을 표시 할 수 있습니다. 예를 들어 _.마침표 _0의 너비에 공백을 삽입하고 0 문자의 너비에 공백을 삽입합니다. 또한 대부분의 글꼴은 모든 숫자 문자에 대해 동일한 너비를 사용하므로 0 문자는 1 및 2 및 3 등과 같은 너비입니다.

이것은 스크립트를 실행하여 형식을 적용하기 전후에 숫자가 표시되는 방법의 예입니다. 한 가지 단점은 정수에서 비정 수로 또는 그 반대로 셀 값을 변경하면 필요에 따라 소수를 표시하거나 숨기려면 서식을 다시 적용해야한다는 것입니다.

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

스크립트

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");
      }
    }
  }
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.