• 締切済み

ExcelのIF関数を使って

学校の成績一覧表を作っています。成績は◎、○、△の3段階でつけます。 一覧表の中に、◎と△だけをつければ、残りの空白セルには、マクロで○が入るようにしてあります。 Excelのバージョンは2003です。 しかし、クラスによって人数が違うので、自動的に○が入るようにしてあっても、どこまで入れたらいいのかは変わってきます。 そこで、氏名を入れるセルを参照し、「もし、このセルが空白だったら、その下のセルはすべて空白になる」というような関数を入れておけばいいのかなと考えました。が、その関数がわかりません。 どなたか、教えてもらえませんでしょうか?           C1  D1  E1  F1  G1・・・・・            伊   佐  鈴  山           藤   藤  木  田   B2   読む力    ○  ◎  △  ◎    B3   書く力     ◎  ○  ○  △ 分かりにくいでしょうが、上のような感じで作ってます。 上の場合、G1セルに名前が入っていないので、G2セルから下は、マクロでは○が入りますが、関数によって空白にしたいのです。 よろしくお願いします。

みんなの回答

  • OKWavex
  • ベストアンサー率22% (1222/5383)
回答No.10

>何度もありがとうございます。自分もそう思って、やってみたのですが、うまくいかなくて、 >それで、上に補足を入れさせてもらったんです。 >どうすればいいのかなと思ってます。ありがとうございます。 空白の判定でうまくいかない場合、セル参照での未入力セルの値が空白ではなく0と判定されていると思われるので、空白と0の判定をORでつないで条件とすればいいと思われます。

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.9

「書いていただいたものをマクロのところに貼り付けましたが、どこにも○は出ませんでした」 貼り付けただけでは、○はでないよ。 ちゃんと実行しなければね。 なお、回答したコードはちゃんと動きます。○が出ないはずがないが、 もし、出ないとすればあなたのやり方が悪いか、そのExcelは壊れている。あきらめなさい。

  • don9don9
  • ベストアンサー率47% (299/624)
回答No.8

>書いていただいたものをマクロのところに貼り付けましたが、どこにも○は出ませんでした。 どこにも出なかった、ですか。 確認ですが、コードは標準モジュールに貼り付けていますか? シートモジュールに貼り付けているということはありませんか? その場合、貼り付けたシートのみで動作し、別のシートだと動作しません。 「マクロの記録」を使ったのであれば普通は自動的に標準モジュールが追加されるので、その可能性は少ないかとは思いますが…

  • don9don9
  • ベストアンサー率47% (299/624)
回答No.7

No.5です。 私やNo.4さんが書いたコードを実際に動かしてみたのですよね? それがどういう結果になったかを書いていただけないでしょうか。 例えば ・想定している範囲の外まで○が入力されてしまった ・1行目に名前が入っていない列にも○が入力されてしまった ・どこにも○が入力されなかった など、もっと具体的に。 ただ「うまくいかなかった」だけでは原因は特定できないです。

nishikyo
質問者

補足

すいませんでした。 書いていただいたものをマクロのところに貼り付けましたが、どこにも○は出ませんでした。貼り付け方がおかしかったのかもしれませんが・・・。

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.6

#4です。 数式が入っているが、空白に見えるということなら、 次ではどうでしょうね。 Sub Macro1() c = 0 While Range("C1").Offset(0, c) <> "" c = c + 1 Wend r = 0 While Range("B2").Offset(r, 0) <> "" r = r + 1 Wend Range("C2").Resize(r, c).SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "○" End Sub

  • don9don9
  • ベストアンサー率47% (299/624)
回答No.5

名前が入っているセルは、見かけ上空白でもブランクセルではない可能性があるということですよね? 以下のようなマクロでどうでしょうか。 Sub マクロ() Dim MaxRow As Long Dim MaxCol As Long Dim r As Range MaxRow = 2 MaxCol = 3 Do Until Cells(1, MaxCol + 1) = "" MaxCol = MaxCol + 1 Loop Do Until Cells(MaxRow + 1, 2) = "" MaxRow = MaxRow + 1 Loop For Each r In Range(Cells(2, 3), Cells(MaxRow, MaxCol)) If r.Value = "" Then r.Value = "○" End If Next r End Sub

