Excel VBAで日付書式設定のセルをyyyymmddの文字列に変換する方法

このQ&Aのポイント
  • Excel VBAを使用して、様々な書式設定のセルをyyyymmddの文字列に変換したい場合、一部の書式設定では問題なく変換できますが、標準の日付書式設定ではエラーが発生することがあります。
  • この問題を解決するためには、変換前にセルの書式をチェックし、日付書式の場合はVBAの`Format`関数を使用してyyyymmdd形式に変換します。それ以外の場合は、セルの値をそのまま取得します。
  • 修正したVBAコードを以下に示します。 ```VBA dim i Columns("A:B").NumberFormatLocal = "@" For i = 1 To 5 If Cells(i, 1).NumberFormat = "@" Then Cells(i, 2) = Cells(i, 1).Text Else Cells(i, 2) = Application.Text(Cells(i, 1), "yyyymmdd") End If Next ```
回答を見る
  • ベストアンサー

Excel VBAで、様々な書式設定のセルをyyyymmddの文字列に

Excel VBAで、様々な書式設定のセルをyyyymmddの文字列にしたい dim i Columns("A:B").NumberFormatLocal = "@" For i = 1 To 5 If Cells(i, 1)NumberFormat = "@" Then Cells(i, 2) = Aells(i, 1).text Else Cells(i, 2) = Application.text(cells(i, "1"), "yyyymmdd") End If Next Excel VBAで、様々な書式設定のセルをyyyymmddの文字列にしたいのですが・・ 上記のソースを書いた場合、文字列・日付・ユーザ定義などの書式設定ではうまくいきますが、標準で19990101などと入力されていた場合はエラーになってしまいます。 どのように直せばうまくいくのでしょうか? よろしくお願いします。

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

  • ベストアンサー
  • qyukip
  • ベストアンサー率40% (13/32)
回答No.1

エラーの原因は標準で入力されていた19990101は日付型ではないためです。 1999/01/01のように入力していた文字列を修正すれば正常に表示されます。 日付型へ変換できるかISDATEを使用してチェックを入れてみるといいかもしれません。

