EXCEL2003について質問です。
似た類の質問は結構みるのですが、根本的な原因がわからないので
わかる方がいたらエクセルの仕組みを教えてください。

頭に0が入った記号を含む数字から任意の記号を一括で抜こうとしたときに、文字列設定なのに頭の0が抜けてしまう原因です。

例えば
(1)新規のシートでまずは0120-111と入力します。
ハイフンを手動で消すと、数字として扱われて120111になります。
これはわかります。
(2)次に、初めにセルの書式を「文字列設定」にしてから同様のことをすると、0120111となって文字列に扱いになりました。
これもわかります。
(3)今度は(2)でハイフンを手動ではなく「置換」で取ると結果は120111と
0が取れているにも関わらずセルの書式は文字列のままです。

なぜ(3)で勝手に0が外れてしまうんでしょうか?
桁数もバラバラ、頭が0でない、記号がない場合もある数字のリストの中で一個一個手動ではなく範囲指定したセルを一括で変更する方法って
ないんですかね?

このQ&Aに関連する最新のQ&A

A 回答 (4件)

これはExcel-VBAでの変数の扱いを分かっていると、理解できる事柄


なんですが・・・。

Excelのセルデータは、あくまで「オブジェクト」として持っており
これを表示するときに「どう表示するか」を「セルの書式設定」で
決定します。逆に言えば、セルの書式設定はデータの内容に対して
影響を及ぼさないんですね。

で、文字列で書式設定されたセルに左ゼロデータを書き込むと、その
時点では「文字列」として扱われますが、何かを処理しようとした
途端、「オブジェクト」として取り込まれて処理が行われます。
「オブジェクト」として取り込まれると、数字だけのデータは数字と
して処理が始まりますので、前ゼロが消えてしまうんです。

オブジェクト内で前ゼロを残したい場合は、制御文字"'"を使うしか
ありません(アポストロフィ"'"がExcelで時々顔を出すのは、Lotus
1-2-3互換機能を残している為だけじゃないんです)。前ゼロに関して
は、Excelの困った動きの一つなんですが、「仕様です」と言わざるを
得ないのです。
    • good
    • 1
この回答へのお礼

ご回答ありがとうございます。
的確に知りたいことを答えていただいて大いに参考になりました。
そうですか、エクセルの仕様なんですね、
Excel-VBAはあまり詳しくないですが「何かを処理しようとした途端」
というのが今回の「置換」にあたるんですね。
他のよくわからなかったエクセルでおこる現象でも
この原因が影響してそうな気がしました。

お礼日時:2009/06/09 08:29

Microsoftが明確に仕様といってるみたいですね。


http://support.microsoft.com/kb/404387/ja


上記を元に以下の手順は如何でしょうか。
1.置換用シート(仮にSheet2とする)を用意
2.Sheet2のA1セルに置換元シート(仮にSheet1とする)のA1セルの文字置換を行うセル式を設定
 例: =SUBSTITUTE(Sheet1!A1,"-","")
3.Sheet2のA1セルをコピーし、Sheet2の任意のセル範囲を選択し貼り付け
4.それをそのままコピー
5.Sheet1のA1セルで右クリック「形式を選択して貼り付け」
6.「値」を選択し「OK」

上記手順で
置換元の全てのセルが置換されるかと思います。

参考URL:http://support.microsoft.com/kb/404387/ja
    • good
    • 1
この回答へのお礼

なるほど、SUBSTITUTEを使う簡単な方法があったんですね。
電話番号から-を抜きたかったんですけど
これで一個一個手動で作業しなくて良くなりました。
回答番号3の原因と合わせて完全に解決しました。
大変助かりました。
ありがとうございました。

お礼日時:2009/06/09 08:44

書式は文字列でもデータが数値になるようですね。



既存データの前に ' を入力して置換すれば文字列として残るようです
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

お礼日時:2009/06/09 08:20

本当ですね。

試してみるとご指摘の通りでした。勝手に数字と判断するのですかね。

一つの方法は(ご存知と思いますが)
'0120-0120 と入力する方法です。これで文字列として扱えて
=left(セル,1) も "0"になります。 置換でも0は取れません。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

お礼日時:2009/06/09 08:19

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qエクセルで数字の頭に0を追加する方法はありますか?

