データ加算


sakana  2006-01-27 23:47:56  No: 129880

初めて投稿します。Excelで選択した値を加算するプログラムを作ろうとしています。
現在以下のようにプログラミングしています。現状は加算されず、最初に選択された
値がlabel1に表示されてしまいます。もし分かる方いましたらご教授ください。

Option Explicit

Private Sub OK_Click()
    
    Dim Answer As String
    Dim objExcelApp As Workbook
    Dim strExcelFile As String
    Dim strExcelSheet As String
    Dim n As Integer
    Dim sum As Single
            
    Answer = MsgBox("入力完了ですか?", vbYesNoCancel, "MsgBox")
    
    If Answer = vbYes Then
    教室表示.Caption = 教室.Text & vbCrLf & 教室表示.Caption
    曜日表示.Caption = 曜日.Text
    時限表示.Caption = 時限.Text
    On Error Resume Next
    
    '既存のExcelファイルの呼び出し
    strExcelFile = "C:\エアコン電力.xls"
    strExcelSheet = "一覧"
    
    Set objExcelApp = GetObject("C:\エアコン電力.xls")
    objExcelApp.Windows(1).Visible = True
    objExcelApp.Application.Visible = True
    
        If 教室.Text = "第1教室" Then
        sum = sum + objExcelApp.ActiveSheet.Cells(25, 9).Value
        
        ElseIf 教室.Text = "第2教室" Then
        sum = sum + objExcelApp.ActiveSheet.Cells(27, 9).Value
        
        ElseIf 教室.Text = "第3教室" Then
        sum = sum + objExcelApp.ActiveSheet.Cells(28, 9).Value
        
        ElseIf 教室.Text = "第4教室" Then
        sum = sum + objExcelApp.ActiveSheet.Cells(29, 9).Value
        
        ElseIf 教室.Text = "第5教室" Then
        sum = sum + objExcelApp.ActiveSheet.Cells(30, 9).Value
        
        End If
        
        objExcelApp.Save
        objExcelApp.Application.Quit
        Label1.Caption = sum
    
    ElseIf Answer = vbNo Then
            
        曜日表示.Caption = 曜日.Text
        時限表示.Caption = 時限.Text
        教室表示.Caption = 教室.Text & vbCrLf & 教室表示.Caption     
            
    Else
    Answer = vbCancel
    教室.Text = ""
    
    End If   
    
End Sub


Geo=TK3  2006-01-28 00:13:00  No: 129881

>初めて投稿します。Excelで選択した値を加算するプログラムを作ろうとしています。

初めてとおっしゃる割には

http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200601/06010082.txt

の続きに見えますが。

>現在以下のようにプログラミングしています。現状は加算されず、最初に選択された
>値がlabel1に表示されてしまいます。もし分かる方いましたらご教授ください。

加算されていないのではなく、最初に選択した値だけを sum に加算しているので
そう見えているのでしょう。
If 〜 ElseIf 〜 End If では最初に条件が成立した時の処理しか実行されませんし。
ElseIf を伴う If 文の機能をヘルプで調べてみて、どこの If 文をどう変えれば
いいのかちょっと考えてみてください。


ななし  2006-01-28 03:15:25  No: 129882

最初の1行目で、虚偽の情報が、あると
非常に不愉快ですね。


LESIA  2006-01-28 03:41:57  No: 129883

