- ベストアンサー
エクセルマクロの作り方(初歩)で教えてください
- エクセルマクロについての初心者です。小学校で使うテスト結果の分析表(○、×の一覧表)作成の支援ソフトを作りたいです。
- 具体的には、児童数が40人で、2行目から41行目までに児童の名前やデータが入る表を作りたいです。
- マクロ内で、出席番号と正解した問題番号を入力すると、自動的に○×の表が作成されるようにしたいです。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
No4です。 修正しました。 Sub test() Dim myW Dim x As Integer, i As Integer, n As Integer x = Cells(Rows.Count, "A").End(xlUp).Row 'A列最終行取得 ReDim myW(1 To x - 1, 1 To 5) '配列サイズ設定 For i = 2 To x '行方向 For n = 3 To 7 '列方向 If Cells(i, n) <> "" Then 'セルが空白でなければ myW(i - 1, Cells(i, n)) = 1 '配列に1を End If Next n '繰り返し Next i '繰り返し With Range("H2:L" & x) '貼り付け先 .ClearContents 'クリア .Value = myW '1を貼り付け On Error Resume Next '全員満点時の用意 .SpecialCells(xlCellTypeBlanks).Value = 0 '空白を0に On Error GoTo 0 End With End Sub
その他の回答 (4)
- merlionXX
- ベストアンサー率48% (1930/4007)
ご提示の前提でマクロを書いてみました。 行は何行あってもかまいませんが、列はお書きになった条件の、CからG列は正解した番号、HからL列は問題1~5の○×を1と0で表示させます。 Sub test() Dim myW Dim x As Integer, i As Integer, n As Integer x = Cells(Rows.Count, "A").End(xlUp).Row 'A列最終行取得 ReDim myW(1 To x - 1, 1 To 5) '配列サイズ設定 For i = 2 To x '行方向 For n = 3 To 7 '列方向 If Cells(i, n) <> "" Then 'セルが空白でなければ myW(i - 1, Cells(i, n)) = 1 '配列に1を End If Next n繰り返し Next i繰り返し With Range("H2:L" & x) '貼り付け先 .ClearContents 'クリア .Value = myW '1を貼り付け .SpecialCells(xlCellTypeBlanks).Value = 0 '空白を0に End With End Sub
お礼
回答ありがとうございました。まだ十分理解できていませんが、マクロの勉強を兼ねて確かめてみます。ていねいな説明でありがとうございました。
- tom04
- ベストアンサー率49% (2537/5117)
こんにちは! VBAでないので参考にならなかったらごめんなさい。 入力用のSheetと出力用のSheetが必要になると思いますので、 ↓の画像のように上側が入力用Sheet・下側が出力用Sheetにしています。 尚、出席番号に重複はなく、Sheet2の出席番号・氏名はあらかじめ入力してあるものとしています。 Sheet2のC2セルに =IF($A2="","",IF(COUNTIF(OFFSET(Sheet1!$C$1:$IV$1,MATCH($A2,Sheet1!$A$2:$A$300,0),,1),COLUMN(A1)),1,0)) (とりあえず当方使用のExcel2003の場合での最終列まで問題があっても良いようにしてみました) という数式を入れ、列方向と行方向にオートフィルでコピーすると 画像のような感じになります。 これで何とか希望に近い形にならないでしょうか? 以上、参考になれば良いのですが 他に良い方法があればごめんなさいね。m(__)m
お礼
回答ありがとうございました。2つのシートを使うアイデアでできることがわかってうれしいです。早速やってみます。べんきょうになりました。なおお礼が遅れて申し訳ありませんでした。
- mshr1962
- ベストアンサー率39% (7417/18945)
H2=IF(COUNTIF($C2:$G2,COLUMN(A2)),1,0) これをH:L列の範囲にコピーしてください。
お礼
回答ありがとうございました。簡単にできるのですね。うまくいきました。どうしてこんなに簡単にできるのかびっくりするやら、2日間も悩んだ私は何だったのか、妙な気分です。いずれにして感謝しています。
- GOCHISOUda
- ベストアンサー率34% (50/144)
H2に=IF(C2="",0,C2) でいいのではないですか。 あとはコピー! ただ、直接0と1を入れるのがベストかと思います。 C列とH列に何の違いがあるのか考えましたが、 0を入れるか入れないかの違いですよね。 ところが、表というのは0と空欄は意味が違いますよ。 上述だと全部0点とテストを受けてないは同じものになります。
お礼
回答ありがとうございました。事情があってお礼を書くのが遅れてすみません。空欄と0との違いの指摘ありがとうございました。確かに直接入力しても同じかもしれませんが、問題数が多いとき、間違えた番号だけ入力する方が楽かな、間違えた個数(またはあっている個数)が入力した段階で児童の比較が簡単にできるかなと思ったからです。いずれにしても、早々の回答に感謝いたします。
お礼
再度の細かい回答ありがとうございました。とても感謝いたします。私の初歩的な質問に皆さんが回答していただいたことのお礼申し上げます。もっと他のアイデアがあるかもしれませんが、私の現在の理解力ではこのくらいが限界なので締め切らせてただきます。