• ベストアンサー

Format(Date, "dd")と同じ形式で

Format(Date, "dd")の数値表記と Right("0" & day(Date), 2)の数値表記が 違うものとして認識されるようです。 (例 ピボットテーブルで同じ”11”が2つ存在する) 手動で数値を入れたときや 強制的に月初”01”を入れたいときに Formatで表記したものと同じ状態にしたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.2

#1補足欄への返信です。 > 検証はしましたが今回の問題とのつながりがわかってはいません。 「ピボットテーブルで同じ”11”が2つ存在する」 というのが 「今回の問題」 ですよね? 単純化すると、 「2つ」のうち、1つは【数値】、1つは【文字列値】、なのではないですか?ということを書きました。 例えば、その日付がC3セルにある場合、適当な空いてる列を使って、  =ISTEXT(C3) という数式の戻り値に相違がないか確認してみては如何でしょう。  見た目の【表示】は "11" 。 【値】が【文字列値】の "11" ならば、TRUE  見た目の【表示】は "11" 。 【値】が【数値】の 11 ならば、FALSE 相違が見られたならば、どちらかに統一する方法は難しくないですよね。 VBAの Format 関数については既述の通りで補足しなくてもいいと思います。 今回の補足を加味すると  見た目の【表示】は "11" 。 【値】が【文字列値】の "11" 。  見た目の【表示】は "11" 。 【値】が【文字列値】の " 11" 。 と、目に見えない半角スペースが紛れているケースも考えないといけないのですかね。 この場合は  =C3="11" という数式で確認もできますが、 ワークシートメニューの[検索・置換]機能で、検索値に半角スペースを指定するだけで 確認から解決まで容易にできると思います。 /// > TextBox10.Text = Str("01") > > としたときにテキストボックスに「01」ではなく「1」と表示される問題でつまづいています。 〓〓〓〓〓〓〓〓〓以下VBAヘルプから引用〓〓〓〓〓〓〓〓〓 Str 関数 バリアント型 (内部処理形式 String の Variant) の値を返します。 数式の値を文字列で表した値 (数字) で返す文字列処理関数です。 構文 Str(number) 引数 number には有効な数式を長整数型 (Long) で指定します。 この引数は必ず指定します。 解説 数値を文字列に変換すると、戻り値の先頭に符号を表示するためのスペースが常に確保されます。 数値が正の場合は、Str 関数の戻り値の先頭にスペースが挿入されます。 このスペースはプラス記号を意味します。 日付、時刻、通貨、ユーザー定義の書式などで数値を書式設定するときに、Format 関数を使います。 Str 関数と異なり、Format 関数を使用して変換した場合は、 引数 number の先頭にスペースは挿入されません。 メモ Str 関数は、ピリオド (.) だけを有効な小数点記号として認識します。 異なる小数点記号を使用する場合は、CStr 関数を使って数値を文字列に変換します。 〓〓〓〓〓〓〓〓〓以上引用(改行は筆者)〓〓〓〓〓〓〓〓〓〓     要点整理   Str 関数の引数は「数字」ではなく【数値】です。   Str 関数の戻り値は「数字」【文字列値】です。   数値が正の場合は、Str 関数の戻り値の先頭にスペースが挿入されます。 まず、Str 関数は本来【数値】を【文字列値】に置換する為の関数です。 なので、= Str("01") のような使い方をするものではありません。 TextBox10.Text に "01" を設定したいということなら、  TextBox10.Text = "01" または  TextBox10.Text = Format(1, "00") です。 【数値】を指定するべき引数に【文字列値】を指定した場合、 引数の【文字列】が「数字」として読めるならば、 自動的に引数の「数字」を【数値】に置換する機能(型のキャスト)が働きます。 よって、 > TextBox10.Text = Str("01") は、  TextBox10.Text = Str(1) と命令しているのと同じことになります。 > ......テキストボックスに「01」ではなく「1」と表示される...... = Str(1) の戻り値は先頭に半角スペースがある ■ 1■ です。■01■でも■1■でもありません。 Str 関数の使い途としては、   【数値】(正整数)を【文字列値】に変換しながら、先頭に半角スペースを付加する というのが現代的な存在理由で、他の使い方をする例はここ数年見かけません。 /// 確認しておいて欲しいのですが、 今回の#1、そして前スレ、どちらも『セル』の【値】と【表示形式】と【データ型】の話をしました。 『TextBox』は『セル』とは異なり、 「もっぱら【文字列値】を扱う」もので、他は関係ありません。 /// Str 関数が一連の質問とどのように関連付けされるのか、質問者さんにしか判らないことのように思います。 VBAの関数やプロパティなどを覚えたい、ということならば、 それぞれの関数やプロパティなどの用途・目的・条件・用法などの基本的な部分は 教本や辞書など(書籍、Webページ、VBAヘルプなど)を頼りに覚えた方がいいです。 質問掲示板は色々な人が色々な意見を書く場所で、良い面も多くありますが、 初歩的なことを学ぼうという人にとっては、一貫性がない、という負の面もあります。 /// VBAを書き上げる力、というか、上達する為の指標、というか、私流儀の紹介になってしまうのかも知れませんが 「何をしたいのか自分に問うて、自分自身に説明してみる」 「目的を明確にして、目的に適した道具(例えば関数やプロパティ)を選ぶ」 「とにかく動くようになるまで書き上げることに集中する」→あらためて検証する。 といった決め事が、息詰った時に私を助けてくれる私のサブルーティンです。 /// 大変でしょうけれど、自分を信じてひとうひとつ覚えていくしかありあせん。 頑張ってください。 それでは、また。

