• 締切済み

VBE Excelのマクロがわかりません(IF関数)

エクセルのマクロがわかりません。教えてください 問題は5人の簿記の点数を入力し5人の合計点・最高点・最低点を表示するプログラムを作成する。というものです。 Sub test() Dim boki as integer Dim sum as integer Dim max as integer Dim min as integer For A = 1 to 5 boki = InputBoxx("簿記の点数入力") goukei = goukei + boki ?????? Next A Msgbox"5人の合計点は"&A Msgbox"5人の最高点は"&A Msgbox"5人の最低点は"&A End Sub IF関数を使って??の部分を作るようなのですが、いまいちよく分からないので教えてください。 bokiは簿記 sumは合計 maxは最高 minは最低のことを現してます。

みんなの回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

>エクセルのマクロがわかりません ご質問の趣旨とは違うかもしれませんが、If で選別させるよりも、EXCELでしたら、ワークシート関数を使ったほうが、簡単ではありませんか? Sub test1() Dim boki(1 To 5) As Integer Dim A As Integer For A = 1 To 5  boki(A) = InputBox("簿記の点数入力") Next A MsgBox "5人の合計点は" & WorksheetFunction.Sum(boki) MsgBox "5人の最高点は" & WorksheetFunction.Max(boki) MsgBox "5人の最低点は" & WorksheetFunction.Min(boki) End Sub

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

最高、最低という意味とは逆に MAX=0 MIN=100と最初(初期設定)において、これら変数に入れます。 1人分入力あったときに If Boki>Max Then MaX=Boki とMaxを今入れた点数とします 同じく If Boki<Min Then Min=Boki  と置き換えます これを5人分繰り返したして、5人終わったときはMin,Maxが具体的に 正しい値を保持してます。 まあアルゴリズムというほどでもない、定石方法でしょう。

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.2

>IF関数を使って??の部分を作るようなのですが、いまいちよく分からないので教えてください。 何のために変数(max,min)を設定したのですか? 宿題みたいなので、プログラムの考え方一例です。[ ] 欄は自分で埋めてください。 if [ ] = 1 then '初期値の設定 [ ] = boki [ ] = boki else '変数の比較と代入 if [ ] then [ ] = boki [ ] endif あと、 >Msgbox"5人の合計点は" & A では、"5人の合計点は6" と表示されてしまいすよ。 きちんと動作したら、InputBoxx で「数値」以外が入った場合のことも考えて、プログラムを直して見るのも良いでしょう。

  • dokinhime
  • ベストアンサー率30% (4/13)
回答No.1

初期値としてMAX=0 MIN=100をいれといたあとに、?の部分で、IF MAX<BOKI THEN MAX=BOKI というふうにしていけばよいのでは?