nishikyo
質問者

お礼

さっそくのご回答、ありがとうございます。 試してみたのですが、うまくいきませんでした・・・。 自分のやり方がおかしいんでしょうか? せっかく作っていただいたのに、申し訳ないです・・・。 でも、大変、感謝しております。ありがとうございました。

nishikyo
質問者

補足

みなさん、ご回答をいただき、ありがとうございます。 自分もマクロを勉強し始めたばかりなので、分かっていないところばかりなのですが・・・。 質問のところに書いたマクロですが、一覧表の中に、まずは◎と△だけを全部入れてしまいます。次に「新しいマクロの記録」にして、記録を始めたら、「編集」⇒「ジャンプ」⇒「セル選択」⇒「空白セル」で○を入れ、「Ctrl」キーを押しながら確定して、記録を終了しました。 一覧表は40名分作ってありますが、クラスによって人数はまちまちなので、氏名の欄に名前が入っていなかったらその下のセルはすべて空白としたいのです。 IF関数で、「もし、氏名を入れるセルが空白なら空白、氏名を入れるセルに名前が入っていたら、空白セルだけを選択して、一斉に○を入れる」というマクロを組みたいのです。 口で言うのは簡単ですが、それが難しくって・・・。 どなたか、お知恵を拝借できませんでしょうか? 質問文の説明がわかりにくくて申し訳ありませんでした。 もう一度、よろしくお願いします。

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.4

"○"を入れるマクロを次のようにでもする。 Sub Macro1() c = Range("C1").End(xlToRight).Column - 2 '2は、C2の列番号-1です r = Range("B2").End(xlDown).Row - 1  '1は、C2の行番号-1です Range("C2").Resize(r, c).SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "○" End Sub

nishikyo
質問者

お礼

ご回答、ありがとうございます。 さっそく入れてみたのですが、うまくいきませんでした・・・。 せっかく作っていただいたのに申し訳ないです・・・。 でも、感謝しております。ありがとうございました。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.3

C列から右横の列を選択します。 「ホーム」タブの「条件付き書式」で「新しいルール」から「数式を使用して…」して数式の窓には =C$1="" と入力します。 同じ画面の「書式」をクリックして「表示形式」のタブで「ユーザー定義」を選択します。 「種類」の窓には ;;; を入力してOKします。 これで名前が無いセルには何の表示もなくなるでしょう。

nishikyo
質問者

お礼

ご回答、ありがとうございます。 ですが・・・。 すいません、「ホーム」タブの意味が分かりません・・・。

  • OKWavex
  • ベストアンサー率22% (1222/5383)
回答No.2

>空白セルとは違うのですが・・・。こんな場合は、どんな関数にしたらいいのでしょうか??? 数式の結果としてセルの値は空白になるのだから違いはないのでは?

nishikyo
質問者

お礼

何度もありがとうございます。自分もそう思って、やってみたのですが、うまくいかなくて、それで、上に補足を入れさせてもらったんです。 どうすればいいのかなと思ってます。ありがとうございます。

  • OKWavex
  • ベストアンサー率22% (1222/5383)
回答No.1

空白セルに自動で○を入れるマクロ処理があるのでは、関数によって空白にしたセルもマクロ処理で○になってしまうでしょう したがって、空白セルに自動で○を入れるマクロ処理を変更して、氏名のセルに名前が入っている場合のみ空白セルに自動で○を入れるようにマクロ処理を変更すればいいです

nishikyo
質問者

お礼

さっそくのご回答ありがとうございます。 なるほど、そうなんですね・・・。 マクロ自体を書き換えないといけないんですね。

nishikyo
質問者

補足

すいません、氏名を入れるセルには、数式が入っていますので、(別のシートに、氏名を入力する欄を作ってあり、その氏名が成績一覧表の氏名を入れるセルに飛ぶようにしてあるんです。)空白セルとは違うのですが・・・。こんな場合は、どんな関数にしたらいいのでしょうか???教えていただければありがたいです。よろしくお願いします。

関連するQ&A