お世話になります。
現在VB2008にてフォームの開発をしているのですが、
DataGridViewのCellに手入力で数値の値を入力し、
その数値を時刻のHH:mmの書式に変換する仕様を
作成したいのですが、その関数が解らないんです。
具体的な目的としては、
例として
854 → 8:54
2005 → 20:05
と表示されるようにしたいのです。
一応、Format関数や、CDateなどを試してはみたのですが、
目的どおりの動作は行われませんでした。
どなたか、上記の動作を実現する関数などを
ご存知の方いらっしゃましたらご教授いただけないでしょうか。
お手数ですが、よろしくお願いします。
No.1ベストアンサー
- 回答日時:
どんな情報も強制的に変換するという方法であれば可能です。
・絶対に4桁より大きい桁数は入力されない。
・1桁でも入力があれば前ゼロを付加して強制的に変換する。
という方法です。
-------------------------------------------------------------------
Dim strTarget As String
Dim strRet As String
strTarget = "****"
strTarget = strTarget.PadLeft(4, "0"c)
strRet = strTarget.Substring(0, 2) + ":" + strTarget.Substring(2, 2)
-------------------------------------------------------------------
「9999」と入力された場合
strTarget = "****" の「****」に「9999」を代入します。
strRetには「99:99」と格納されます。
「9」と入力された場合
strTarget = "****" の「****」に「9」を代入します。
strRetには「00:09」と格納されます。
時間として判定したいと言うのであれば
-------------------------------------------------------------------
Dim strTarget As String
Dim strRet As String
strTarget = "****"
strTarget = strTarget.PadLeft(4, "0"c)
'前2桁が0以上24未満か判定
If (CType(strTarget.Substring(0, 2), Integer) < 0 AndAlso CType(strTarget.Substring(0, 2), Integer) > 24) Then
'成立しない為、処理を抜ける
Exit Sub
End If
'後2桁が0以上59未満か判定
If (CType(strTarget.Substring(2, 2), Integer) < 0 AndAlso CType(strTarget.Substring(2, 2), Integer) > 59) Then
'成立しない為、処理を抜ける
Exit Sub
End If
strRet = strTarget.Substring(0, 2) + ":" + strTarget.Substring(2, 2)
-------------------------------------------------------------------
もっと簡単にやりたい場合は・・・・
-------------------------------------------------------------------
Dim strTarget As String
Dim strRet As String
strTarget = "****"
strTarget = strTarget.PadLeft(4, "0"c)
strRet = strTarget.Substring(0, 2) + ":" + strTarget.Substring(2, 2)
'日付として成立するか判定
If (IsDate("2009/1/1 " + strRet) = False) Then
strRet = String.Empty
'成立しない為、処理を抜ける
Exit Sub
End If
-------------------------------------------------------------------
ありがとうございます。
目的どおり動作が行えるようになりました。
Format以外の関数など考えていましたが、
上記のように、文字列を分断して:を加えるなどの
やり方もあったんですね。
後で、調べてみてさらに理解を深めようと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
- Excel(エクセル) ExcelのIF関数について 4 2023/05/24 12:54
- Excel(エクセル) エクセルでSUMIFS関数で条件範囲の部分が#valueになる。 4 2023/04/28 12:42
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- デスクトップパソコン 40年間の悩み キーボードにおいて初期値として漢字ローマ字変換に設定する方法 8 2023/05/08 14:50
- Excel(エクセル) excel関数について 3 2022/06/06 21:58
- Visual Basic(VBA) VBAで自動集計(特定セルコピー月ごとに値貼り付け)したい。 6 2023/06/25 11:37
- その他(データベース) Accessフォームにて指定のフィールドの平均値を小数点第一位で表示できない 2 2022/08/30 17:19
- PostgreSQL 数値が定期的にあらわれる文字列から、いくつめに出現した数値が指定して切り出したい 1 2023/06/08 13:12
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB6.0の「vbFromUnicode」はVB....
-
16進をASCIIコードに変換する...
-
VB.NETで1→A、2→B、26→Z、27→AA...
-
バイト型のデータをLong型に変換
-
数字→漢数字変換
-
2の補数の計算について
-
C++ 文字列変数と16進数の比較
-
10進数を2進数
-
vb6の桁数指定
-
C#でListとDictionaryの判別方法
-
指定日付から90日後の日付を算...
-
16進コード文字列を文字列に変換
-
VC++ std::stringからLPCWSTRに...
-
【C++/CLI】int型からString型...
-
WORD VBA プログラム修正をお願...
-
VBA 変数名に変数を使用したい。
-
accessでフィールド追加のあと...
-
コンボボックスのインデックス...
-
Accessのフィールド名に半角括...
-
エクセルでXY座標に並べられた...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB6.0の「vbFromUnicode」はVB....
-
VB.NETで1→A、2→B、26→Z、27→AA...
-
16進をASCIIコードに変換する...
-
16進コード文字列を文字列に変換
-
WORD型をCString型に変換する方法
-
C++ 文字列変数と16進数の比較
-
C#でListとDictionaryの判別方法
-
【C++/CLI】int型からString型...
-
Pythonの指数表記について
-
バイト型のデータをLong型に変換
-
10進数を2進数
-
2進数から10進数へ変換
-
対数変換のついて
-
数字→漢数字変換
-
Excelの数字(文字列)合計につい...
-
Boolean型変数の値を反転する方法
-
VC++ std::stringからLPCWSTRに...
-
VB6 case文について
-
文字型を日付/時刻型に変換する...
-
textbox.textやlabel.captionの...
おすすめ情報