関連するQ&A

  • 階乗のマクロ

    階乗のマクロを作りたいのですが、全然できません。どこを変えたらいいのか教えて下さい。ちなみに今こうなっています。 ------------------------------------------------ Sub exam5() Dim intA As Integer Dim intB As Integer Dim intC As Integer intA = Application.InputBox("数値を入力してください。") intB = (intA - 1) intC = (intA) * (intB) MsgBox (intC) End Sub Function kaijou(intA As Integer, intB As Integer) As Integer kaijou = intA * intB End Function ------------------------------------------------ どうかお願いします。

  • エクセルマクロで定義した関数が動きません

    以前にマクロの記述について教えて頂いた件の続きになります. ご指導頂いたとおりExcelマクロで複素数を扱う関数を下記HPから 標準モジュールにコピペしました.今度は正しくコピーできたと思いますが, 実行するとエラーになります. 標準の組込み関数を用いて「実数」の行列を計算すれば正しく 計算できますが,当然ながら「複素数」は計算できません. この「複素数」を扱う新しく定義した関数が動かない理由, 「End if に対するifブロックがありません」とか 計算結果が「#VALUE!」となってしまうのは何故でしょうか? マクロの記述内容はほとんど理解できないのですが, どなたか助けて頂けませんか! ちなみにエクセルは2016版です. http://www.geocities.jp/tomtomf/denki/AC2/ac2.htm http://www.geocities.jp/tomtomf/denki/AC1/ac1.htm 以下はコピー定義した「 IMMULT」関数と「 IMINVERS」関数のマクロです. Public Function IMMULT(a As Range, b As Range) As Variant Dim r1 As Integer, r2 As Integer, c1 As Integer, c2 As Integer, nn As Integer Dim r As Integer, c As Integer Dim cr As Integer, cc As Integer Dim n As Integer Dim mm() As Variant r1 = a.Rows.Count r2 = b.Rows.Count c1 = a.Columns.Count c2 = b.Columns.Count If (c1 = r2) Then nn = c1 Else Exit Function End If cr = r1 cc = c2 ReDim mm(1 To cr, 1 To cc) For r = 1 To cr For c = 1 To cc mm(r, c) = 0 For n = 1 To nn mm(r, c) = IMSUMa(mm(r, c), IMPRODUCTa(a.Cells(r, n), b.Cells(n, c))) Next Next Next IMMULT = mm End Function Public Function IMINVERS(a As Range) As Variant Dim n As Integer, n1 As Integer, n2 As Integer Dim r1 As Integer, r2 As Integer, c As Integer Dim max As Variant Dim i As Integer Dim m() As Variant Dim inm() As Variant Dim rr As Integer, cc As Integer Dim no As Integer, ex As Variant n1 = a.Rows.Count n2 = a.Columns.Count n = n1 ReDim inm(1 To n1, 1 To n2) For rr = 1 To n1 For cc = 1 To n2 If rr <> cc Then inm(rr, cc) = 0 Else inm(rr, cc) = 1 'End If Next Next ReDim m(1 To n1, 1 To n2) m = a If n1 <> n2 Then IMINVERS = False Exit Function End If For r1 = 1 To n max = m(r1, r1) no = r1 If r1 < n Then For i = r1 + 1 To n If IMABSa(m(i, r1)) > IMABSa(max) Then max = m(i, r1) no = i End If Next If (r1 <> no) Then For i = 1 To n ex = m(r1, i) m(r1, i) = m(no, i) m(no, i) = ex Debug.Print m(r1, i), m(no, i) ex = inm(r1, i) inm(r1, i) = inm(no, i) inm(no, i) = ex Next End If End If max = m(r1, r1) For i = 1 To n m(r1, i) = IMDIVa(m(r1, i), max) inm(r1, i) = IMDIVa(inm(r1, i), max) Next For r2 = 1 To n If r1 <> r2 Then max = m(r2, r1) For i = 1 To n m(r2, i) = IMSUBa(m(r2, i), IMPRODUCTa(m(r1, i), max)) inm(r2, i) = IMSUBa(inm(r2, i), IMPRODUCTa(inm(r1, i), max)) Next End If Next Next IMINVERS = inm End Function

  • VBA エクセル 合計

    皆様、こんにちは。 それぞれの値が入っている会計シート(シートの形式は同じ)を一つの合計シートに合計しようとしていますが、うまくいきません。具体的に、数値の合計ができません。 例えば、ある項目に対して、シートAに100が入力され、シートBには230が入力されているとすれば、合計シートに100+230=330を入力したいです。なお、全ての会計シートは"Form"というエクセルシートにあり、その数をユーザが決めますので、検索しなければいけません。そして、合計シートは"Result"にあります。 以下のように書いてみましたが、間違っているようです。 Worksheets("Result").Activate Dim SR As Integer Dim SC As Integer 'SR is start row 'SC is start column SR = 6 SC = 2 Worksheets("Form").Activate Dim i As Integer i = 68 Do While 1 = 1 If Selection.Cells(i, 4).Value = "" Then Exit Do End If i = i + 49 Loop Sum = 0 Sum = Sum + Selection.Cells(i, 4) Worksheets("Result").Activate Cells(SR + 5, SC + 2) = Sum 詳しい方に教えていただければ非常に助かります。 どうぞよろしくお願いします。

  • 変数が勝手に変わります

    Dim i As Integer:Dim i2 As Integer:Dim card(5) As Integer:Dim expectPoint0card(1) As Integer '0枚のカードを交換する場合のすべての選択肢の期待値 Dim expectPoint1card(5) As Integer Sub porkerGame() card(1) = 1: card(2) = 2: card(3) = 3: card(4) = 4: card(5) = 5 getExpectPoint1card expectPoint1card End Sub Sub getExpectPoint1card(expectPoint1card() As Integer) Dim tesu1 As Integer:Dim sum1 As Integer For i = 1 To 5 getTesuSum1 i, tesu1, sum1 expectPoint1card(i) = sum1 / tesu1 Next i End Sub Sub getTesuSum1(rowNumber As Integer, tesu1 As Integer, sum1 As Integer) Dim card2(5) As Integer:tesu1 = 0:sum1 = 0 MsgBox rowNumber copy card, card2, 5 MsgBox rowNumber For i = 4 To 55 MsgBox rowNumber card2(rowNumber) = i addTesuSum card2, tesu1, sum1 Next i End Sub Sub copy(row() As Integer, row2() As Integer, i2 As Integer) For i = 1 To i2 row2(i) = row(i) Next i End Sub 上記のプログラムで、ウィンドウに1,6,4,5,6と表示され、その次には、エラーが表示します。僕は、ウィンドウに表示される変数RowNumberの値がしばらくの間は1のままであるようにプログラムを書いたつもりなのですが、変数rowNumberの値が変わるのは、どうしてでしょうか?教えてください。お願いします。

  • MySQLで合計と小計の計算方法を教えてください

    SQLで判らないことがあります。 生徒NO | 科目 | 点数         テーブル:testdb  --------------------------- 001    英語   95 001    国語   90 001    理科   75 001    社会   73 001    算数   62 002    英語   93 002    国語   87 002    理科   78 002    社会   71 002    算数   68 -------------------------------- 30人分位あり、(全員の5科目の合計)- (国語と社会の合計)=(表示したい数値)にしたいのです。 $sql = "select SUM(点数) as goukei,SUM(点数)-(select SUM(点数) from testdb where 科目=国語 and 科目=社会)as shoukei from testdb "; また、基準点数を儲けて合計点数-基準点数も求めたいのです。$kijyunは変数。 $sql2 = "select SUM(点数) as goukei,SUM(点数)-(select count(*) * $kijyun from testdb )as kijyunten from testdb "; 上記で結果が得られません。教えてください!

    • ベストアンサー
    • MySQL
  • vba 自作関数

    Function zei(myRng As Range) As Double Dim c As Range Dim goukei As Double 'Volatileについて 'シート内のどこかのセルを参照しているものとする 'シートのどこかに変更があったらそのセルが自動的に再計算される Application.Volatile goukei = Application.WorksheetFunction.Sum(myRng) zei = Int(goukei * 5 / 100) End Function これを標準モジュールに貼り付けてワークシート上で関数を呼び出し、 100を入れると#VALUE!が返るのですがどうしてでしょうか? 違う値を入れても必ず#VALUE!が返ります。

  • エクセルのIF関数の使い方について

     こんにちわ。仕事で成績の評価表の作成をしたくて、エクセルで表を作成しました。    表は、  Aのセル・・・氏名 Bのセル・・・テストの点数 Cのセルが平常点          Dのセル・・・BとCのセルを合計した合計点数          Eのセル・・・成績評価  Fのセル・・・合計点数による順位    という表を作成しました。    Eのセルに Dのセルの合計点数を基準として 5段階の評価をつけたい。    条件が、 85点以上が5、60点以上が4、50点以上が3、35以上が2、1~34点までが1    =IF の関数 =IF(論理式、真の場合、偽の場合) というのを使用すればいいのは   わかったんですが、いまいち関数式の取り方、書き方がわからなくて・・・本をみて記入して   みたんですがエラーになります。   どうしたら評価を自動転記することができるか、教えてください。   また点数をもとに順位をつける方法も教えて欲しいです。よろしくお願いします。

  • エクセルで回数をカウントするマクロ

    いつもありがとうございます。 ボタンを押すごとに回数をカウントするマクロをつくりたいのです。ためしに、 Sub testcount() Dim a As Integer a = Cells(1, 1).Value a = a + 1 Cells(1, 1) = a MsgBox a End Sub とやってみて何とかできましたが、できればワークシートに数値を入れずに出来る方法はないのでしょうか? 贅沢いってすみません。

  • VBA 標準モジュールとフォーム

    ある標準モジュール内で生成した変数の値をフォームのコマンドボタンをクリックしたら表示されるプログラムはどうやってつくるのですか? 標準モジュール sub test() dim a as integer dim b as integer dim sum as string a=5 b=1 sum=a+b End sub フォームのコマンドボタンクリック Sub CommandButton1_Click() MsgBox sum End Sub 標準モジュールで計算した答えがフォームのコマンドボタンをクリックしたら答え6が表示されるようにしたいのですが、どうしたらできますか?

  • Excel マクロ cstr を使ったcountができない

    初心者です。すいません質問させて下さい。 Excelのシート上に、オートシェイプを"card"& CStr(Num)として、 連番を付けています。連番の上限は200までにしてあります。 例えば"card1"で名前ボックスに入力すると検索できる一個目の"card1"のオートシェイプが検索されます。 またコピーペーストすると、同じ"card1"になります。 ここで、シート上のそのオートシェイプが何個あるか数えたいのですが、連番の数では判定できないので、マクロで考えてみましたが、うまくいきません。 Sub testcc() Dim Num As Integer, Crd As Integer, Sum As Integer Sum = 0 Num = 1 Do Crd = ActiveSheet.Shapes("card" & CStr(Num)).Count Sum = Sum + Crd Num = Num + 1 Loop Until Num = 200 Range("A1").Value = Sum End Sub 必ず、 Crd = ActiveSheet.Shapes("card" & CStr(Num)).Count でデバックの画面に移ってしまいます。 どう記述が間違っているのかが知りたいです。 御教授お願い致します!

専門家に質問してみよう