エクセルのVLOOKUP関数を使って検索をしようと思いますが、
検索する番号が一つが6桁の番号で表示されており、もう片方が7桁の番号で表示されています。
つまり、6桁は頭に0が付いていなくて、7桁には頭に0が付いています。
【例】 6桁=123456、7桁=0987654

ですから同じ表示にしたいのですが、出来れば6桁の頭に0を付けたいのです。
【例】 6桁=123456 → 7桁=0123456

どうすれば、変換できるかよい方法がありましたら教えて下さい。よろしくお願いいたします。

なお、対象セルは3千個程あるので、とてもじゃないけど一個づつは出来ません。
また、当方素人なので出来れば判り易い方法でお願い致します。

Aベストアンサー

範囲選択をして右クリック
セルの書式設定
 ↓
表紙形式
 ↓
ユーザー定義
 ↓
種類のところに 0000000
と記入すれば頭に0が付きます。

QExcelで置換が意図したようにできない(ハイフンを消したい)

Excel97です。
電話番号のデータからハイフンを取りたいので
置換で検索する文字列に「-」、置換後の文字列に
何も入れないで置換を押したら頭1ケタの0(ゼロ)まで
消えてしまいました。書式設定は文字列にしました。
ハイフンを消す方法は他にもあるとは思いますが、
どうして上記のような現象になってしまうのか
知りたいです。お願いします。

Aベストアンサー

こんにちは。maruru01です。
おそらく、"-"を""(空の文字列)に置換後、いったん数値として認識しているからではないでしょうか。書式設定が標準のセルに、「0123」と入力すると、「123」と表示されるのと同じで、最初に先頭の「0」を取った状態にしてからセルに表示するので、いくらセルの書式を文字列にしてもダメなんじゃないでしょうか。
私の憶測ですが。
ちなみに、"-"をとったものを別のセルに書くには、次のような面倒な方法があります。
A1に「03-1111-2222」と入力してあったとして、B1に

  =REPLACE(REPLACE(A1,FIND("-",A1,1),1,""),FIND("-",REPLACE(A1,FIND("-",A1,1),1,""),1),1,"")

と入れれば、B2に「0311112222」と表示されます。
多分これより簡単な方法を他の回答者が教えてくれると思いますので、あくまで参考程度に。
では。

Qエクセルで数字の頭0をつけるには?

既に入力されているデータで、頭に0をつけて8桁にそろえたいと思っています。
セルの書式設定で文字列にしても、入力済みデータでは変更できません。
また、表示形式で"00000000"←このように0を8ついれるのでは
見た目は変わりますが、セルの実際の数値は変わりません。
セルの数値を変更するにはどのようにすればよいでしょうか?

入力されている数値は7桁のものもあれば、5桁のものもあります。
7桁の場合は、頭に0ひとつ、5桁の場合は頭に0をみっつつけるように
したいのですが、どなたか方法をご存知でしたら教えて
いただけると助かります。どうぞよろしくお願いします。

Aベストアンサー

書式付文字にするなら、隣の列にでも
=TEXT(A1,"00000000")
または
=RIGHT("00000000"&A1,8)
としてご希望の文字列を作ります。
この式をコピーしてもとのセルに「編集」「形式を選択して貼り付け」で
「値」として貼り付ければ可能です。

