ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

EXCEL VBAコミュの教えてください。

  • mixiチェック
  • このエントリーをはてなブックマークに追加
はじめまして、やなぎと申します。

フォームでデータを入力し、そのデータを保存用ブックに保存するマクロを組んでいます。
ファイル名に、たとえば今年なら、2006/1/1という日付を、Excelメニューの[書式]→[セル]→[表示形式]で[標準]を指定した時(38768と表示される)のように、数字の文字列にして扱いたいのですが、桁数を8ケタにそろえたい(00038768のようにしたい)のです。

表示形式の変更は、日付をセルに格納したのち、

Activecell.NumberFormatLocal = "00000000"

で可能です。

Excelのメニューで操作した場合も同じですが、表示形式が8ケタでも、実際に値を取得した時は「38768」になってしまいますよね。
(文字列としてあつかって、「00038768」と入力した場合は別ですが。)

値を取得した時、8ケタにする方法はありませんでしょうか。

当初は、Splitを使って配列に1文字ずつ格納、桁数を数え、足りない桁数分だけ「0」を追加する、という方法を考えたのですが、VBAのSplitはSplit(対象文字列, "")で1文字ずつ分解ということはできないようでした。

何か良い方法をご存知の方がいらっしゃいましたら、ご教授をお願いいたします。

コメント(5)

自分で書き込んでおきながら、解決方法にたどり着きました。
Splitしなくても、文字の個数はLenで取得できるんですね(^^;

お騒がせして申し訳ありませんでした。
結局セル上の話ってことですか?

それなら、VBAでなくても
セルの表示形式 ユーザー定義で 00000000
でいけるのでは?

VBAなら
Right("00000000" & ActiveCell.Value * 1, 8)

とかですかね
Textプロパティを使えば見えているまま取得できますよ。
例えば、セルA1について、セルの書式設定で"00000000"としていて、00038768と見えているなら、
  Msgbox Range("A1").Text
としてみてください。
セル上の表示形式ではないですね。

トピックの例を用いるなら、「00038768」という8ケタの値として欲しいのです。

エクセルの表示形式で文字列にしても、日付データを後日入力すると、日付表示になっちゃったりもしますから(経験済)

Lenで文字数を取得できると言うことがわかった段階で採った方法が、
If Len(ActiveCell.Value) < 8 Then
For i = 1 To 8 - Len(ActiveCell.Value)
myStr = myStr & "0"
Next
myStr = myStr & ActiveCell.Value
End If
のように、文字数をカウントして変数上は文字列「00038768」になるように調整する方法です。

データをセルに書き込む直前に、NumberFormatLocal = "@"にして書き出して、どうにかこうにか動かしました。
(でもこの方法だと、最初に書式を「G/標準」にして、途中で「0」にして、書き込む前に「@」にして、と騒がしい限りなんですよね・・・

=====

今日はもう出勤時間が来てしまったのでできませんが、後日試してます。
takecさん、ビリーさん、大変参考になります。本当にありがとうございます。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

EXCEL VBA 更新情報

EXCEL VBAのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。