• 締切済み

エクセル セルの先頭の0 VBAで

テキストファイル.txtにおける数値 たとえば01234567の8桁を エクセルファイルの(A,1)セルに移動すると 1234567と表示されてしまいます あるコードがあるとしまして 途中省略しますが ・・・・・ .Cells(A, 1).Value = Str(Mid(buf, Pos9 + Len9, Pos10 - (Pos9 + Len9))) これは あるプログラムの流れということですが これで 1234567 となってしまうので このコードのあとに Range (Cells(A, 1)) .NumberFormatLocal = "@" .Value = Format(.Value, "00000000") (この場合は 8桁とすでにわかっている場合ですが もし先頭に0がいくつ付くかわからない場合のケースも 教えていただけますか) とつけましたが エラーとなります 御教示くださいませ win10 office356

みんなの回答

回答No.6

以下のコードは、A1に「1234567」を代入し、その後、A2セルに入っている数値を「桁数」として、桁揃えするコードです。 Sub ボタン1_Click() n = Cells(2, 1) With Cells(1, 1) .Value = 1234567 .NumberFormatLocal = "@" .Value = Format(.Value, String(n, "0")) End With End Sub >とつけましたが >エラーとなります 質問にある Range(Cells(A, 1)) という記述は「VBAでは意味不明」で、エラーになります。 どこかのサイトの例題を見て .NumberFormatLocal = "@" .Value = Format(.Value, "00000000") と書いたのでしょうけど、この例題の前後には  With Range("A1")   .NumberFormatLocal = "@"   .Value = Format(.Value, "0000")  End With のように「With 〇〇」~「End With」があった筈です。 VBAでは「繰り返し、同じプロパティを書く場合に、プロパティを省略できる機能」があります。 例えば Cells(1, 1).Value = 1234567 Cells(1, 1).NumberFormatLocal = "@" Cells(1, 1).Value = Format(.Value, String(n, "0")) と、何度も「Cells(1, 1)」と書く必要が出た場合に With Cells(1, 1) .Value = 1234567 .NumberFormatLocal = "@" .Value = Format(.Value, String(n, "0")) End With のように「Cells(1, 1).」を「.」一文字に省略できます。 因みに、 .Value = Format(.Value, String(n, "0")) を .Value = Right(String(n, "0") & .Value, n) に書き換えると「溢れた桁を切り捨て」できるようになります。 例えば「123456789」を「8桁にする」と、先頭が切り捨てされ「23456789」のように「必ず8桁」に出来ます。 Formatを使った場合は、「123456789」を「8桁にする」と指定しても、9桁の「123456789」になり「8桁にならない」場合があります。

sushidokei
質問者

お礼

詳細有り難う御座いました。出来ました

Powered by GRATICA
  • kkkkkm
  • ベストアンサー率66% (1725/2595)
回答No.5

No.1で bufなら mStr = buf と回答しましたが、bufは既になにがしかの文字列で以下で使ってましたね。 > .Cells(A, 1).Value = Str(Mid(buf, Pos9 + Len9, Pos10 - (Pos9 + Len9))) > これで 1234567 となってしまうので これは、Str(Mid())の結果が1234567だけど0を付加して8桁として表示したいのだと思ってましたが (もとになる0が付いている文字列が別途取得できると思ってました) Str(Mid(buf, Pos9 + Len9, Pos10 - (Pos9 + Len9))) の結果は01234567だけど A1が1234567になるという事でしたら もとの文字列は Str(Mid(buf, Pos9 + Len9, Pos10 - (Pos9 + Len9))) だと思いますから mStr = Str(Mid(buf, Pos9 + Len9, Pos10 - (Pos9 + Len9))) になります。

  • FattyBear
  • ベストアンサー率33% (1536/4634)
回答No.4

単純に移動先のセルの書式設定の表示形式が”数値”ならば頭の0は 無くなります。そのデーターを数値と判断されたのでしょう。 01234567 は数字の羅列に過ぎません。数値ではないのです。 00001234 も同じ、数字を一つずつ並べたもので数値ではない。 移動先の書式設定の表示形式が”文字列”なら01234567 とそのまま 表示されます。 VBAでセルの書式設定をするコマンドがあればそれを組み込めば良い。 私はVBAにうといのでそれは知りませんが。

  • kkkkkm
  • ベストアンサー率66% (1725/2595)
回答No.3

> 先頭に0がいくつ付くかわからない場合 コードを実行するまで文字列の長さがわからないという意味だと思ってますので 文字列の長さ以外の要因で桁数が変化するのでしたら たとえば長さが9になるとしたら mStr = "1234567" n = 9 With Cells(1, "A") .NumberFormatLocal = "@" .Value = Format(mStr, String(n, "0")) End With

  • kkkkkm
  • ベストアンサー率66% (1725/2595)
回答No.2

No.1は質問のコードを変更しましたが 書式設定を文字列にしていますから桁を気にせず文字列変数の値を直接代入すればいけると思います。 mStr = "001234567" With Cells(1, "A") .NumberFormatLocal = "@" .Value = mStr End With

  • kkkkkm
  • ベストアンサー率66% (1725/2595)
回答No.1

元の文字列が何か分からないので"001234567"のところに元の文字列を配置してください。 bufなら mStr = buf mStr = "001234567" n = String(Len(mStr), "0") Range("A1").Value = mStr With Cells(1, "A") .NumberFormatLocal = "@" .Value = Format(.Value, n) End With

sushidokei
質問者

お礼

複数回に亘っての御回答頂戴し恐縮です 有り難う御座いました。

Powered by GRATICA

関連するQ&A

専門家に質問してみよう