未入力なら頭にアポストロフィー([']Shift+7)を挿入して
'00011111
のように入力するか、あらかじめ「セルの書式設定」「表示形式」を「文字列」にしてから
00011111
のように入力してください。

Qエクセルで数字の頭に0をつける方法

こんにちは。いつもいろいろ教えていただいて助かっています・・m(__)m

今回も初心者の質問で申し訳ございません・・。
エクセルで、入力済みのすべての数字の頭に後から「0」を付けたいのですが、その方法がわかりません・・。

例)
入力済み数字が「120」とすれば「0120」というように全ての数字の頭に「0」をつけたいのです。

「ユーザー定義」なるものを使うというのはなんとなく判るのですが・・・。

お願いいたします。m(__)m

Aベストアンサー

セルの持っている本当の値をどうされるかによって方法が違ってくるように思います。

セルの持っている値を4桁にされるのでしたら、
入力の際にセルの書式を文字列にされて0から始められるか、
頭にシングルクォーテーションをつけて0から入力されるか、
またはA1の数値の頭に0を付けられるのでしたら
B1に ="0"&A1 と入力されるかです。

これらはセルの持っている値のタイプはどれも「文字列」です。

また、セルの持っている値は3桁のままで表示だけ4桁にされるのでしたら
ユーザー定義で0000と桁を指定してください。
これはセルの持っている値のタイプは「数値」です。

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

QExcelで頭に0がつく数字の表示方法

10桁程度の数字入力ですが、一部先頭が0の数値があります。 普通に入力すると先頭の0が表示されません。
頭に’をつければ表示されますが、数値ではなく文字列になってしまうため不可です。
何か簡単に先頭の0を表示する方法はないでしょうか。

Aベストアンサー

>且つ最後半角1文字分空ける表示の仕方ができないでしょうか。

 「書式」→「セル」→「セルの書式設定」の「表示形式」で「ユーザー定義」にして、種類の指定を、「0000000000"△"」とすれば良いでしょう。

*注。上の「△」は、半角スペースです。

QエクセルのIF関数で、文字が入力されていたならば~

エクセルのIF関数で文字が入力されていたならば~、という論理式を組み立てたいと思っています。

=IF(A1="『どんな文字でも』","",+B1-C1)

A1セルに『どんな文字でも』入っていたならば、空白に。
文字が入っていなければB1セルからC1セルを引く、という状態です。

この『どんな文字でも』の部分に何を入れればいいのか教えてください。

またIF関数以外でも同様のことができれば構いません。

宜しくお願いします。

Aベストアンサー

=IF(ISTEXT(A1),"",B1-C1)

でどうでしょうか?

Q別のシートから値を取得するとき

Worksheets("シート名").Activate
上記のを行ってから別シートの値を取得するのですが、
この処理を行うと指定したシートへ強制的にとんでしまいます。。。

※イメージ
For ~ To ~
  Worksheets("シートA").Activate
  シートAの値取得
       :
  Worksheets("シートB").Activate
  シートBの値取得
Next

このイメージ処理を行うとものすごい勢いで画面がチカチカします。。。
シートを変えずに他のシートから値を取得する方法はないのでしょうか。
教えてください!

Aベストアンサー

Worksheets("シートA").Range("A1")

みたいな感じでできませんか?

Qエクセルで、頭に0をつけて数字の桁を揃える方法

エクセルで、必ず5桁の数字を入れる列があるとします。
ところが、数値データとして最初に作っているので、0が頭になく桁が足りない場合があります。
任意文字として5桁の数字にしたいのですが、

何かいい方法はありませんでしょうか?

例)
A列 A列
50      00050
1000  ⇒  01000
11111    11111

どうぞよろしくお願いいたします。

Aベストアンサー

次の方法は如何でしょうか。
(1)表示だけで良いのならば、セルの書式設定→表示形式→ユーザ定義で00000を設定
(2)データとして必要ならば、空き列(仮にB列)B1に=TEXT(A1,"00000")を入力、下方向にコピー→B列をコピー→A列に形式を選択して貼り付けで「値」を選択→OK、B列を削除

QExel VBA 別ブックから該当データを検索し、必要なデータを取得する方法について

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数ではなく、マクロで処理を希望します。

自分では、部品表の商品番号をコピーして、コード一覧表で検索し、検索結果の右隣のセル(B列のコード)の値を部品表のC列に貼り付ければよいかと思い、書いてみたんですが…

Sub 別ブックから貼り付ける()
  Dim 検索する As Long
Windows("部品表.xls").Activate
検索する = cells(i,2).Value
Windows("コード一覧表.xls").Activate
ActiveWindow.SmallScroll Down:=-3
Selection.AutoFilter Field:=3, Criteria1:="=検索する", Operator:= xlAnd

と、してみたものの、検索しても、その検索結果の隣のセルのコードをどうやって取得すればいいのかが、わかりませんでした。

基本事項は本で学びましたが、呪文のようなコードはよく理解できません。懸命にネットで検索して、訳して理解する努力をしてはいますが。

どうぞよろしくお願いします。

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数...続きを読む

Aベストアンサー

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks.Open("C:\★★\コード一覧表.xls") '★要変更★
 I = 2
 Do While Range("A" & I).Value <> ""
  ThisWorkbook.Worksheets("Sheet1").Range("C" & I).Value = Application.VLookup(ThisWorkbook.Worksheets("Sheet1").Range("B" & I).Value, xlBook.Worksheets("Sheet1").Range("A2:B65535"), 2, 0)
  I = I + 1
 Loop
 xlBook.Close
 Application.ScreenUpdating = True
 MsgBox ("完了")
End Sub

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks....続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報