質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

解決済

2回答

8884閲覧

VBA セルの書式設定でデータが書き変わる仕様の回避方

r_o_234

総合スコア15

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2020/06/12 07:43

前提・実現したいこと

VBAでマクロツールを創っています。
下部のVBAを実行した後のCSVファイルを外部ソフトウェアに読み込ませたいのですが、

47行目以下のシートの結果で、出力されたA2:B3のセルの書式設定が標準形式でなければ外部ソフトウェアが読み込んでくれません。
しかし、標準形式に合わせるためにVBA側でセルの書式設定を変更すると、画像に示すようにセルの中身のデータが入れ替わってしまします。手入力でセルの書式設定を"標準"に合わせても、セルの中身のデータが入れ替わってしまいます。

セルの書式設定を標準⇔日付と変更するとデータの中身が入れ替わるのはエクセルの仕様と聞いたのですが、
このエラーを避けて,2020/04/01の日付表示を20200401と標準表記するような方法、
または、それに準ずる手法を何かおわかりになれば教えて頂けませんでしょうか。

イメージ説明

発生している問題・エラーメッセージ

2020/04/01とセルの書式設定で日付表示されたものが、標準形式の表記にすると"43922"のように表示され書き変わってしまう。

該当のソースコード

VBA

1Public Sub Converter() '変数定義 2 3 Dim ftype As Variant 4 Dim fpath As Variant 5 Dim str As Variant 6 Dim Target As Workbook '読込モジュール 7 8 ftype = "Microsoft Excelブック,*.xls?" '選択できるファイルはエクセルファイルのみ 9 fpath = Application.GetOpenFilename(ftype, , "") 'ファイル参照ダイアログの表示,ftype=fpath 10 11 Debug.Print fpath 12 If fpath = False Then 13 Exit Sub 'Endで強制終了はよろしくない。ダイアログでキャンセルボタンが押された場合は処理を終了します。 14 End If 15 16Set Target = Workbooks.Open(fpath) '抽出モジュール 17 18Target.Sheets(1).Range("G2").Copy 19ThisWorkbook.Sheets(2).Range("C2").PasteSpecial xlPasteValues 20Target.Sheets(1).Range("H2").Copy 21ThisWorkbook.Sheets(2).Range("C3").PasteSpecial xlPasteValues 22ThisWorkbook.Sheets(2).Range("C2:C3").NumberFormatLocal = "yyyymmdd" 'これはC2とC3のみです 23 24Target.Close '※開いたブックは閉じておく 25Set Target = Nothing '念のため、変数開放 26 27Worksheets("Sheet2").Range("C2").Value = "1日" 'に日と標準を入れる 28Range("C2").NumberFormatLocal = "G/標準" 29Worksheets("Sheet2").Range("C3").Value = "2日" 'に日と標準を入れる 30Range("C3").NumberFormatLocal = "G/標準" 31 32 33Dim 日付() As Variant '日付合成モジュール 34Dim 行数 As Long 35Dim i As Long 36 行数 = Cells(Rows.Count, 1).End(xlUp).Row 37ReDim 日付(行数 - 2) 38 Columns(4).Insert 39 For i = 0 To 行数 - 2 40 日付(i) = DateValue(Range("A" & i + 2) & Range("B" & i + 2) & Range("C" & i + 2)) 41 Range("D" & i + 2).Value = 日付(i) 42 Next i 43 Columns("A:C").Delete 44 Range("A1").Value = "#勤務日※" 45 Columns(1).AutoFit 46 47Worksheets("Sheet2").Range("B2").Value = "12352" 'に日と標準を入れる 48Worksheets("Sheet2").Range("B3").Value = "12352" 'に日と標準を入れる 49 50'Range("A2:B3").NumberFormatLocal = "G/標準" 51 52'ここにA2:B3でを処理する記述を書く. 53 54 55Dim sh As Worksheet 'csv保存モジュール 56Set sh = Worksheets(2) 57sh.SaveAs Filename:="C:\Work\出力先\test.csv", FileFormat:=xlCSV 58str = FormatYYYYMMDD(2020, 3, 1) 59MsgBox (str) 'yyyymmdd出力用 60 61End Sub 62 63Public Function FormatYYYYMMDD(ByVal yyyy As Variant, ByVal mm As Variant, ByVal dd As Variant) As String 64 FormatYYYYMMDD = Format(yyyy * 10000 + mm * 100 + dd, "00000000") 65End Function 66

試したこと

画像に示すようにA2:A3のセルの書式設定を手入力やVBAでの入力で標準形式に変換したのですが、セルの書式設定をへ変更すると"43922"というようにデータが書き変わってしまいます。

補足情報(FW/ツールのバージョンなど)

Windwos10,Excle2016

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

dim MyDate as date
MyDate=Range("A1") '値は2020/04/01"
Range("A1")="'" & format(MyDate,"yyyy/MM/dd")
又は
Range("A1")="'" & format(MyDate,"yyyyMMdd")
ではダメですか。強制的に文字列になります。

投稿2020/06/12 08:04

tosi

総合スコア553

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

r_o_234

2020/06/15 08:20

tosiさん ご協力ありがとうございます。頭にシングルクォーテーションを入れてからセルの書式設定を変えれば、データ内容が書き変わらず変更が可能のようです。助かりました。ありがとうございました。
guest

0

ベストアンサー

外部ソフトウェアの提供元に確認するのが一番だと思うのですが、おそらく、値が"2020/4/1"のような形式でないと受け付けてくれないのでしょう。
(日付形式のセルは、見た目は日付を表しているが、実際にはある基準時からの数字)

このため、
・対象セルの書式設定を文字列にする
・'2020/4/1のように、頭にシングルクオーテーションを入れて強制的に文字列にする
のいずれかの方法で対応するしかないでしょう。

投稿2020/06/12 07:55

kenshirou

総合スコア772

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

r_o_234

2020/06/15 08:18

Kenshirouさん ご返信ありがとうございます。"頭にシングルクオーテーションを入れて強制的に文字列にする"のやり方でなんとかやってみたいと思います。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問