ギリギリ行けるお一人様のライン

VBAは全くの素人です。どの様に相談、教えを請うたら良いのか分からないのですが‥‥。
下記の表はある種目の得点表です。
都度、再計算「F9」key押下すれば良いのですが、でなくVBAにより実現したいのです。

チームの全員が80点以上("合格")を達成すると、上位リーグ参加できます。
一人でも80点未満だと、上位リーグに参戦できず再挑戦となります。
判定結果の$G$8セルに、その結果として「リーグ参加」(合わせてセルの色を#36黄色に) or「再挑戦」と表示したい。

各参加者のG列には判定の為の式 =IF(F3~F7に>=80,"合格","再挑戦")が入力済みです。
$G$8の式 =IF(AND($F$3>=80,$F$4>=80,$F$5>=80,$F$6>=80,$F$7>=80),"リーグ参加","再挑戦")
合わせて、セルF8に"合格"になるまでの再計算(Calculation)回数を表示させたい。.

見よう見まねでマクロコード作ってみたのですが‥‥(~_~; …アセアセ)
Sub リーグ参戦挑戦LIST()
Calculate
Do Until
If Range("$G$8").Value = "再挑戦" Then
Calculate
Else: Range("$G$8").Value = "合格"
IF Range("$F$8").Value ="合格" = Interior.colorIndex = 36
End If
Calculate
Loop

こんな感じのコードになるのかと思うのですが‥‥??。
全く自信がありません。
おんぶにだっこになるかと思うのですが、どなたか教えてください

「都度「F9」key押下でなくVBAにより」の質問画像

A 回答 (4件)

Range(”B15:G19”) とRange(”G20”)のダブルクォーテーションが全角なのは


投稿する際に実際のコードのコピペではなく、
ここのサイトの欄に手入力したためと思われますが、そちらの
実際のコードを念のため確認してみてください。”→ "

On Error GoTo errH の後に
Stop を書き加えてシートのRange("B15:G19")に何か入力してみてください。
Stopの行で止まらなければ
Ctrl + G でイミディエイトウィンドウを出して
その中に、Application.EnableEvents = True と入力してEnter。
シート画面に戻って再度Range("B15:G19")に入力。
これでもStopで止まらなければ記述しているシートモジュールが違うのでは?

止まった状態ならF8キーでステップ実行できるので1行ずつ進めていって
マウスカーソルをRange("G20") に合わせて値を確認してみてください。

※まずは最初に示されたシート(セル)のレイアウトで作ってみることをお勧めします。
    • good
    • 0
この回答へのお礼

nicotinism 様
毎度、ありがとうございます。訳が分からなくなってしまいました。
Macro以前の問題、もうちょっと勉強しろ!‥‥と叱られそうですが‥‥。

Alt-F11で作成したマクロコードとExcelのコマンドにある、表示-マクロ-「マクロの表示」とは別物でしょうか?。
Alt-F11で作成したコードをExcel側の「マクロの表示」に表示させるには?。
※Alt-F11ではマクロ実行できず、Excel側で「マクロ実行」可。両方の同時画面表示ができれば良いのですが。

質問時のsheetが無くなり(自分ながら原因不明)、新しくBOOKを作成し質問時のsheetを再生したのですが、

Alt-F11で作成したコードはデバッグでエラーは出ません。Excel表に戻ると「マクロの表示」欄は空白です。

なぜか?、Alt-F11で作成したコードはオブジェクト名-Sheet5となっています。
新Bookでの「マクロの表示」に表示さたいコードはsheet2の名前変更(リーグチャレンジに)したシートです。

No.3のお礼に記した時は、「マクロの表示」にコードが表示されていたのですが、その後本来のシートに合わせるためセル位置変更を行ったのですが、‥‥上手く行きませんでした。その後のご回答がこのNo.4です。

上述の様に、
Sheet名が合わないのが原因でしょうか?。‥‥合わせる為にはどの様にすれば‥‥?。
オブジェクトの中に目的のsheet名(リーグチャレンジ)があるのですが‥‥、

VBAと関係ない事になり申し訳ありません。

お礼日時:2021/06/28 20:01

コードを記入したいのだが方法が分からないということでしょうか?


VBEを起動すると、Alt + F11 でも起動するはず。
https://excel-ubara.com/excelvba1/EXCELVBA481.html
のような画面になるかと思います。

画面では標準モジュールのコードウィンドウが表示されていますので
左上のプロジェクト ウィンドウの 『Sheet(Sheet1)』をクリックします。
※あの表があるシートです(シート名を変えていればそのシート名)
コードウィンドウがシートモジュールに変るので
そのウィンドウの左上『(General)▼』をクリックしプルダウンから
(General) から Worksheet に変更します。
すると右上の (Declarations) が SelectionChange ▼ に変ります。
今回必要なのは Changeイベントなのでプルダウンから Changeに変更します。
そうすると
Private Sub Worksheet_Change(ByVal Target As Range)

End Sub
って出てきますので
この中に前回回答のコードをコピペッタンして前回回答の内容と同じにします。
最後にVBEの、メニューのデバッグ(D)→ VBAProjectのコンパイル をクリック。
なにもエラーが出なければOKです。
シートの画面に切り替えて表の中に適当な数字を入れて検証してみてください。
記入するごとに「回数」が増えてゆくはずです。

VBAに関しては「VBA入門」とかでGoogleと色々なサイトで先達の方が解説されていますので
お勉強なさってください。
画面サンプルとして使わせてもらった
https://excel-ubara.com/excelvba1/
でも総合的に解説されてますね。
    • good
    • 0
この回答へのお礼

nicotinism 様
毎度、ありがとうございます。当方のLISTに落とし込むのに手間暇が掛かっており申し訳ありません。
>Private Sub Worksheet_Change(ByVal Target As Range)

End Sub
って出てきますのでこの中に前回回答のコードをコピペッタンして前回回答の内容と同じにします。
最後にVBEの、メニューのデバッグ(D)→ VBAProjectのコンパイル をクリック。なにもエラーが出なければOKです。

‥‥ありがとうございます。エラーは出なかったです。

>シートの画面に切り替えて表の中に適当な数字を入れて検証してみてください。記入するごとに「回数」が増えてゆくはずです。

‥‥G8、F8のセル位置が当方現物では違っているので、次の様に修正したのですが回数表示が出ません。どこが間違っているのでしょうか?。

On Error GoTo errH
If Application.Intersect(Target, Range(”B15:G19”)) Is Nothing Then Exit Sub
Application.EnableEvents = False '下の行のイベントを再度拾わないようにする
Range(”G20”) = Range(”G20”) + 1
errH:
Application.EnableEvents = True '既定の設定に必ず戻す

※画像File添付したいのですが‥‥、添付するボタンが見当たりませんので、悪しからず。

お礼日時:2021/06/26 23:57

F8セルの回数は単にセルB3からF7間の入力がある都度1ずつ増えてゆきます。


G8で「合格」となったら止めれば良いだけでは?
クリアしたければ、Del か 0 (ゼロ)入力してください。

前回回答した後で気づきましたが、ひとつのテストで80点以上取れば
他の三つのテストは受けていなくとも合格判定になりますが。これでOK?

さっぱり・・・とはどういう意味でしょう?
こちらも回答?の仕様がないのですけど。
「都度「F9」key押下でなくVBAにより」の回答画像2
    • good
    • 0
この回答へのお礼

nicotinism 様
ありがとうございます。
あ、あ 良かった。ご指導継続できるのですね。‥‥このサイトの使い方がよくわからないもので‥‥、本来なら、補足説明なのですが、記入場所が見つからなく、お礼場所に記入しました。今回も、

さて、本件ご指摘の通りです。矛盾点がありますね。
申し訳ない(-_-;) (^_-)-;のですが、本来目的をカモフラージュして質問しているため、自分ながら説明が難しいのです。
表内の計算はdata読み込み後、「ファンクション9」を押下する度にセルG3~G7に合否表示を繰り返してくれます。(縦横関数式設定済み)。

私のお願いは、セルG8に"合格"の答えが出るまでの、即ち、「ファンクション9」を押下する動作をVBAで行いたいのです。(併せて、その繰り返し計算の回数も=F8に)。
マメ本を見ていて、Do~Until~Loopが必要かと思っているのですが‥‥。
このVBA作成がさっぱり分からないのです。
※タイトル?の「Sub リーグ参戦挑戦LIST() 」以外のVBAが‥‥。

宜しくお願い致します。

お礼日時:2021/06/26 01:07

F3 に =SUM(B3:E3) とし F7 までコピペ


G3 に =IF(F3>=80,"合格","再挑戦") として G7 までコピペ
G8 には =IF(COUNTIF(G3:G7,"再挑戦")=0,"合格","再挑戦")
んで
F8 のセルの書式設定に、#,##0"回"

G3 ~ G8 の条件付き書式に
「セルの値」 「次の値に等しい」 「="合格"」
書式に黄色の塗りつぶし

あとはワークシートのチェンジイベントに
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo errH
  If Application.Intersect(Target, Range("A3:F7")) Is Nothing Then Exit Sub
  Application.EnableEvents = False '下の行のイベントを再度拾わないようにする
  Range("F8") = Range("F8") + 1
errH:
  Application.EnableEvents = True '既定の設定に必ず戻す
End Sub

でどうじゃろ?
    • good
    • 1
この回答へのお礼

nicotinism 様
早速のご回答ありがとうございます。

F3 に =SUM(B3:E3) とし F7 までコピペ
G3 に =IF(F3>=80,"合格","再挑戦") として G7 までコピペ
G3 ~ G8 の条件付き書式に「セルの値」 「次の値に等しい」 「="合格"」
書式に黄色の塗りつぶし

‥‥はOKです。

G8 には =IF(COUNTIF(G3:G7,”再挑戦”=0,”合格”,”再挑戦”)
んで
F8 のセルの書式設定に、#,##0”回”

‥‥再挑戦の数のカウントでなく、G8が合格(全員)になるまでの回数(Loop回数)を知りたいのです。※最初にこの表を新規作成(週一くらい)時にLOOP回数のリセットも必要です。

あとはワークシートのチェンジイベントに

‥‥この後がさっぱりわかりません。

お礼日時:2021/06/24 20:29

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報