'変数の宣言
Private atai1 As Double         '被演算数
Private atai2 As Double         '演算数
Private atai3 As Double         'メモリ保持用変数
 
Private enzanshi As Integer     '演算子 0:たす 1:ひく 2:かける 3:わる
Private kotae As Double         '答え
Private eflag As Integer        '演算子が押されたことを示すフラグ 1:ON 0:OFF
Private rflag As Integer        '次回表示リセットフラグ 1:ON 0:OFF
Private mflag1 As Integer       'マイナス符号フラグ -1:マイナス 1:プラス
Private mflag2 As Integer       'マイナス入力済みフラグ -1:マイナス 1:プラス4
Private renflag As Integer      '連続演算フラグ 1:ON 0:OFF
 
Private sflag As Integer        '小数点入力済みフラグ 1:ON 0:OFF
Private kflag As Integer        '答え出力済みフラグ 1:ON 0:OFF
 
Private data1 As Double         '被演算数を保持するバッファ。
Private data2 As Double         '演算数を保持するバッファ。
Private data3 As Double         '被演算数の小数点以下を保持するバッファ。
Private data4 As Double         '演算数の小数点以下を保持するバッファ
 
Private tendata1 As Integer     '被演算数の小数点がどの位置かを入れておく変数。
Private tendata2 As Integer     '演算数の小数点がどの位置かを入れておく変数。
 
Private uflag As Integer        'キーボード入力済みフラグ 1:ON 0:OFF
 
Private Sub cmdAC_Click()
'オールクリア(AC)ボタン押下時
    '入力済みの数値データクリア
    '加減乗除の業務クリア
    '入力中の数値データクリア
    atai1 = 0
    atai2 = 0
    enzanshi = 4
    kotae = 0
    data1 = 0
    data2 = 0
    data3 = 0
    data4 = 0
    tendata1 = 1
    tendata2 = 1
    'フラグを初期値オフに設定
    eflag = 0
    rflag = 0
    mflag1 = 1  '1:オフ
    mflag2 = 1  '1:オフ
    sflag = 0
    renflag = 0
    '表示クリア
    txtinput.Text = ""
End Sub
 
Private Sub cmdclear_Click()
'クリア(C)ボタン押下時
    '入力中の数値データをクリア
    '0を表示
 
    'マイナス符号に関するフラグをオフにする
    mflag1 = 1  '1:オフ
    mflag2 = 1  '1:オフ
    '表示クリア
    txtinput.Text = ""
    'データクリア
    '演算子入力前の場合
    If eflag = 0 Then
        atai1 = 0
        data1 = 0
        data3 = 0
        tendata1 = 0
        sflag = 0
    '演算子入力後の場合
    ElseIf eflag = 1 Then
        atai2 = 0
        data2 = 0
        data4 = 0
        tendata2 = 1
        sflag = 0
    '答え出力後の場合
    ElseIf kflag = 1 Then
        atai1 = 0
        atai2 = 0
        enzanshi = 4
        kotae = 0
        data1 = 0
        data2 = 0
        data3 = 0
        data4 = 0
        tendata1 = 1
        tendata2 = 1
        'フラグを初期値オフに設定
        eflag = 0
        rflag = 0
        sflag = 0
    End If
 
 
End Sub
 
Private Sub cmdkotae_Click()
'=キー。計算結果表示
 
    Keisan
    '入力済みの数値データクリア
    '加減乗除の業務クリア
    '入力中の数値データクリア
    atai1 = 0
    atai2 = 0
    enzanshi = 4
    kotae = 0
    data1 = 0
    data2 = 0
    data3 = 0
    data4 = 0
    tendata1 = 1
    tendata2 = 1
    'フラグを初期値オフに設定
    eflag = 0
    rflag = 0
    mflag1 = 1  '1:オフ
    mflag2 = 1  '1:オフ
    sflag = 0
    renflag = 0
 
End Sub
 
