Excel2021,VBAについて相談です。最近ユーザー定義関数というものを知り、0の時は空欄を、それ以外の時は値を返す関数を作成しました。さらに、「:」がある→時間なので[h]:mm形式「:」がない→数字なので#,###形式にしたいのですがFunction ZeroBlank(val As Variant) As Variant'値が0や0:00の時は空白を返すIf val = 0 Or val = \u0026quot;0:00\u0026quot; Or val = \u0026quot;00:00\u0026quot; ThenZeroBlank = \u0026quot;\u0026quot;'上以外で、「:」があれば表示形式を[h]:mmに、なければカンマ区切りの数値にして、値を表示ElseIf InStr(val, \u0026quot;:\u0026quot;) \u0026gt; 0 Or InStr(val, \u0026quot;:\u0026quot;) \u0026gt; 0 ThenZeroBlank = Format(val, \u0026quot;[h]:mm\u0026quot;)ElseZeroBlank = Format(val, \u0026quot;#,###\u0026quot;)End IfEnd Functionこのようにしてもフォーマットが上手く機能せず、調べたらユーザー定義関数でフォーマットが使えない?ことがわかりました。フォーマットが使えない場合、[h]:mm形式にしたいところが[h]:mm:ssになったり、カンマ無しの数値になったりと困っています。そこで質問なのですが、上記のやりたいこと(0の時は空欄を、それ以外の時は値を返す、かつ「:」がある→時間なので表示形式を[h]:mm「:」がない→数字なので表示形式を#,###にする)を上手くやるにはどうやったらいいでしょうか?同じセルに場合によって数値や時間、他の文字を入れることもあるのでセル毎に表示形式を決めるのでは上手くいかず、ws1.Range(\u0026quot;C5\u0026quot;).Value = ZeroBlank(ws2.Cells(i, \u0026quot;C\u0026quot;).Value)このように決まったセルに値を入れていくのですが、一応この段階で入るものが時間加数値化は決まっているので(他のものが入ったら困る)ws1.Range(\u0026quot;C5\u0026quot;).NumberFormatLocal = \u0026quot;[h]:mm\u0026quot;ws1.Range(\u0026quot;C5\u0026quot;).Value = ZeroBlank(ws2.Cells(i, \u0026quot;C\u0026quot;).Value)とやればいいのはわかるのですが、100カ所近くあって大変だなと・・・上手く伝わるかわからなくて申し訳ないのですがお知恵をお貸しください

Excel

1件の回答

回答を書く

1190083

2026-03-04 13:15

+ フォロー

時刻として入っているならシリアル値なので

:

が入っているように見えても実際のデータには入っていないという問題がありますがそこは大丈夫?



見た目通りの文字列を取得するなら

.text

プロパティ―を使えば取得できます。



\u0026gt;調べたらユーザー定義関数でフォーマットが使えない?ことがわかりました。

Format関数で使えないだけで

WorksheetFunction.textでは使えると思います。



ところで



ws1.Range(\u0026quot;C5\u0026quot;).Value = ws1.Range(\u0026quot;C5\u0026quot;).text

ではだめだったの?

うったえる有益だ(0シェアするブックマークする

関連質問

Copyright © 2026 AQ188.com All Rights Reserved.

博識 著作権所有