[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『日付を文字列に』(いろは)
質問です。
日付を文字列に1発で変換するVBAを作成したいのですが、
色々調べても出てきませんでした。
C列とH列に記入されている日付データ(2016/01/01)を文字列として表示したいです。
この日付データが入っているExcelは、最終的にcsvにするのですが
csvにすると、日付が(#2016-01-01#)という風に表示されてしまいます。
こちらの日付データは更新などを行うので、関数などは使えないかなと思いました。
(日付は手入力ではなく、別データから引っ張ってくるものです。)
その時によってデータ量も変わる可能性があります。
H列に記入される日付は関数を使用し、C列に記入される日付のひと月後の日付を
表示するというものにしています。(=+EDATE(C3,1))
説明が下手で申し訳ありません。
よろしくお願い致します。
< 使用 Excel:Excel2010、使用 OS:Windows7 >
関数案だが。
=EDATE(C3,1) を =TEXT(EDATE(C3,1),"yyyy/mm/dd") とかではどうか。
なお、上記の場合は2016/07/25の形となる。 (ねむねむ) 2016/07/25(月) 13:35
と書いたが、セルに日付形式で入っている物をそのままCSV形式で保存しても#2016-01-01#の形にはならないが
その最終的なCSV形式にするのは何でどうやっているのだろうか? (ねむねむ) 2016/07/25(月) 13:39
あと、CSVファイルで日付が#2016-01-01#形式になっているというのはどうやって確認したのか? (ねむねむ) 2016/07/25(月) 13:51
csv形式にするのは下記のURLの方のVBAを使用しています。
http://xxxx7.com/2014/09/29/101628
訳あって、ボタンひとつでExcelデータをcsvに1発変換したいのでこちらを使用しています。
よろしくお願い致します。
(いろは) 2016/07/25(月) 13:54
で、 >CSVファイルで日付が#2016-01-01#形式になっているというのはどうやって確認したのか? は?
CSVファイルでどうなっているかを確認するにはメモ帳などのテキストエディタで確認しないとならない。 (ExcelやAccess等で読み込むと読み込んだソフトがいろいろとデータの形を変換するため)
メモ帳などで開いた際にも#2016-01-01#の形になっているのだろうか? (ねむねむ) 2016/07/25(月) 14:08
csvはExcelで開いて確認いたしました。
今テキスト形式でも確認したのですが、同じように「#2016-01-01#」
と表示されました。
(いろは) 2016/07/25(月) 14:16
すまない。 Writeで出力すると日付は「#2016-01-01#」形式になるのだな。
最初に書いた >=EDATE(C3,1) >を >=TEXT(EDATE(C3,1),"yyyy/mm/dd") ではどうだろうか?
自分ではPrintで固定長データの出力をするのが多いため気付くのが遅れてしまった。
(ねむねむ) 2016/07/25(月) 14:26
いただいた関数を試してみたところ、H列の値はきちんと「2016/01/01」と
表示されました!
C列なのですが、TEXT関数を使用しようと思ったのですが、データとして持ってきているので、
すでに関数を打ち込む場所に「2016/01/01」と表示されてしまっているので
どうすればいいのかがわかりません。
よろしくお願い致します。
(いろは) 2016/07/25(月) 14:31
C列は手作業で有ればC列を選択-データ-データツール-区切り位置を開き、次へ、次へ、で3/3の列のデータ形式を 文字列にして完了ではどうか。
マクロに組み込みたいのであれば上記をマクロの記録で撮ったものを参考にしてはどうか。
なおH列はC列を文字に変更後も >=TEXT(EDATE(C3,1),"yyyy/mm/dd") のままで。
(ねむねむ) 2016/07/25(月) 14:41
いろはさん
>Write #fileNumber, Cells(row, 1), Cells(row, 2), Cells(row, 3) を Write #fileNumber, Cells(row, 1).Text, Cells(row, 2).Text, Cells(row, 3).Text
にするとセルに表示されている通りの結果になりますが両脇に"が付加されてしまいます。
単にA:Cを新規シートにコピーしてCSV形式で保存してはどうですか? (seiya) 2016/07/25(月) 14:49
全くテーマとは離れてしまい恐縮ですが、
csvFile = ActiveWorkbook.Path & "\data.csv"
こういう記述をよく見かけ、ちょっと気持ちの悪さを感じたりします。 コードを見たときに ActiveWorkbook、つまり、実行時点でアクティブになっているブックは何なんだろうと 心配というか、気になってしまいます。
おそらくは、マクロブック(自分自身)なんだろうとは思いますが。
csvFile = ThisWorkbook.Path & "\data.csv"
と書いておくと、コード的にもわかりやすいですし、万が一、同じエクセル区画で、別のブックが開かれていて それがアクティブになっていても、心配することなく処理実行できます。
ご一考ください。
(β) 2016/07/25(月) 14:56
マクロに組み込みたかったので、ためしてみたのですが#などの問題は解決したのですが、
今度は表示形式が「01/01/2016」という風になってしまいました。
この場合は、文字列に変換した後さらにマクロに
「01/01/2016」を「2016/01/01」という表示に変換するというマクロを
プラスする必要があるのでしょうか?
よろしくお願い致します。
(いろは) 2016/07/25(月) 14:58
seiyaさんの Cells(row, 1).Text とTextプロパティを使うのではどうだろうか? (ねむねむ) 2016/07/25(月) 15:04
申し訳ありません。
せっかく御提案していただいたのですが、このcsvは最終的に別のソフトに取り込んで使用するので
「"」が入ってしまうと別ソフトに影響が出るのでこの案は使用しないでおきます。
また、このExcelファイルは最初にcsvのデータをExcelファイルにコピーするというマクロも組んでおり
さらにこのファイルはExcelをあまり知らない方でも扱えるようにほぼすべての作業をボタンひとつでできるようにしています。
なのでデータをコピー&ペーストという作業ができない状態です。
わざわざご回答いただいたのに本当に申し訳ありません。
(いろは) 2016/07/25(月) 15:09
ありがとうございます。
(いろは) 2016/07/25(月) 15:11
まだまだマクロ初心者の勉強中の身なので、助言いただいたことを
どうするのかわからないです。(textプロパティをCell(row,1)の下?間?に記入するということでしょうか?
よろしくお願い致します。
(いろは) 2016/07/25(月) 15:15
>なのでデータをコピー&ペーストという作業ができない状態です。 だから自動化したいのですよね?
1) 新規シートを追加 2) データシートのA:Cをコピーして新規シートに貼り付け 3) 新規シートのシートタブを右クリックして [移動またコピー] - [新しいブック] 4) 新規ワークブックをCSV形式で保存
これをマクロの記録
でいいんじゃないの (seiya) 2016/07/25(月) 15:19
seiyaさんの書いた Write #fileNumber, Cells(row, 1).Text, Cells(row, 2).Text, Cells(row, 3).Text にするということだが。
でも >「"」が入ってしまうと別ソフトに影響が出るのでこの案は使用しないでおきます。 ということであれば日付データを文字列にした場合も前後に「"」がつくと思うのだが。
そこで私が時々やるのだが
Write #fileNumber, Cells(row, 1), Cells(row, 2), Cells(row, 3) を Print #fileNumber, Cells(row, 1) & "," & Cells(row, 2) & "," & Cells(row, 3); とPrint(文字列も""で囲まれない)にしてPrintでは挿入されない「,」も自分で入れてしまうというのはどうだろうか? (ねむねむ) 2016/07/25(月) 15:23
すみません、書いている最中に説明文の一部が消えてしまっていました。
csvファイルは新規で作成するのではなく、別ソフトからデータをcsv形式として
出力するので上記で言っていただいた方法で作成ができません。
(ブック名、シート名等を変更されてしまうと困るので)
また、私の考え方がおかしいのかもしれません。(頭がこんがらがってきているので)
その際は申し訳ありません。
(いろは) 2016/07/25(月) 15:25
説明不足で本当に申し訳ありません。
先程貼らせていただいたURLのコードを使用していると言ったのですが、
そのコードなのですが使用しているコードは、目次内の
「列数が多い場合、列数が変わる場合」の方を使用させて頂いております。
そちらのコードの場合、ねむねむさんに言っていただいた「print」の式はどのように使用すればよろしいでしょうか?
よろしくお願い致します。
(いろは) 2016/07/25(月) 15:31
For row = 1 To lastRow For col = 1 To lastCol - 1 Write #fileNumber, Cells(row, col); Next Write #fileNumber, Cells(row, col) Next 部分を For row = 1 To lastRow For col = 1 To lastCol - 1 Print #fileNumber, Cells(row, col) & ","; Next Print #fileNumber, Cells(row, col) Next で、どうだろうか?
(ねむねむ) 2016/07/25(月) 15:38
試したところ、csvで日付がきちんと表示されました!
本当に助かりました、ありがとうございます。
(いろは) 2016/07/25(月) 15:46
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.