関連するQ&A

  • excel vba 17桁の数字が表示できません。

    毎度お世話になります。 EXCEL VBA で、CSVファイルを読み込み マクロで17桁数字を表示したいのですが、どうしても出来ません。 Range(Cells(GYO, 1), Cells(GYO, 4)).NumberFormat = "00000000000000000" 上記ですと15桁制限のため下2桁がゼロになってしまい Range(Cells(GYO, 1), Cells(GYO, 4)).NumberFormat = "@" ですと1.2345E+16となってしまい Range(Cells(GYO, 1), Cells(GYO, 4)).NumberFormat = "'00000000000000000" ですと'12345678901234500 となってしまいます。 セルの書式設定はあらかじめ文字列にしてありますが、これも vbaで何らかの指定が必要なのでしょうか? 初心者でわからないことだらけですが、よろしくお願いします。

  • セルの書式が標準なのに文字列にできるのはなぜ?

    会社のシステムで吐き出したデータですが セルの書式設定が標準なのに文字列となっています。 マクロを利用して、あるセルの値を別セルへ転記すると、 数字は数値に変換され、先頭の0は消え、桁数が多いと指数表示になってしまいます。 会社のシステムが吐き出したエクセルはセルの書式が標準なのに 中の数字が文字列でいられるのが疑問です。 会社のシステムの吐き出したデータは Microsoft Excel 2.1ワークシートで 全てのセルの書式設定は「標準」です。 で例えば 12345678901234 は 12345678901234 と表示されていて 「数値が文字列として保存されています」 となっています。(先頭に ' は入っていません) 0101という値のセルでも 表示は0101ですが 「数値が文字列として保存されています」 となっています。(先頭に ' は入っていません) それらのセルの値をマクロとかで別セルに転記すると 転記先では1.23457E+13 と表示されてしまいます。 (0101は101になります。) まっさらなエクセルに自分で手入力すると ・セルの書式設定が標準だと 12345678901234 ↓ 1.23457E+13になります。 ・セルの書式設定が数値だと 12345678901234 ↓ 12345678901234 ・セルの書式設定が文字列だと 12345678901234 ↓ 12345678901234 (ただし 数値が文字列と保存されています と注釈有) なのに会社のシステムの吐き出しデータは セルの書式設定が標準なのにもかかわらず 12345678901234 ↓ 12345678901234 (ただし 数値が文字列と保存されています と注釈有) となっています。 手入力で書式設定が標準の状態でセルに12345678901234 と表示させるには先頭に ' をつける方法しか知りませんが ' が無いのに表示されています。 でもこの該当セルをマクロで別セル(書式設定:標準)に転記すると 1.23457E+13 となります。 またシステムが吐き出したエクセルの同じシート内に 以下のマクロで転記すると ↓ Sub 転記() 行 = 2 Do If Cells(行, 6).Value = "" Then Exit Do If Cells(行, 6).Value >= 10 Then Cells(行, 7).Value = Range("A2") Else Cells(行, 7).Value = Range("A3") End If 行 = 行 + 1 Loop End Sub ↓ このマクロだと A列~F列が書式設定が標準なのに文字列として表示されているのですが 転記先のG列が書式設定が標準であっても 12345678901234 (数値が文字列と保存されています と注釈有) と同じ状態のまま転記できます。 新しいBOOKのシート2に 会社の吐き出しデータをシートコピーした後、 (セルの書式設定:標準だが文字列で表示されている) そのBOOKに登録されているマクロで シート2のセルからシート1のセル(書式設定:標準)に転記すると 数字は数値に変換され、先頭の0は消え、桁数が多いと指数表示 となってしまいます。 ちょっと混乱しています。 理屈等教えていただければと思います。お願いします。

  • Excelで日付の書式を指定文字列に変換

    Excelで日付の書式を指定文字列に変換 セルから日付情報を得て、文字列でyyyymmddに変換するには、どのようにすればいいでしょうか。VBA・関数のどちらでもかまいません。よろしくお願いします。

  • セルの書式設定

    VBAで時刻の列を別シートにCOPYしたところ、 セルの書式設定まではコピーされず、 ハチャメチャな数字が表示されてしまいました。 セルの書式設定もコピーできないでしょうか? Sheets("Sheet3").Columns(1).Value = Sheets("Sheet1").Columns(1).Value でやってます。

  • ACCESSでエクセルの書式設定

    ACCESSでエクセルにデータを出力し書式を設定しています。 数字の出力で、マイナスの場合赤字になるようにしたいのですが、上手くいきません。 エクセルの右クリック→セルの書式設定→ 表示形式タブの分類を数値、桁区切りにチェックし、-1,234の赤字 の書式はどのように設定すれば出来るのでしょうか? 現在 ExcelSheet.Cells(行,列).NumberFormat = "#,##0" で設定しています。

  • エクセルで時間セルをVBで文字列として取り込むには

    エクセルです。 時間セルがあって、エクセル上での表示では 12:30:15 という風に表示するようにセルの書式設定でしているのですが、そのセルを VBで取り出そうとして、 A = Cells( 1,1 ) とかってすると、Aには、0.66656 とかって数字が入ってきてしまいます。 Aは文字列として、DIM A as String とかってしているのですけどね これをちゃんとAに、12:30:15 という形の文字列として入れるのにはどうしたらいいのでしょか

  • Excel VBA(列全体のセルの処理)の質問です。

    Excel VBA(列全体のセルの処理)の質問です。 初心者です。 やりたいことは、一つの列(C列とします)の各セルに整数もしくは同一文字列がセットされています。行数は不定ですが、全行に渡って処理したい。 処理はセルが文字列なら何もしないで、次の行に移る。 数字なら、数字の大きさに従って背景色を変える(0,1-10,11-20とか)。 セルの書式は 標準 になっています。 行の選択は => Columns("C:C").Select 背景色指定はこんな感じかと思っています。 Dim delay As Long if delay = 0 Then ColorIndex = 10 Pattern = xlSolid ElseIf delay ... Then : Else : End If 列全体に渡って実行する方法、各セル値を取り出してやる方法がわかりません。 宜しく、お願いします。

  • Excelの「’」とセルの書式設定(文字列)の違い

    こんばんわ。 Excelの文字列表示について、教えてください。 数字を入力する際に、先頭に「'」を入力すると 文字列として入力することが出来ますが、 数字が入っているセルのセルの書式設定から 「文字列」に表示形式を変更することとの 違いはなんなんでしょうか? やり方は違うけれど、結果は同じということでしょうか? 「'」を入力すると、データが文字そのものに変わり、 表示形式を変更すると、見た目だけ(左揃えになるなど) 文字列のように見えるだけで、データは 数字のままということなんでしょうか?? また、文字列として入力された数字を Value関数で数値に変換してしまうのと セルの書式設定で「数値」に変更するというものも 同じように、違いが良く分かりません。。。 もう、頭の中が「??」だらけです。 違いを教えていただけたら・・・と思います。 どうぞよろしくお願いいたします<m(__)m>

  • EXCEL起動と同時に全セル書式を文字列にしたい

    EXCELを起動すると同時に、 全セルの書式が「文字列」になっているようにさせたいのですが、 VBAのAutoExecを使用する以外に方法ありますでしょうか? ユーザー設定やオプションも一通りチェックしたのですが、 そのような設定はできそうになさそうでした。 できれば、XLA化してアドインできるようにさせたいのですが。 どなたか良い方法をご存知でしたら、ご教授くださいませ。 よろしくお願いします。

  • Excel VBAでの" "の正しい使い方

    Excel 2003を使っています。 セルY1には0又は1の数値が入ります。 セルI6とI7の「セルの書式設定」をY1の値によって変化させるのが目的です。 セルY1が0の場合はI6の「セルの書式設定」を「m"月"d"日("aaa") 17:00~ 艇 庫"」に、I7は空白にする。 また、セルY1が1の場合はI6の「セルの書式設定」を「m"月"d"日("aaa") 16:00~ 艇 庫"」に、 I7は「m"月"d"日("aaa") 17:00~ 艇 庫"」にしたいのです。  とりあえず、VBAで以下のようなものを作りましたが、" "の使い方が間違っているようで、意図した結果が出ません。 Private Sub Worksheet_Change(ByVal Target As Range)   If Target.Address = "$Y$1" Then      If Range("Y1") = 0 Then       Range("I6").NumberFormatLocal = "m""月""d""日(""aaa"") 17:00~ 艇 庫"       Range("I7").NumberFormatLocal = ""     Else       Range("I6").NumberFormatLocal = "m""月""d""日(""aaa"") 16:00~ 艇 庫"       Range("I7").NumberFormatLocal = "m""月""d""日(""aaa"") 17:00~ 艇 庫"     End If    End If End Sub  どのように修正すればよいか、お教えください。画像も何もなくて分かりにくいかもしれませんが、よろしくお願いします。

専門家に質問してみよう