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

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

新規登録して質問してみよう
ただいま回答率
85.35%
SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

2回答

2391閲覧

[VB.NET]DataGridViewで時間計算の方法と時間形式(hhmm→hh:mm)への変換方法がわかりません。。

退会済みユーザー

退会済みユーザー

総合スコア0

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2020/07/08 07:34

編集2020/07/08 08:24

前提・実現したいこと

VB.NETのDataGridViewで時間入力し、計算結果をSQL Serverに登録する機能を作成しています。

現状、登録は出来るのですが、時間計算を行うためのソースがいまいちわかりません。
またhhmmと入力しているとセルからマウスが離れるとhh:mmに変換する方法も合わせて教えていただきたいです。

例:
列1 列2
09:00  17:45 → 列1と列2から減算を行いたい。

このような初歩的な質問で申し訳ございません。

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

「型'String'"09:00" から型 'Decimal' への変換は無効です。'」

該当のソースコード

VB

1 For Each c As DataGridViewCell In DataGridView1.SelectedCells 2 A = DataGridView1(6, c.RowIndex).Value 3 B = DataGridView1(8, c.RowIndex).Value 4 Kekka = CStr(CDec(DataGridView1(6, c.RowIndex).Value) - CDec(DataGridView1(8, c.RowIndex).Value)) 5 'If DataGridView1.SelectedCells(c.ColumnIndex).Value = Nothing Then 6 ' DataGridView1.SelectedCells(c.ColumnIndex).Value = "" 7 'End If 8 Next

試したこと

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

Visual Studio2017,SQL Server

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

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

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

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

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

guest

回答2

0

ベストアンサー

やり方はいろいろあるでしょうけどサンプルです。

VB

1' hhmm → hh:mm 2Public Function EditTime(ByVal value As String) As String 3 Dim hh As String = Nothing 4 Dim mm As String = Nothing 5 DivideTime(value, hh, mm) 6 Return hh & ":" & mm 7End Function 8 9' hh:mm → hhmm 10Public Function RestoreTime(ByVal value As String) As String 11 Dim hh As String = Nothing 12 Dim mm As String = Nothing 13 DivideTime(value, hh, mm) 14 Return hh & mm 15End Function 16 17' 入力文字列を TimeSpan に 18Public Function ToTimeSpan(ByVal value As String) As TimeSpan 19 Dim hh As String = Nothing 20 Dim mm As String = Nothing 21 DivideTime(value, hh, mm) 22 Return New TimeSpan(CInt(hh), CInt(mm), 0) 23End Function 24 25' 左側にゼロを埋めて指定した桁数にする 26Private Function LPadZero(ByVal value As String, ByVal point As Integer) As String 27 Dim padStr As String = New String("0"c, point) 28 value = padStr & value 29 Return value.Substring(value.Length - point) 30End Function 31 32' 入力文字列を hh, mm に分ける 33Private Sub DivideTime(ByVal value As String, ByRef hh As String, ByRef mm As String) 34 '「:」があるか検査 35 Dim index As Integer = value.IndexOf(":"c) 36 If index = -1 Then 37 ' 「:」が無いとき左側をゼロ埋めして4文字にする 38 value = LPadZero(value, 4) 39 ' 2文字に分ける 40 hh = value.Substring(0, 2) 41 mm = value.Substring(2, 2) 42 Else 43 '「:」がある場合は左右に分ける 44 hh = value.Substring(0, index) 45 mm = value.Substring(index + 1) 46 ' 左側をゼロ埋めして2文字にする 47 hh = LPadZero(hh, 2) 48 mm = LPadZero(mm, 2) 49 End If 50End Sub

使い方

VB

1Dim A As String = "09:00" 2Dim B As String = "17:45" 3 4Dim T As TimeSpan = ToTimeSpan(B) - ToTimeSpan(A) 5Dim TM As Double = T.TotalMinutes 6Dim h As Double = TM \ 60 7Dim m As Double = TM Mod 60 8Dim hhmm As String = h.ToString() & ":" & m.ToString() 9Dim result As String = EditTime(hhmm) ’ 08:45 になる

投稿2020/07/08 09:00

KOZ6.0

総合スコア2707

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

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

退会済みユーザー

退会済みユーザー

2020/07/08 23:32

返信が遅くなり申し訳ありません! ありがとうございます。 様々なやり方があることがわかり、大変勉強になりました! いろいろなパターンを試してみたいと思います。
guest

0

cellの表記は "09:00" でよろしいでしょうか?

これをDecimal型に変換したときに ":" があるせいで失敗しています。
なので ":" を取り除く必要があります。

VB

1A = A.Replace(":", "")

ただ、Decimal型に変換すると "0900" が "900" になってしまい
cellに戻す際は "0900" に戻して ":" を追加する必要があります。

VB

1'A, BはDecimal 2 3kekka = (A + B).ToString("00:00")

代替案なのですが、Decimal型ではなくDateTime型に変換して計算してはいかがでしょうか。

投稿2020/07/08 08:14

編集2020/07/08 08:26
FM88mhmh

総合スコア22

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

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

退会済みユーザー

退会済みユーザー

2020/07/08 23:34

返信が遅くなり、申し訳ございません。 型に関しての知識があまりなく、DateTime型に変換するという方法すら知りませんでした! 大変勉強になりました。 ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問