Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Home : 指定なし)
日付表示の変更
投稿日時: 21/09/14 22:08:23
投稿者: あかつきさん2021

お世話になります。
 
以下の表にて日付列の表示形式をスラッシュ区切りに変更したいのですが全く変更できずに困っています。
Format関数では出来ないでしょうか?
1月1日が2014/01/01になるようにしたいです。
 
 
日付    数量    単価    金額
1月1日    26    304    7,904
1月2日    68    305    20,740
1月3日    84    972    81,648
1月4日    53    684    36,252
1月5日    34    703    23,902



 
 
作成したコード
Sub 日付の形式変更()
 
Dim i As Long
 
i = 2
 
Do While Cells(i, 1) <> ""
 
    Cells(i, 4) = Cells(i, 2) * Cells(i, 3)
    Cells(i, 1) = Format(Cells(i, 1), "yyyy/mm/dd")
    Cells(i, 4) = Format(Cells(i, 4), "#,##0")
    i = i + 1
     
Loop
 
End Sub

回答
投稿日時: 21/09/14 22:24:11
投稿者: WinArrow
投稿者のウェブサイトに移動

一般機能で充分対応可能・・・・しかも早い
ループ処理では、処理が遅い。
  
列Aを選択して
右クリック→「セルの書式設定」を開く
「表示形式」タブで、「ユーザー定義」を選択し、「yyyy/mm/dd」を入力します。
  
列Dを選択し
「ホーム」タブの中の「数値」グループの中の[,]をクリックします。
  
セルD2に
=B2*C2
を入力します。
そのまま下へフィルドラッグします。
  
※表示形式は、列のセル全部に適用されるので、
後日、データ入力しても、自動で対応してくれます。
  
わざわざ、VBAで対応する要件ではありません。・・・と思います。
 

回答
投稿日時: 21/09/14 23:44:00
投稿者: mani

>日付列の表示形式をスラッシュ区切りに変更したいのですが全く変更できずに困っています。
 
表示形式を変更しても変わらないということでしょうか?
もしもそうなら、「区切り位置」を使ってみてください。
 
日付の入力されているセルを範囲選択して、「データ」タブ」の「区切り位置」を選択。
2番目の画面で「表示形式」を「日付」にして実行してください。
 
システムから吐き出したデータで、たまにそういうものがあります。
原因はわかりませんが、対処できれば済むことですので・・・。
 
筋違いでしたら申し訳ありません。

回答
投稿日時: 21/09/15 07:45:59
投稿者: simple

若干の補足です。

引用:
Format関数では出来ないでしょうか?

>Cells(i, 1) = Format(Cells(i, 1), "yyyy/mm/dd")
と書式を変えた文字列を入力したのにぃ、という気持ちなんでしょう。
残念ながら、そのセルの書式は一切変わりません。
 
表示形式は、「日付」の例示3月14日形式を使っているのでしょう。
そのセルに手で 2021/9/21 と入力してみてください。
2021/9/21という文字列を入れたつもりでも、
Excel君が気を利かせて日付型データと判定して、値をその日付に変更するだけで、
表示されるのは、9月21日となるはずです。これと同じことが起きているのです。
 
処方箋はすでに提示されたように、表示形式そのものを変更することです。

回答
投稿日時: 21/09/15 07:52:36
投稿者: WinArrow
投稿者のウェブサイトに移動

A列セルの表示形式が、文字列でも日付形式でも
Format関数で、見た目はyyyy/mm/ddで表示されます。
しかし
表示形式が「文字列」の場合、見た目は、yyyy/mm/ddになっていても、
format関数では、表示形式を変更することはできません。
当該セルを使用(参照)する場合、
使い方によって、不具合があるかもしれません。
  
実際に
A列セルの表示形式は、どのようになっていますか?
A列セルの「値」は、どのようになっていますか?(数式バーで確認できます)

回答
投稿日時: 21/09/15 09:52:10
投稿者: QooApp

VB的に表示形式を変更するなら
 
Cells(i, 1).NumberFormatLocal = "yyyy/mm/dd"
 
とかって設定するんじゃなかったでしたっけ
 
▼参考
'文字列型の場合
Cells(i, 1).NumberFormatLocal = "@"
 
'数値を常時3桁表示する場合
Cells(i, 1).NumberFormatLocal = "000"

回答
投稿日時: 21/09/15 13:15:20
投稿者: WinArrow
投稿者のウェブサイトに移動

表示形式を設定する場合は、
手操作でもVBAでも同じですが、
セル個々に設定すると
セル範囲で設定するにに比べは、ファイル容量が増加します、
それに伴い、開く、閉じる処理速度が遅くなります。
 
それから、現時点で入力されているセル範囲だけ設定した場合、
それ以降にデータ量が増加した場合、同じ処理を実行しなければいけなくなります。
 
このようなある意味無駄と思えることは、回避するような運用を考えることを勧めします。
 
 
 
 
 
 
 
 
 
 
 
 

投稿日時: 21/09/15 21:50:10
投稿者: あかつきさん2021

WinArrowさん
 
回答ありがとうございます。
 
対象セルは1月2日と表示されていますが、数式バーでは2021/1/2となっています。

回答
投稿日時: 21/09/15 22:35:05
投稿者: WinArrow
投稿者のウェブサイトに移動

あかつきさん2021 さんの引用:
WinArrowさん
 
回答ありがとうございます。
 
対象セルは1月2日と表示されていますが、数式バーでは2021/1/2となっています。

 
 
そうですか・・・・
其れだったら、列Aを選択して、
右クリック→「セルの書式設定」ダイアログを開きます。
「表示形式」タブ⇒「分類」のンかの「ユーザー定義」を選択します。
「種類」のボックスに「yyyy/mm/dd」入力し、「OK」をクリックします。
 
VBAで対応するとすれば、
セル個々に設定するのではなく、列に設定します。
 
コードでは
Columns("A").NumberFormatLocal = "yyyy/mm/dd"
となります。

投稿日時: 21/09/15 22:53:32
投稿者: あかつきさん2021

WinArrowさん
maniさん
simpleさん
QooAppさん
 
アドバイスありがとうございました。
 
Columns("A").NumberFormatLocal = "yyyy/mm/dd"
 
で無事に希望の挙動ができました。
またお願いいたします。