Private Sub cmdM_Click()
'作成部分
'メモリボタン押下時。
    'Mマークを表示
    txtMemory.Text = "M"
 
    'メモリに記憶。
        atai3 = txtinput.Text
 
    'データクリア
    '入力済みの数値データクリア
    '加減乗除の業務クリア
    '入力中の数値データクリア
    atai1 = 0
    atai2 = 0
    enzanshi = 4
    kotae = 0
    data1 = 0
    data2 = 0
    data3 = 0
    data4 = 0
    tendata1 = 1
    tendata2 = 1
    'フラグを初期値オフに設定
    eflag = 0
    rflag = 0
    mflag1 = 1  '1:オフ
    mflag2 = 1  '1:オフ
    sflag = 0
    renflag = 0
 
End Sub
 
Private Sub cmdMC_Click()
'作成部分
'メモリクリアボタン押下時
    'Mマークを消去
    txtMemory.Text = ""
    'メモリに記憶されている数値を消去
    atai3 = 0
End Sub
 
Private Sub cmdMhiku_Click()
'作成部分
'メモリマイナスボタン押下時
    '電卓に表示されている数値をメモリから減算する
        atai3 = atai3 - txtinput.Text
    txtMemory.Text = atai3
End Sub
 
Private Sub cmdMR_Click()
'作成部分
'メモリリードボタン押下時
    'メモリに記憶されている数値を表示
    '演算子入力前の場合
    If eflag = 0 Then
        atai1 = atai3
        txtinput.Text = atai1
 
    '演算子入力後の場合
    ElseIf eflag = 1 Then
        atai2 = atai3
        txtinput.Text = atai2
    '答え出力後の場合
    ElseIf kflag = 1 Then
        kotae = atai3
        txtinput.Text = kotae
        'バッファのクリア
        data1 = 0
        data2 = 0
        data3 = 0
        data4 = 0
        tendata1 = 1
        tendata2 = 1
    End If
 
End Sub
 
Private Sub cmdMtasu_Click()
'作成部分
'メモリプラスボタン押下時
    '電卓に表示されている数値をメモリに加算する
        atai3 = atai3 + txtinput.Text
    txtMemory.Text = atai3
End Sub
 
Private Sub cmdtasu_Click()
 
'+ボタン押下時
    '加算
    '連続演算時
        If eflag = 1 And txtinput.Text <> "-" Then
        Keisan
        atai1 = kotae
        rflag = 1 '次回表示リセットフラグオン
        enzanshi = 0
        '演算数バッファをクリア
        atai2 = 0
        data2 = 0
        data4 = 0
        tendata2 = 1
    Else
    '通常時
        mflag1 = 1  '1:オフ
        mflag2 = 1  '1:オフ
        enzanshi = 0
        eflag = 1
        rflag = 1
        sflag = 0   '0:オフ
    End If
 
End Sub
 
Private Sub cmdhiku_Click()
 
'−ボタン押下時
 
'マイナス入力のとき
    '符号をマイナスにする
 
    If txtinput.Text = "" Then
        'マイナス符号フラグをオン:−1
        mflag1 = -1
        txtinput.Text = "-"
        rflag = 0   '次回表示リセットフラグをオフ
    ElseIf rflag = 1 Then
        '次回表示リセットフラグがオンのとき
        'マイナス符号フラグをオン:−1
        mflag1 = -1
        txtinput.Text = "-"
        rflag = 0   '次回表示リセットフラグをオフ
    Else
 
 
'数値計算のとき
    '減算
        '連続演算時
        If eflag = 1 And txtinput.Text <> "-" Then
            Keisan
            atai1 = kotae
            rflag = 1 '次回表示リセットフラグオン
            enzanshi = 1
 
            '演算数バッファをクリア
            atai2 = 0
            data2 = 0
            data4 = 0
            tendata2 = 1
        Else
        '通常時
            enzanshi = 1
            eflag = 1
            rflag = 1
            sflag = 0   '0:オフ
        End If
 
    End If
End Sub
 
Private Sub cmdkakeru_Click()
 
'×ボタン押下時
    '乗算
    '連続演算時
        If eflag = 1 And txtinput.Text <> "-" Then
        Keisan
        atai1 = kotae
        rflag = 1 '次回表示リセットフラグオン
        enzanshi = 2
 
        '演算数バッファをクリア
        atai2 = 0
        data2 = 0
        data4 = 0
        tendata2 = 1
    Else
    '通常時
        mflag1 = 1  '1:オフ
        mflag2 = 1  '1:オフ
        enzanshi = 2
        eflag = 1
        rflag = 1
        sflag = 0   '0:オフ
    End If