mougmoug
質問者

お礼

了解しました!!!!

その他の回答 (1)

  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.1

こんにちは。 どうして文字列に拘るのか?はこの際置いておきます。 >Format(Date, "dd")の数値表記と >Right("0" & day(Date), 2)の数値表記が >違うものとして認識されるようです。 どちらも等しく半角2文字の文字列値を返します。 もしも違いが出るとすれば実行するタイミングの問題で Date関数が返す今日の日付に違いが出る場合(午前零時マタギ)だけです。 【データ型】は等しく文字列型 【値】も2桁の数字からなるまったく同じ文字列です。 もし、結果に相違が出るとすれば、  セルに出力する時点 または、  01 と手入力する時点 での そのセルに設定された【表示形式】が  本来設定されているべき「文字列」ではなかったり  正しく設定されていたり 手順のミスが原因です。 #以下の説明は、Excelや多くの表計算アプリでの基本的な仕様に関するものです。 #一旦、VBAのことは忘れて、表計算アプリの基本について理解を深めてください。 どうも誤解があるようですが、 セルには【値】と【表示】に関する色々なプロパティがあります。 同じ様に見えても【値】と【表示】が異なることは一般的にあることです。 また、セルの【値】が どのような【データ型】で格納されるかを決定するのは2点、  格納しようとしている【値】の【データ型】と  事前にセルに設定されている【表示形式】 によって決定されます。 実験用に真っ新なシートを用意して試してみてください。 ■a■数値  A1を選択して、   Ctrl + 1を押して   [表示形式]タブを選び   [分類]の中にある[ユーザー定義]を選び   [種類]の直下に 00 と入力して   [OK]を押す  これで【値】の【データ型】は「数値」  【表示形式】は2桁の「数字」と設定されます。  続けてA1に値を設定しますが、   01 、01 、1 、1  数式バーに表示されている【値】は 1 。  セルの【表示】は 01 になります。 ■b■文字列  A2を選択して、   Ctrl + 1を押して   [表示形式]タブを選び   [分類]の中にある[文字列]を選び   [OK]を押す  これで【値】の【データ型】は「文字列」  【表示形式】も「文字列」と設定されます。  続けてA2に値を設定しますが、   01 、01 、1 、1  数式バーに表示されている【値】も セルの【表示】も  入力した通りの   01 、01 、1 、1  になります。 シンプルに、■a■は「数値」■b■は「文字列」です。 見た目は殆ど同じですが、【データ型】が違い、【値】も違います。 ピボットテーブルでもオートフィルターでも ■a■と■b■は区別されます。 リストを見ると、  ■a■については 1 。  ■b■については 01 。 この場合は違いが解り易いですよね。 同じ手順で、今度は■a■■b■共に 11 と入力します。 それでもやっぱり、■a■は「数値」■b■は「文字列」です。 見た目は殆ど同じですが、【データ型】が違い、【値】も違います。 ピボットテーブルでもオートフィルターでも ■a■と■b■は区別されます。 リストを見ると、  ■a■については 11 。  ■b■については 11 。 同じものが2つあるように錯覚してしまいますね。 とりあえず、以上の説明から、誤解をといて、現状認識を正してください。 その上で、前スレの冒頭にも書きましたが 「数値であれ文字列であれ統一されること」こそ肝要、 つまり、既存のデータには、見た目が殆ど同じで異なる値のものが入り混じっているので、 それらを統一する作業が必要、ということです。 安易に手順やVBAコードを提示するのは、今回はやめておきますね。 手順よりも理解が大事、ですし、解決に必要な情報は提示出来ている筈ですので。 蛇足ですが、 ■c■日付  A3を選択して、   Ctrl + 1を押して   [表示形式]タブを選び   [分類]の中にある[ユーザー定義]を選び   [種類]の直下に dd と入力して   [OK]を押す  これで【値】の【データ型】は「日付」  【表示形式】は2桁の「数字」と設定されます。  続けてA1に値を設定しますが、   2013/4/1  数式バーに表示されている【値】は 2013/4/1 。  セルの【表示】は 01 になります。 シンプルに、■a■は「数値」■b■は「文字列」■c■は「日付」です。 見た目は殆ど同じですが、【データ型】が違い、【値】も違います。 ピボットテーブルでもオートフィルターでも ■a■と■b■と■c■は区別されます。 リストを見ると、  ■a■については 1 。  ■b■については 01 。  ■c■については 2013/4/1 。   日付が並んでいる場合は 2013年 4月 1日 と階層で表示されます。 多くの場合、日付で扱った方が何かと便利だったりするかも知れません(?)。 ■d■何がなんでも文字列  上で【表示形式】を設定したA1:A3、どれでも、  強制的に文字列にする為には   '01  と、先頭に ' を付けてあげるだけです。  この場合、数式バーに表示されているのは '01 ですが、   【値】は 01 【表示】も 01 です。  ピボットテーブルでもオートフィルターでも  ■d■は■b■と等しく文字列として扱われます。 とりあえず、以上です。

