Excelで数値以外の値から先行ゼロを削除する最良の方法


13

Excelシートには、0〜9およびA〜Zの9文字を使用して、いくつかのプレフィックスのゼロがあるセルが多数あります。

000000123 
000001DA2 
0000009Q5
0000L210A
0000014A0
0000A5500
00K002200

先行ゼロを削除して、値が次のようになるようにします。

123 
1DA2 
9Q5
L210A
14A0
A5500
K002200

Excelの数式でこれを行うにはどうすればよいですか?VBAマクロの使用は避けたいです。


データに関する制約がさらにいくつかある場合は、より具体的な解決策を考え出すことができます。
ランスロバーツ

ありがとう。値の先頭にゼロがあるため、合計で9文字になります。それ以外は、値は0〜9の数字と大文字のA〜Zの文字列です。末尾のゼロが存在する可能性がありますが、これは実際の値の一部であり、トリミングしないでください。
クリスファーマー

明確にするために、スペースが埋め込まれることはありません。ちょうど0-9とAZ。
クリスファーマー

末尾のゼロの例が含まれるように編集
クリスファーマー

@Chris、文字列に埋め込まれた、または後に続くゼロの最大数がわかっている場合、それを行うことができます(ただし、長い式になります)。
ランスロバーツ

回答:


14

これは、セル集約的ですが正しいソリューションです。

列Aにデータを入力します。

B1に次の式を入力します。

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

これは、単一の先行ゼロをチェックし、それを取り除きます。

この数式を、データに文字が含まれる列と同じ数だけ右にコピーします(この場合は9なので、列Jに移動します)。データの行ごとにコピーします。

最後の列には、先行ゼロが取り除かれたデータが含まれています。


これを何度も試みた後、これはVBAに頼らずに動作する唯一のバージョンです。
skamradt

@リチャードのコメント:私はアイザックの解決策が好きです。先行ゼロが複数ある場合は、数式を含むセルからコピーして、元のセルにのみ値を貼り付けます。毎回、別の先行ゼロがあれば削除されます。
Ivo Flipse

8

次の数式は、追加のセルを必要とせず、配列数式として入力する必要もありません。

=RIGHT(A1,LEN(A1)-FIND(LEFT(SUBSTITUTE(A1&" ","0",""),1),A1&" ")+1)

0または00などの文字列に対して単一のゼロが返される場合、次の式を使用できます。

=IF(A1="","",RIGHT(A1,LEN(A1)-FIND(LEFT(SUBSTITUTE(LEFT(A1,LEN(A1)-1)&" ","0",""),1),LEFT(A1,LEN(A1)-1)&" ")+1))

この回答は、複数の先行ゼロで機能し、ここで言及した回答の中で最も完全でシンプルなようです。
ピーター

5

これは、ワークシート関数で行うのが難しい問題です。以下はトリックを行いますが、先頭にないゼロが一度に1つだけ来て、末尾のゼロも埋め込みスペースもない場合のみです。

すべてのゼロをスペースで置き換え、それらをトリミングして(埋め込まれた単一スペースを除くすべて)、ゼロに戻します。

=SUBSTITUTE(TRIM(SUBSTITUTE(A1,"0"," "))," ","0")

先行していないゼロが一度に1つしか来ないのはなぜですか?そして、=CLEAN(SUBSTITUTE(TRIM(SUBSTITUTE(A1 & CHAR(9),"0"," "))," ","0"))CLEANタブが削除されることを期待しています。そうでない場合は、他の値を使用してくださいCHAR
Arjan

@Arjan、私はTRIMをテストしましたが、埋め込まれた複数のスペースを1つのスペースに置き換えましたが、ここであなたの情報を調べて、何が見つかるか見てみましょう。(私は2003年を使用しています)。
ランスロバーツ

CLEAN関数は、埋め込まれたスペースを保存しますが、最初の先行スペース以外のすべても保存します。
ランスロバーツ

CLEANを追加して、追加したCHAR(9)を削除しました。TRIMmed値でCLEANを使用すると、先頭にスペースを入れることはできません...?
アルジャン

はい。ただし、CHAR(9)が(各ゼロに)追加されると、先頭のゼロにも追加されます。末尾のゼロを保存するためだけにそれを使用したことがわかり、答えに組み込みます。
ランスロバーツ

5

このソリューションは、すべて正確に9文字の入力値に対して機能します。

最初に、テキストとしてフォーマットされた次の数値を含む固定10行のテーブルをセットアップします。

000000000

000000001

000000010

000000100

000001000

000010000

000100000

001000000

010000000

100000000

テーブルがセルA1からA10にあるとしましょう

入力値がセルB1にあり、結果セルがC1であるとしましょう

セルC1で次の数式を使用します

= RIGHT(B1、MATCH(B1、$ A $ 1:$ A $ 10,1)-1)


スマート!MATCH関数の3番目のパラメーターについて:1 = lookup_value以下の最大値を検索
Arjan

4

A1のデータの場合、次の式を使用します。

= RIGHT(A1、LEN(A1)-MAX((FINDB(REPT( "0"、ROW(A $ 1:A $ 100))、A1& "-"&REPT( "0"、100))= 1)* ROW(A $ 1:A $ 100)))

Ctrl + Shift + Enterによる入力。100文字までの文字列に対して機能します。


うわー!いくつかの小さなメモ:Ctrl-Shift-Enter(Macの場合はCmd-Shift-Return)は配列数式を作成します。通常どおりに式を貼り付けますが、EnterではなくCtrl-Shift-Enterを押して保存します。その後、中括弧の間に表示されます。Mac上のOpenOffice.orgでは、次の行の数式をドラッグできませんでした(その場合、スーパー配列の数式が生成されるため)。ただし、コピーと貼り付けは機能するため、いくつかのショートカットもあるはずです。また、OpenOffice.orgはFINDBを認識していません。FINDを使用しても同様に機能するようです。
アルジャン

エレガントなソリューション!
ウィルソン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.