End Sub
 
Private Sub cmdwaru_Click()
 
'÷ボタン押下時
    '除算
        '連続演算時
        If eflag = 1 And txtinput.Text <> "-" Then
        Keisan
        atai1 = kotae
        rflag = 1 '次回表示リセットフラグオン
        enzanshi = 3
 
        '演算数バッファをクリア
        atai2 = 0
        data2 = 0
        data4 = 0
        tendata2 = 1
 
    Else
    '通常時
        mflag1 = 1  '1:オフ
        mflag2 = 1  '1:オフ
        enzanshi = 3
        eflag = 1
        rflag = 1
        sflag = 0   '0:オフ
    End If
End Sub
 
Private Sub Form_Load()
'初期化
    'フォームロード時
    atai1 = 0
    atai2 = 0
    enzanshi = 4
    kotae = 0
    data1 = 0
    data2 = 0
    data3 = 0
    data4 = 0
    tendata1 = 1
    tendata2 = 1
    'フラグを初期値オフに設定
    eflag = 0
    rflag = 0
    mflag1 = 1
    mflag2 = 1
    sflag = 0
'キーボード入力済みフラグをオフ
    uflag = 0
End Sub
 
Private Sub Flagsyori(Number As Integer)
 
    'フラグ処理。前回入力が"-"だったら(mflag1= -1だったら)、"-数"にする。
    'mflag2を-1にする。
    If mflag1 = -1 And txtinput.Text = "-" Then
        mflag2 = -1
    End If
 
End Sub
 
Private Sub Hyouji(Number As Integer)
'キー入力時
 
    '数値を表示
 
    'リセット時
    If rflag = 1 Then
        txtinput.Text = ""
        rflag = 0
        mflag2 = 1
    End If
'「−」表示のときは、tendata1,2を十倍しない。
 
'小数点対応
 
    If sflag = 1 Then
        '小数点入力済みフラグがオンのとき
        '小数点より右部分を保持するバッファに入力
        If eflag = 0 Then
            '演算子入力前:data3
            data3 = data3 * 10 + mflag2 * Number
            '小数点以下何桁目までかを保持するバッファに入力
            '演算子入力前:tendata1
            If txtinput.Text <> "-" Then
                tendata1 = tendata1 * 10
            End If
            'データを表示する
            atai1 = data1 + (data3 / tendata1)
            txtinput.Text = atai1
        ElseIf eflag = 1 Then
            '演算子入力後:data4
            data4 = data4 * 10 + mflag2 * Number
            '小数点以下何桁目までかを保持するバッファに入
            '演算子入力後:terndata2
            If txtinput.Text <> "-" Then
                tendata2 = tendata2 * 10
            End If
            'データを表示する
            atai2 = data2 + (data4 / tendata2)
            txtinput.Text = atai2
        End If
    ElseIf sflag = 0 Then
        '小数点入力済みフラグがオフのとき
        If eflag = 0 Then
            '演算子入力前:data1
            data1 = data1 * 10 + mflag2 * Number
            'データを表示する
            atai1 = data1
            txtinput.Text = atai1
        ElseIf eflag = 1 Then
            '演算子入力後:data2
            data2 = data2 * 10 + mflag2 * Number
            'データを表示数する
            atai2 = data2
            txtinput.Text = atai2
        End If
    End If
 
End Sub
 
Private Sub lbl0_Click()
'0キー入力時
 
    '10倍した数値を表示
    Hyouji (0)
 
End Sub
 
Private Sub lbl00_Click()
 
'00キー入力時
    '100倍した数値を表示
'キー入力時
 
    '数値を表示
 
    'リセット時
    If rflag = 1 Then
        txtinput.Text = ""
        rflag = 0
        mflag2 = 1
    End If
 
    '小数点入力後は、何もしないでプロージャから抜ける
    If sflag = 1 Then
        Exit Sub
    End If
 
    If eflag = 0 Then
        '演算子入力前:data1
        data1 = data1 * 100
        'データを表示する
        atai1 = data1
        txtinput.Text = atai1
    ElseIf eflag = 1 Then
        '演算子入力後:data2
        data2 = data2 * 10 + mflag2 * 0
        'データを表示する
        atai2 = data2
        txtinput.Text = atai2
    End If
 
End Sub
 