学校の課題とかで、上のリンクの質問者とは別人だったりして(^^;

もしかすると、OKボタンをクリックする度に加算されるようにしたいのでしょうか?
そうすると変数sumをプロシージャレベルではなくモジュールレベルで宣言する
必要があります。

Option Explicit

Private sum As Single

Private Sub OK_Click()
    Dim Answer As String
    Dim objExcelApp As Workbook
    Dim strExcelFile As String
    Dim strExcelSheet As String
    Dim n As Integer
            
    Answer = MsgBox("入力完了ですか?", vbYesNoCancel, "MsgBox")
    
    Select Case Answer
    Case vbYes
        教室表示.Caption = 教室.Text & vbCrLf & 教室表示.Caption
        曜日表示.Caption = 曜日.Text
        時限表示.Caption = 時限.Text
    
        On Error Resume Next
        
        '既存のExcelファイルの呼び出し
        strExcelFile = "C:\エアコン電力.xls"
        strExcelSheet = "一覧"
        
        Set objExcelApp = GetObject("C:\エアコン電力.xls")
        objExcelApp.Windows(1).Visible = True
        objExcelApp.Application.Visible = True
    
        Select Case 教室.Text
        Case "第1教室"
            sum = sum + objExcelApp.ActiveSheet.Cells(25, 9).Value
        Case "第2教室"
            sum = sum + objExcelApp.ActiveSheet.Cells(27, 9).Value
        Case "第3教室"
            sum = sum + objExcelApp.ActiveSheet.Cells(28, 9).Value
        Case "第4教室"
            sum = sum + objExcelApp.ActiveSheet.Cells(29, 9).Value
        Case "第5教室"
            sum = sum + objExcelApp.ActiveSheet.Cells(30, 9).Value
        End Select
        
        objExcelApp.Save
        objExcelApp.Application.Quit
        Label1.Caption = sum
    Case vbNo
        曜日表示.Caption = 曜日.Text
        時限表示.Caption = 時限.Text
        教室表示.Caption = 教室.Text & vbCrLf & 教室表示.Caption     
    Case vbCancel
        教室.Text = ""
    End Select   
End Sub


ななし  2006-01-29 06:45:44  No: 129884

なるほど、
ハンドルネームまで同じと言うことは、
両者が課題の出ているところを元に付けてると、言うことになるわけか


sakana  2006-01-31 18:04:29  No: 129885

前にも同じようなのが投稿されてました。すみません。これは学校でのVBの勉強課題です。
>もしかすると、OKボタンをクリックする度に加算されるようにしたいのでしょうか?

  現在はコンボボックスから選択した内容を教室表示というlabelに取り込ませています。Msgbox=Noにしたらまた選択可能で、Yesなら選択された部分の値だけを取り込み、加算したあとに表示させたいです。


ぶぶ  2006-01-31 18:31:37  No: 129886

現在はコンボボックスに変更されているということですが、
どこがわからないのですか?
環境は何ですか?
やりたいことだけ書かれていても答えようが・・・


sakana  2006-02-01 17:47:40  No: 129887

>どこがわからないのですか?
現状は最初に教室選択した値しか取り込んでいません。for文で回そうかなと思いましたが、うまくいきません。加算が出きないので悩んでいます。

>環境は何ですか?
環境はVB6です。


葉月α  2006-02-01 18:26:14  No: 129888

無能な私だとまだ質問の意図が正確に受け取れないのですが

まず貴方が何をSumしたいのかが受け取れません
エクセルにはどのようにデータが入っているのでしょうか?
少なくとも
              9列目(I列)
25行目  第1教室のデータ
26行目
27行目  第2教室のデータ
28行目  第3教室のデータ
29行目  第4教室のデータ
30行目  第5教室のデータ

ということだけはわかりました

この5つのデータの中のデータを合算したいということですか?
動作としては
第1教室を選択>OKボタンを押す>メッセージでNoを選択する
再度教室を選択する(今度は第3教室)>OKボタンを押す>メッセージでOKを押す
第1教室のデータ+第3教室のデータを画面に表示する
以上の動作でよろしいのでしょうか?

曜日だなんだという言葉も出てきているが
その辺も一切情報が開示されてない以上回答側は無視して良いんですね?

後から、「前に○○質問しましたが今度は曜日も〜〜〜」なんてのはちょっとどうかと思うし・・・


sakana  2006-02-01 19:03:45  No: 129889

>第1教室を選択>OKボタンを押す>メッセージでNoを選択する
再度教室を選択する(今度は第3教室)>OKボタンを押す>メッセージでOKを押す
第1教室のデータ+第3教室のデータを画面に表示する

葉月αさんの動作にしたいです。言葉足らずで申し訳ありません。曜日などは無視してかまいません。


葉月α  2006-02-02 02:37:40  No: 129890

本来ならば5つしか項目がないのがわかっていて
ユーザに選択させるのですから
チェックボックスコントロールを配列にして用いて判定するのが
筋のような気もしますが

OKorNOが押された時は教室.TEXTにどんどん連結されていきますね
例えば・・・
教室1を選択してメッセージでNOをクリックする
続けて教室1を選択してメッセージでNOをクリックする
さらに続けて教室1を選択してメッセージでOKをクリックした時はどうするのか

以下は一番最初に提示されたコードを元に見ていきます

>If 教室.Text = "第1教室" Then
これじゃぁ加算は出来ません
恐らく「教室.Text」はコンボボックスの値だと思いますが
当然選択している値でしか判定しないので合算はしてくれないでしょう
ここでユーザが何を選択したのかを知っているのは「教室表示.Caption」だけです

今回の仕様でForで回すとするならば
まず「教室表示.Caption」に格納されている文字列を判定する為に
改行コード区切で「教室表示.Caption」の値を配列に格納する必要が出てきます
区切る手段はSplitを
配列数取得手段はUBoundの使い方を自分で調べてください
そうすれば  For 1 to 配列数  Step 1
を書いてあげればループできるでしょう
ループの書く位置程度は考えてください・・・でないと課題になりません

これで合算できるんじゃないでしょうか?

選択してボタンを押していく度に動的配列(Redim と Preserveを調べてください)にポコポコ
放り込んで行ってループさせる方が素直かと思います
もしくは教室分のBOOL型を用意して判定させるか・・・


葉月α  2006-02-02 02:38:28  No: 129891

>OKorNOが押された時は教室.TEXTにどんどん連結されていきますね
OKorNOが押された時は教室.Captionにどんどん連結されていきますね


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加