mougmoug
質問者

お礼

凄くて丁寧にありがとうございます

mougmoug
質問者

補足

遅くなりました。 検証はしましたが今回の問題とのつながりがわかってはいません。 TextBox10.Text = Str("01") としたときにテキストボックスに「01」ではなく「1」と表示される問題でつまづいています。

関連するQ&A

  • Fortranのformat形式

    format文を使って数値を出力しようとしています。 例としましてpi=3.141592を出力したいのですが、 write(10, 100) pi 100 (E12.5) とした時に 0.31416E+01 と出力されます。 これを 3.14159E+00 と出力したい時、format文はどういう風にかけばいいのでしょうか? OS: CentOS 6.5 (32bit) Intel fortran version 14.0.1 を使っています。

  • アクセス 数値+日付をyyyy/mm/dd(aaa

    テーブルに 20121201aaa 20121203bbb と言うデータがあるのですが これをクエリで あ2012/12/01(土) あ2012/12/03(月) に変えるにはどうすればいいでしょうか 数値の後ろの文字はいろんなパターンがあるので置換じゃ追いつきません。 SELECT Format(Left([テーブル1]![test],8),"yyyy/mm/dd(aaa)") AS 日 FROM テーブル1; にすると#エラーになってしまいます。 SELECT Format(CDate(Left([テーブル1]![test],8)),"yyyy/mm/dd(aaa)") AS 日 FROM テーブル1; これでもダメでした・・・

  • yyyy/m/d h:mmという表記をyyyy/mm/ddにしたい

    エクセルに関する質問です。よろしくお願いします。 シート上でyyyy/m/d h:mm(例えば2009/5/1 3:04や2009/6/15 12:04のように)で表記されている箇所を、時間表記を切って「yyyy/mm/dd」だけにしたいと考えています。 「セルの書式設定」の「表示形式」タブで設定すれば表示上は「yyyy/mm/dd」になるのですが、データ上は「h:mm」が残っています。 そのためピボットテーブルで「yyyy/mm/dd」の情報をベースに、集計しようとすると「h:mm」のデータが邪魔になってしまいます。 何とかなりませんでしょうか? よろしくお願いいたします。

  • VBAで数値を文字列にして入力したい

    Range("A" & X).Value = Year(Date) Range("B" & X).Value = Right("0" & Month(Date), 2) このVBAでは セルの書式指定で文字列にしても 文字列の指定を外すと数値に戻ります。 でも、文字列の設定を外したら 数値に戻らないものもあり ピボットテーブルで集計した時に 同じ「2013」が2種類存在してしまいます。 どうしたらいいですか?

  • Oracleで、DATE型カラムについて

    Oracle9iで、テーブルを作成しました。 各テーブルには、DATE型のカラムがあります。 テーブル内:2004-04-17 01:15:00 と、入っているとき SELECT TO_CHAR(日付,'yyyy/mm/dd hh24:mi') FROM テーブル という風にアクセスしました。 しかし、 あるテーブルでは、 4/04/17 省略形になったり、 はたまた、あるテーブルでは、 2004/04/17 00:00 と時分が0になってしまったり。 なぜ、上のように、フォーマットを指定しているのにもかかわらず、おかしくなってしまうのかわかりません。 わかる方、お教えください。

  • VBAのAccessでDATE型のINSERT

    テーブルに今日の日付でインサートしたいのですが、なぜか、まったく違う日付になってしまいます。 わかる方教えてください。 よろしくお願いします。 INSSQL = "INSERT INTO aaa(test)" _ & " Values(" & Format   (Date, "yyyy/mm/dd") & ");"

  • VBA 今日の日付に+1した場合、月末失敗する

    VBA初心者の私ですが、いつも回答者さまに助けていただいております。 今回も質問させてください。 エクセル2002を使用しています。 今日の日付に+1をして、翌日の日付を変数に入れたいのですが、 月末の場合、失敗してしまいます。 例えば、3月31日に+1をすると、3月32日になってしまします。 Dim MMM As String, DD As String MMM = Format(Date, "MMM") DD = Day(Date) + 1 DDが文字列なので当然だと思い、変数宣言を日付型にするとエラーになります。 Dim MMM As Date, DD As Date MMM = Format(Date, "MMM") DD = Day(Date) + 1 実行時エラー‘13’ 型が一致しません。 この時、MMMの値は 0:00:00 です。 日付型にすれば月末を認識して4月1日になってくれると思ったのですが・・・。 私の書き方が悪いのでしょうか? 他に書き方がありましたら教えてください。 どうぞよろしくお願いします。

  • Datetime型とDate型

    SQLServer2008 ですが、日付のフィールドにこれまで使っていたDatetime型をDate型にしてみました。 連結Formでの画面表示が「2009/07/27」→「2009-07-27」に変わりました。 テーブルの表示時も同様に「-」になりました。   Dim wk_date date   if SQL_date = wk_date then   ・・・ 上記のAccessVABのIF文で・・・ 実際には同じ日付なのにマッチしなくなってしまいました。 Format関数で「yyyy-mm-dd」へ変換すればマッチします。 上記のwk_dateをSQLのフィールドに代入し書き込むとエラーにならず 「yyyy-mm-dd」の形へ変換されています。 質問 (1) 「-」でなく今まで通りの「/」にする事は出来ないでしょうか? (2) 比較時は変換するしかないのでしょうか?   (代入時は自動的に変換できているのに比較時も自動でやってくれても良さそうなんですが・・・)

  • Excel ピボットテーブル 外部データ取り込み

    外部データ取り込みによるピボットテーブルにて、値が0となり正しい値が表示されません。 Book1にデータを蓄積しています。 Book2でBook1のデータを取り込んでピボットテーブルを作成したところ、あるフィールドの集計値だけが0となってしまいます。 問題はBook2でデータを取り込んだ際に、そのフィールドだけが文字列扱いになってしまっているようです。(ピボットテーブルのセルの詳細表示にて、文字列となっていることを確認) Book1にてピボットテーブルを作成した場合、そのフィールドは数値として認識しています。 どのように対処すれば、数値として認識してくれるのでしょうか? 動作環境 Win7 Excel 2010

  • 日付フォーマット

    テーブルから日付データを取得してフォーマットしたいのですがうまくいきません。 DATETIME型の項目に入っている日時(Y-m-d H:i:s)を取得してY/m/dにフォーマットしようと $result = date("Y/m/d", $getdata); としたところ、結果が 1970/01/01 となってしまいました。 $getdataには存在する日時(Y-m-d H:i:s)が入っている事を確認しています 正しくフォーマットするにはどうしたら良いのでしょうか?

    • ベストアンサー
    • PHP

専門家に質問してみよう