Private Sub lbl1_Click()
 
'1キー入力時
    '表示されている数値を10倍し、
    '1桁目に"1"を出力
    'マイナスフラグ処理関数
    Flagsyori (1)
    '表示関数
    Hyouji (1)
 
End Sub
 
Private Sub lbl2_Click()
 
'2キー入力時
    '表示されている数値を10倍し、
    '1桁目に"2"を出力
    'マイナスフラグ処理関数
    Flagsyori (2)
    '表示関数
    Hyouji (2)
 
End Sub
 
Private Sub lbl3_Click()
 
'3キー入力時
    '表示されている数値を10倍し、
    '1桁目に"3"を出力
    'マイナスフラグ処理関数
    Flagsyori (3)
    '表示関数
    Hyouji (3)
 
End Sub
 
Private Sub lbl4_Click()
 
'4キー入力時
    '表示されている数値を10倍し、
    '1桁目に"4"を出力
    'マイナスフラグ処理関数
    Flagsyori (4)
    '表示関数
    Hyouji (4)
 
    End Sub
 
Private Sub lbl5_Click()
 
'5キー入力時
    '表示されている数値を10倍し、
    '1桁目に"5"を出力
    'マイナスフラグ処理関数
    Flagsyori (5)
    '表示関数
    Hyouji (5)
 
End Sub
 
Private Sub lbl6_Click()
 
'6キー入力時
    '表示されている数値を10倍し、
    '1桁目に"6"を出力
    'マイナスフラグ処理関数
    Flagsyori (6)
    '表示関数
    Hyouji (6)
 
End Sub
 
Private Sub lbl7_Click()
 
'7キー入力時
    '表示されている数値を10倍し、
    '1桁目に"7"を出力
    'マイナスフラグ処理関数
    Flagsyori (7)
    '表示関数
    Hyouji (7)
 
End Sub
 
Private Sub lbl8_Click()
 
'8キー入力時
    '表示されている数値を10倍し、
    '1桁目に"8"を出力
    'マイナスフラグ処理関数
    Flagsyori (8)
    '表示関数
    Hyouji (8)
 
End Sub
 
Private Sub lbl9_Click()
'9キー入力時
    '表示されている数値を10倍し、
    '1桁目に"9"を出力
    'マイナスフラグ処理関数
    Flagsyori (9)
    '表示関数
    Hyouji (9)
 
End Sub
 
Sub Keisan()
 
'計算関数
    '加減乗除の計算をします。
 
    'eflagが0の場合、atai1を表示します。
    If eflag = 0 Then
        kotae = atai1
    ElseIf eflag = 1 Then
    'eflagが1の場合、計算結果を表示します。
        Select Case enzanshi
            Case 0
                kotae = atai1 + atai2
            Case 1
                kotae = atai1 - atai2
            Case 2
                kotae = atai1 * atai2
            Case 3
                kotae = atai1 / atai2
        End Select
    End If
    txtinput.Text = kotae
 
End Sub
 
Private Sub lbldot_Click()
 
'小数点(.)ボタン押下時
    '表示されている数値を一桁左にずらし、
    '小数点を1桁目に表示
 
    '小数点入力済みフラグがオンの場合、プロージャから外に出る。
    If sflag = 1 Then
        Exit Sub
    End If
 
    txtinput.Text = txtinput.Text + "."
    '小数点入力済みフラグをオンにする
    sflag = 1
 
End Sub
 
Private Sub object_KeyDown(KeyCode As Integer, Shift As Integer)
 
    Dim kekka
 
    If uflag = 0 Then
        txtinput.Text = ""
    End If
    Select Case KeyCode
        Case vbKey1
            kekka = lbl1_Click()
        Case vbKey2
            kekka = lbl2_Click()
        Case vbKey3
            kekka = lbl3_Click()
        Case vbKey4
            kekka = lbl4_Click()
        Case vbKey5
            uflag = 1
            kekka = lbl5_Click()
        Case vbKey6
            kekka = lbl6_Click()
        Case vbKey7
            kekka = lbl7_Click()
        Case vbKey8
            kekka = lbl8_Click()
        Case vbKey9
            kekka = lbl9_Click()
        Case vbKey0
            kekka = lbl0_Click()
    End Select
    uflag = 1
End Sub