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

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

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

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

VB.NET

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

Q&A

解決済

2回答

1374閲覧

入力したデータにより条件を変更したい

Umeda2019

総合スコア14

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

VB.NET

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

0グッド

0クリップ

投稿2020/07/10 06:36

編集2020/07/10 08:42

下記の通り、入力したデータ(今回は日付)を条件式に反映したいです。
Visual Studio 2019。

Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load '処理する日付をセット Dim 伝票日付 = DateTime.Now Me.伝票日付.Text = Date.Now Me.KeyPreview = True AddHandler Me.伝票日付.Enter, AddressOf TextBoxes_Enter End Sub

処理を起動した際に「伝票日付」に今日の日付が入ります。
次に、

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim 伝票日付 As Date 伝票日付 = Date.Parse(伝票日付) Dim 基準日1 As New DateTime(2019, 9, 30) If A.Checked = True Then If 伝票日付 <= 基準日1 Then 表示項目.Text = "S4" End If If 伝票日付 > 基準日1 Then 表示項目.Text = "S5" End If End If If B.Checked = True Then If 伝票日付 <= 基準日1 Then 表示項目.Text = "Q4" ElseIf 伝票日付 > 基準日1 Then 表示項目.Text = "Q5" End If End If End Sub

「GroupBox」はAとBの二つで構成しています。
「基準日1」は2019年9月30日で固定です。
「A」をチェックしてボタンをクリックすると、「表示項目」には「S5」が表示されます。「B」の場合は「Q5」です。
ところが「伝票日付」に別の日付(例えば2000年10月1日)を入力しても、「S4」や「Q4」とは表示されません。
どのようにすればよろしいでしょうか。

YAmaGNZさん、再度の回答ありがとうございます。
で、変数名を「伝票日付」から「a伝票日付」に変更したところエラーメッセージが出ました。

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim abc As Date abc = Date.Parse(abc) Dim 基準日1 As New DateTime(2019, 9, 30) If 営業部門.Checked = True Then If abc <= 基準日1 Then 表示項目.Text = "S4" End If If abc > 基準日1 Then 表示項目.Text = "S5" End If End If If 管理部門.Checked = True Then If abc <= 基準日1 Then 表示項目.Text = "Q4" ElseIf abc > 基準日1 Then 表示項目.Text = "Q5" End If End If End Sub

すみません、以下の部分はいったん削除します。
ここから、
エラーメッセージは、「BC30311」で、「型’MaskedTextBox’の値を’String'に変換できません。」というものでした。
「伝票日付」はTextBoxではなく、MaskedTextBoxでした。「Date.Parse(伝票日付)」ではDate型に変換できないということでしょうか。
ここまで。

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

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

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

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

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

mdj

2020/07/10 06:43

型が違うからでは?
YAmaGNZ

2020/07/10 06:55

変数名とコントロール名は別にしましょう。 また、デバッガで伝票日付に何が入っているのか確認しましたか?
Umeda2019

2020/07/10 07:21

回答ありがとうございます。 デバッガで「伝票日付」を確認しましたが、起動したときの日付となっていました(つまり、別の日付を入力してもそれが反映されていませんでした)。 変数名とコントロール名は別の方がよいのですね。気をつけます。
YAmaGNZ

2020/07/10 07:31

例えば今回の場合の 伝票日付 = Date.Parse(伝票日付) この行の代入される側の「伝票日付」は前の行で定義したDate型の変数ですよね? ではParseに書いてある「伝票日付」はTextBoxだと思いますが、実際は何になりますか? 作っている本人はまだ分かるかもしれませんが、他人が見たりしたとき「伝票日付」は何なのかひと目でわかりませんよね。 また、本人ですら「伝票日付」がどちらを指すのか分からなかったり、Date型の変数のつもりだったのに実際に動作させて見るとTextBoxのほうを参照していたりといったバグを作りこむ原因となります。
Umeda2019

2020/07/10 08:01

回答ありがとうございます。 質問の方に追記しています。
YAmaGNZ

2020/07/10 08:02

MaskedTextBoxの伝票日付に対して本日を代入している時はどうしていますか? では、MaskedTextBoxにあるテキストを取り出すときは?
Umeda2019

2020/07/10 08:45

手を煩わせています。 質問のコード(上段のものです)に記載漏れがありましたので、2行追加しました。 合わせて追記したコード(最下段のものです)の変数名を「abc」としました。 記載漏れの部分に問題があるかもしれません。
guest

回答2

0

以下の通りコードを修正しました。

Dim abc As Date abc = Date.Parse(s:=伝票日付.Text)

これで狙い通りの動きとなりました。

投稿2020/07/13 01:34

Umeda2019

総合スコア14

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

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

YAmaGNZ

2020/07/13 01:43

わざわざ名前付き引数での呼び出しではなく abc = Date.Parse(伝票日付.Text) でいいと思います。(コーディング規約等で定められているのであれば別ですが)
Umeda2019

2020/07/13 01:58

ありがとうございます。 そうですね。最初はそのように記載したのですが、visual studioでガイドが出ましたのでそのまま変更してしまいました。 問題なく動きますので、ご指摘の通りに再度書き換えました。
guest

0

ベストアンサー

Date.Parseの使い方を理解されていないようです。
Date.Parseは引数に指定した文字列をDate型に変換するためのものです。

VBNET

1Dim abc As Date 2abc = Date.Parse(abc)

Date.Parseは引数に初期化していないDate型変数(値はDate.MinValue)を引数とすると当日の0:0:0を返します。
この為、比較は必ず当日で行われることになります。

Date.Parseの引数には伝票日付のテキストを渡してやる必要があります。

投稿2020/07/10 09:02

YAmaGNZ

総合スコア10489

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

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

Umeda2019

2020/07/13 01:32

回答ありがとうございます。 ご指摘の通りでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問