
EXCELシートのセル内に、以下のような30桁からなる数値が入力されている
列が複数あります。
この列内の数値の右端から「5桁目」だけ、または左端から「10桁目」だけを
抽出したいと思っているのですが、EXCELの仕様で数値の先頭にある「0」は
表示されないため、各セルごとに表示されている数値の桁数はバラバラです。
数値の先頭に「0」が付いているセルが多数あり桁数が不揃いなことと、
数値が30桁もあるため、セルの数値表示が「1E+29」のように「E+29」で表示
されてしまっており、うまく数値を抽出することが出来ません。
◆元データ
「列1」
(1) 1234567890 →(本当は30桁:000000000000000000001234567890)
(2) 111111111100000000001111111111
(3) 1 →(本当は30桁:000000000000000000000000000001)
(4) 123456789012345678909999999999
◆右端から5桁目だけを抽出する
「列1」
(1) 6
(2) 1
(3) 0
(4) 9
お手数お掛けいたしますが、ご指導下さいますよう宜しくお願い致します。
No.4ベストアンサー
- 回答日時:
解答No1です。
エクセルでは文字列で入力しない限りは、有効数字は15桁までです。そのために123456789123456789123456789のようにセルに入力したつもりでも123456789123456までがパソコンに取り込まれてそれ以上はどんなに入力しても0が付くだけです。
通常は先の数値では1.23457E+26と表示されますね。この数値の詳細を知るために「桁区切りスタイル」をクリックすれば123,456,789,123,456,000,000,000,000と表示され15桁以上入力してもそれ以上の入力は0が追加されて桁が多くなるだけのことです。
初めから文字列として15桁以上の数値を入力して、A1セルにその全体が表示されている状態でしたら解答No1の式でも十分対応できます。
E+20とか表示されている場合には文字列ではなく数値ですから、数値の場合にはパソコンは有効数字を15桁までした取り込んでおりませんのでそれより下の桁までの数値で5桁目を表示させることは当然のこととしてできません。
KURUMITO 様
ご丁寧なご回答をありがとうございます。
お恥ずかしながら…
私はずっと、セルに「E+20」などと表示されている意味が
分からず謎だったのですが…、EXCELは15桁以上の数値を
取り込みできない仕様と言うことが分かり、納得いたしました。
今後は、文字列として入力するようにしたいと思っております。
No.5
- 回答日時:
#2です
数値制限15桁に気づかずにすみません
データ入力後にセルの書式を変更してもダメですよ
セルの書式変更後、データ入力です
そうであればマクロでなくても、#1さん、#3さんの方法でいけます
ダメもとで指数付き数字を元に戻そうと思ったのですが、セルに入れたときに桁を捨てられてました
(#1さんの説明どおり)
111111111100000000001111111111
↓
1.111111111E+29
↓
1.111111111*(10**29)
↓
111111111100000000000000000000
>マクロを実行するには、VBA画面に上記記述をコピー&ペーストすればよろしいでしょうか?
マクロをご存知と思ってました
参考までに
1)A1セルに 111111111100000000001111111111 が30桁表示するようにする
2)メニュー ツール-マクロ-マクロ をクリック
3)マクロ名に mid5 を入力して 作成ボタンをクリック
4)Sub mid5()
End Sub
を
書き換える
5)B1セルに =mid5(A1) を入れて実行
★メニュー ツール-マクロ-セイキュリティー で 中 にする必要があります
nagare 様
ご丁寧なご回答をありがとうございます。
マクロ初心者であることを申し上げておらず、大変失礼いたしました。
お蔭様で、希望通りの回答結果を得ることができました。
私はずっと、セルの書式設定で表示形式を「数値」に変更すると、
30桁表示に変更されているのに、数式バーには「E+20」などと表示
されているれていたので、おかしいなぁと思っていたのですが…、
EXCELの仕様で15桁以上の数値を取り込みできず切捨てられると
言うことが分かり納得いたしました。
今後は、セルの書式変更後にデータ入力するように致しますね(*^_^*)
No.3
- 回答日時:
Excelの有効桁数は15桁だそうです。
それ以上の桁数の数字は、「文字列」として入力しないといけないようです。http://support.microsoft.com/kb/269370/ja
文字列として入力した場合は、
=MID(REPT("0",30-LEN(A1))&A1,26,1)
で取得できます。
cistronezk 様
ご回答いただきまして ありがとうございます。
お蔭様でEXCELの仕様ということが分かり安心しました。
通常のように手入力にて30桁の数値を入力したセルで、この数式を実行すると希望通りの結果を得ることが出来ましたが、今回使用しているデータは、EXCELの仕様のため「1.11110101110011E+29」のように表示されてしまっており、表示設定を「文字列」変えても「1.11110101110011E+29」のままでした。今回はEXCELの仕様のため、残念ながら希望通りの回答を得ることが出来ませんでしたが、とても勉強になりました。
ありがとうございました(*^_^*)
No.2
- 回答日時:
>セルの数値表示が「1E+29」のように「E+29」で表示されてしまっており
これが一番のネックなのですが、セルの書式(表示形式)を変えたらダメなのでしょうか?
標準→数値
また、4桁以下の場合は0でよろしいのでしょうか?
マクロで作ってみました
Function mid5(sNum As String) As String
mid5 = "0"
If 4 < Len(sNum) Then
mid5 = Mid(StrReverse(sNum), 5, 1)
End If
End Function
この回答への補足
nagare 様
ご回答いただきまして ありがとうございます。
マクロを実行するには、VBA画面に上記記述をコピー&ペーストすればよろしいでしょうか? 実行してみたのですが、マクロ名を付けて下さいと表示され、適当な名前を付けて作成ボタンを押下すると「コンパイラエラー」が表示されてしまいました。
なお、今回使用しているデータは、EXCELの仕様のため「1.11110101110011E+29」のように表示されてしまっており、セルの表示設定を「数値」に変更すると「111110101110011000000000000000」と表示されます。
上記の数値は15桁目以降は「0」になっているのですが、実際の数値は15桁目以降も何らかの数値が入力されているのです。
上記のことから、表示形式を「数値」に変えても、本来の数値表示にはなりませんでした。
No.1
- 回答日時:
A1セルから下方にデータがあるとしてB1セルには次の式を入力し下方にオートフィルドラッグします。
=IF(A1="","",IF(LEN(A1)<5,0,LEFT(RIGHT(A1,5),1)*1))
KURUMITO 様
ご回答いただきまして ありがとうございます。
通常の30桁の数値を入力したセルで、この数式を実行すると希望通りの結果を得ることが出来ました。
今回使用しているデータは、EXCELの仕様のため「1.11110101110011E+29」のように表示されてしまっており、セルの表示設定を「数値」に変更すると「111110101110011000000000000000」と表示されます。
上記の数値は15桁目以降は「0」になっているのですが、実際の数値は15桁目以降も何らかの数値が入力されているのです。
上記のことから、表示形式を「数値」あるいは「文字列」に変えてから、この数式を実行してみたのですが残念ながら希望通りの回答を得ることが出来ませんでした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) A列にある値をB列・C列にVBAで切り出し 3 2022/04/09 19:20
- Excel(エクセル) Excelにの以下の設定方法について教えてください! C列にデータ入力の設定をしています。(出、入を 3 2022/06/22 01:33
- Excel(エクセル) シート参照を含む数式を連続コピー 3 2022/12/10 11:42
- Visual Basic(VBA) vba 隣のセルに値がある行だけ関数をコピー&ペーストしたい A1 100001 A2 100002 1 2023/01/28 14:29
- Excel(エクセル) 複数セルデータを別シートの単一セルにコピーしたい。(詳細をご参照ください) 1 2022/12/14 15:08
- Excel(エクセル) エクセルのセルの書式設定・ユーザー定義の条件設定について 1 2022/08/17 21:56
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Excel(エクセル) 【Excel関数】値が合致するセルの隣のセルを表示させたい 8 2022/10/12 17:44
- Visual Basic(VBA) エクセルVBAで『A列』に新規で数値を入力し『B列』から右方向の空白セルにその値を貼り付ける方法 4 2022/11/05 08:37
- Excel(エクセル) 【Excel】hyperlink関数を解除してもハイパーリンクが活きるようにできますか? 3 2023/05/22 11:22
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
A1セルに入力したら、入力時間...
-
Excelで同じセルに箇条書きをし...
-
【エクセル】指定したセルに入...
-
IF関数で0より大きい数値が入力...
-
入力したところまでを自動的に...
-
空白でないセルの値を返す方法...
-
エクセルで既に入力してある文...
-
【Excel】セル内の時間帯が特定...
-
Excelでセルに入力されたカラー...
-
Excel 大小比較演算子による「...
-
参照先セルに値が入っていない...
-
エクセルで、特定のセルの内容...
-
スプレッドシートで 時間入力の...
-
Excel:文字と数字の組合せ、次...
-
エクセル:コメントのようなも...
-
エクセルでシート全体の数値を...
-
エクセル セルに文字を入力した...
-
yyyy/mm/ddからyyyy/mmへの変換
-
Excel 分数の分子を小数点で表...
-
エクセルの数式がかぶって、選...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelで同じセルに箇条書きをし...
-
A1セルに入力したら、入力時間...
-
エクセルで既に入力してある文...
-
空白でないセルの値を返す方法...
-
入力したところまでを自動的に...
-
Excelでセルに入力されたカラー...
-
IF関数で0より大きい数値が入力...
-
yyyy/mm/ddからyyyy/mmへの変換
-
【Excel】セル内の時間帯が特定...
-
excel 関数にて文字を0として認...
-
Excel:文字と数字の組合せ、次...
-
エクセル セルに文字を入力した...
-
参照先セルに値が入っていない...
-
マクロ無しで時間自動で記入を...
-
エクセルで一定の数値を超えた...
-
エクセルの数式がかぶって、選...
-
Excel 大小比較演算子による「...
-
エクセル:コメントのようなも...
-
【エクセル】指定したセルに入...
-
エクセルで、特定のセルの内容...
おすすめ情報