今エクセルマクロを作っていて、いいところまではいってるんですが完成には至らなくて困っています。すでにシート1のA1からA40のところまで40番までの人の番号と、B1からB40のところまで名前と、C3からAF40のところまで1日から31日までの出席情報がかかれています。(出席なら◯、欠席なら×、遅刻なら△です)。そしてシート上につくった出席というボタンを押すと何番ですか?とインプットボックスが出てきて例えば1と入力したら番号が1の人の出席数だけがカウントされて、出席数は◯◯ですというメッセージが出てくるようにしたいです。どのようにプログラムを設計したらいいんでしょうか?
No.5ベストアンサー
- 回答日時:
こんばんは。
学生さんですか?高校生ぐらいでしょうか?入門編で、このぐらいのマクロの問題ができるのは、クラスで1人か2人で、たぶん経験者です。練習用としては、ワークシートの関数はなるべく使わないようにします。
>いいところまではいってるんですが完成には至らなく
うまくいかないのは、間違えているわけで、それがクリアしないと学校では、50点を貰えるかもしれませんが、仕事や掲示板の回答者では、0点であるということです。私は、何度も悔しい思いをしました。VBAプログラミングは完成して初めてマクロと呼びます。
このレベルでも、ヒントが出ていないと、たぶん出来ないのではないかと思います。
仮のサンプル表の画像を貼り付けましたから、それをみてください。
'//
Sub BUTTON1_Click()
Dim d As Date
Dim num As Variant
Dim i As Long
Dim j As Long
Dim cnt As Long
d = Range("C1").Value '日付の始まり
cnt =0
'エラー処理
If Day(d) <> 1 Then MsgBox "表が正しくありません。", vbExclamation: Exit Sub
num = Application.InputBox("何番ですか?", "出席番号")
If num = False Then Exit Sub
If WorksheetFunction.CountIf(Range("A3:A40"), num) = 0 Then
MsgBox "出席番号は見つかりません。", vbExclamation: Exit Sub
End If
'---------実際のコード---------
For i = 1 To 40
If Val(num) = Trim(Cells(i + 2, 1).Value) Then
For j = 1 To Day(DateSerial(Year(d), Month(d) - 1, 0)) '月末まで
If Cells(i + 2, j + 2).Value Like "○*" Then
cnt = cnt + 1
End If
Next j
Exit For
End If
Next i
MsgBox Cells(i + 2, 1).Value & "番:" & Cells(i + 2, 2).Value & " さんの出席数は" & vbCrLf & _
cnt & "日 です。"
End Sub
No.4
- 回答日時:
課題で、しかも良いところまでできている・・・ということであれば、
何が悪くて意図した通りに動かないかを質問しないとダメだろ。
「良いところまではできているんだけど、代わりに作ってください」
って、どうなの?
今現在できているコードと、その結果どうなるか、
または途中まででも意図した通りになるコードを併記し、
どう修正すれば良いか、何を追加しなければならないかを質問するようにしましょう。
(「補足」に書けるんじゃないかな)
No.3
- 回答日時:
>エクセルのシート状で関数使って数えた方がはやいのですがエクセルマクロを
>使ってつくるという課題だからそのようにつくりたいです
それができるのであれば、それをマクロ化すればよいだけです。
具体的には、マクロで、セルにワークシート関数の数式を貼り付けて計算させる。そして、答えを求めた後でセルに記載した数式をマクロで消去する。
これもれっきとしたマクロを使った求め方です。
記述方法は、range(○○).formula = "=sum(○○)" または cells(○○).formula = "=sum(○○)" です。.fomulaをつけることで数式だと認識されます。当然右辺は記述方法も含めてワークシート関数です。
R1C1形式にしておけば、変数によるセル指定も可能です。通常はA1形式だと思いますので、A1形式→R1C1形式の切り替えをマクロの初めのほうに記述しておきます。最後にR1C1形式→A1形式に戻します。
私は、このやり方をよく使います。かなり使えるやり方です。
どこで行き詰っているか具体的に示さないと、アドバイスもできません。
No.1さんも書かれていますが、作成中のマクロを載せてみては?回答がつきやすいと思います。
No.2
- 回答日時:
>>どのようにプログラムを設計したらいいんでしょうか?
日本語で書くと、簡単に思えることでも、それをプログラミングに変換しようとすると、いくつもの処理を書かないと実現しないことが多いです。
まずは、「○○の結果を表示するには、こういうデータが必要だよな、そのデータを得るにはAって処理が必要だ。Aの処理を行うには、その前にBって処理が必要だよな・・・」って日本語でおおざっぱに流れを日本語で書いてみます。
その中でAの処理が大きすぎるとおもえば、A1,A2・・・とさらに細分化・分割していくことになりますね。
そして、日本語で処理の流れが表現できて、その先のコードもおよそどうなるか想像できたら、コーディング&テストしながら作っていけばいいと思います。
また、最初から100%のものを作ろうとしないで、機能限定版的に作って、そこそこ動くようになったら、肉付けしていけばいいでしょうね。
たとえば、「Bの処理ができていたら、こういうデータが得られるはず。そのデータが得られたとして、固定値を与えて、それ以降の処理を作ってみよう」とか。
とりあえず、機能が乏しくとも、目に見える動作をするものができると、「続けて頑張ろう!」ってモチベーションがアップしますからね。
No.1
- 回答日時:
その、いいところまでいっているマクロを書いていただくといいと思いますよ。
ちなみに、例えばCに1列追加して、C3に
=COUNTIF(D3:AG3,"○")
で表示した方が便利なような気がしますがいかがでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) マクロか関数で処理したいのですが、教えて頂けませんか。 8 2022/10/31 15:18
- Excel(エクセル) エクセルでキーリストからデータを取り出して1枚1枚印刷するには? 11 2022/06/27 09:52
- Excel(エクセル) excelで検索した商品の画像(ネットワーク上の)を表示させたい。 3 2023/06/28 00:32
- 電車・路線・地下鉄 南海特急の座席指定 2 2022/10/02 16:09
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて RemoveDuplicatesを使 3 2023/02/28 01:13
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて RemoveDuplicatesを使 1 2023/02/27 22:21
- その他(悩み相談・人生相談) 些細な悩みなんですが、僕は今出席番号1番で大体の年は1番です。僕が気になってるのは 1.出席番号1番 5 2022/04/29 08:46
- その他(悩み相談・人生相談) 些細な悩みなんですが、僕は今出席番号1番で大体の年は1番です。僕が気になってるのは 1.出席番号1番 2 2022/04/12 19:06
- 戸籍・住民票・身分証明書 苗字を変えたいです。 ほんまに不利な苗字です。 ありふれた苗字ですが。 名前はありふれた名前なのです 5 2022/08/09 18:44
- Excel(エクセル) 【VBA】PDF出力に任意のファイル名前を付ける方法 3 2023/07/21 10:55
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで特定の列が0表示の場...
-
Excel マクロ VBA プロシー...
-
Excel・Word リサーチ機能を無...
-
ExcelのVBA。public変数の値が...
-
メッセージボックスのOKボタ...
-
2つのマクロでチェックボックス...
-
エクセルのマクロについて教え...
-
Excel2013 VBA マクロ実行中に...
-
エクセルのマクロについて教え...
-
VBA初心者 Ctrl+での操作、ボタ...
-
エクセルで別のセルにあるふり...
-
エクセルのマクロについて教え...
-
Excelマクロを引数付で起動
-
「マクロ」の語源
-
エクセルのマクロについて教え...
-
レポートで空データ時に印刷しない
-
ユーザーフォームを起動しなが...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel・Word リサーチ機能を無...
-
特定のPCだけ動作しないVBAマク...
-
エクセルで特定の列が0表示の場...
-
Excel マクロ VBA プロシー...
-
メッセージボックスのOKボタ...
-
一つのTeratermのマクロで複数...
-
エクセルで別のセルにあるふり...
-
ExcelのVBA。public変数の値が...
-
エクセルに張り付けた写真のフ...
-
ExcelVBAでPDFを閉じるソース
-
EXCELのVBAでRange("A1:C4")を...
-
Excel VBAからAccessマクロを実...
-
TERA TERMを隠す方法
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
マクロ実行時、ユーザーフォー...
-
Excelのマクロについて教えてく...
-
ソース内の行末に\\
おすすめ情報
エクセルのシート状で関数使って数えた方がはやいのですがエクセルマクロを使ってつくるという課題だからそのようにつくりたいです