[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『コード記述の確認』(やま)
小学生向けのくく練習ゲームらしきものを作成しています。 かなり前に、ここでご教示頂いて「正常に作動」していたファイルを利用して 「登録番号」を新設して、得点記録表に、ポイント数(C11)を記録 するように、コードを一部修正しました。現状で、得点記録は正しく 記録できていますが、次の2点についてご教示下さい。 高齢者になった今、地域で「脳トレ」にと準備中です。よろしくお願いします。 誠に勝手ですが、今夜、質問させて頂き、明朝の確認となります。
マクロボタンの 「次の人と交代します。」をクリックで Q1 「スタート」シートヘ戻らなくなってしまった。(戻っていた) Q2 「得点」シートの、登録番号(C31)を消してから「スタート」シートヘ戻したい。
Range("C31").ClerContents 等と記述してみましたがダメでした。
Sheet1 スタート B11=ポイント数 Sheet2 かけ算 Q4:Q21=記録欄 Sheet3 得点 このシートでの操作です。 F24=解答
Sub 交代Click()
Dim r As Variant If Range("C31").Value <> "" And Range("B11").Value <> "" Then r = Application.Match(Range("C31").Value, Range("Q4:Q21"), 0) If IsError(r) Then Exit Sub Range("Q4:Q21").Cells(r).End(xlToRight).Offset(, 1).Value = Range("B11").Value End If
If Range("K1").Value <> "" And Range("B11").Value <> "" Then r = Application.Match(Range("K1").Value, Range("P4"), 0) If IsError(r) Then Exit Sub
Range("P4").Cells(r).End(xlToRight).Offset(, 1).Value = Range("B11").Value
End If
Sheets("スタート").Range("A1") = "" Sheets("かけ算").Range("F24").MergeArea.ClearContents Sheets("スタート").Activate ActiveWorkbook.Save
End Sub
< 使用 Excel:Excel2010、使用 OS:Windows10 >
どうでもいい話なんですが、
> マクロボタンの 「次の人と交代します。」をクリックで
列をなして1台のパソコンに並んで待ってる人が居るのですか?
「終了」とか「クリア」とかの方が言葉としてよくないですか?^^;
で、本題ですが、
>Q1 「スタート」シートヘ戻らなくなってしまった。(戻っていた)
戻っていたコードと見比べたら何かわかりませんか?
同じだよーということなら、ファイルが壊れてまともに動かないとか?
>Q2 「得点」シートの、登録番号(C31)を消してから
その操作をマクロの記録してみては?
(間違っても、スペースを入力したり「""」と入れたり「'」と入れたりして消さないように。
それは見えない文字を入力しているだけで、値をクリアしてることになりませんから。)
(まっつわん) 2016/10/27(木) 09:22
(まっつわん) 2016/10/27(木) 09:22 さん:
早々にありがとうございます。
◎ 複数台のPCで、並んで操作をします。2分間の競争で「ポイント」を競うようなイメージです。
◎ これから、もう一度「旧ファイル」=正常に作動の から、やり直してみますが、テンキーから C31に「入力」した番号を「消す」為の操作についてお尋ねをします。前述のコードの、どこの行に どんな「記述」をするのか? VBAは素人で、ご教示を頂いて「完成」しているものです。 (やま) 2016/10/27(木) 09:51
て、テンキーから???
んと、該当セルに矢印キーで移動し、Deleteキー押下でセルの値がクリアされます。
>前述のコードの、どこの行にどんな「記述」をするのか?
然るべきタイミングの行の間に、
「マクロの記録」で得られたコードを記述してください。
>VBAは素人で、ご教示を頂いて「完成」しているものです。
素人だろうと玄人だろうと、プログラムを作っているのはあなたです。
あなたの意思で、あなたの意図をコードに書いてください。
マクロの記録の参考URL>>
http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_01.html
http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_020.html
>>Match関数がエラーしてExit Subとなっていないか?
あぁ、ほんとですねぇー
ブレークポイントを設置して、
http://www.239-programing.com/excel-vba/basic/basic022.html
ステップ実行をして、
http://hp.vector.co.jp/authors/VA016119/step/step01.html
Sheets("スタート").Activate
の行が実行されているか確認してみてください。
(まっつわん) 2016/10/27(木) 10:17
ポイント数はC11?,B11? 得点記録=ポイント数?
コードを走らせてみましたが、(シート名を追記してから)
Q1 少なくともスタートシートへは移動しました。 Sheets("スタート").Activate
Q2 Range("C31").ClerContents シート名を記載し、スペル間違いを修正したら消えませんか?
(素人) 2016/10/27(木) 11:10
(素人) 2016/10/27(木) 11:10 さん:
◎ ありがとうございます。ご指摘の通りでして、「シート名」無で記述のみでした。 単純に「記述を追加」しただけです。 ◎ 返答と「追加のご教示」とが、バッティングして、遅くなりました。 現状=下記が、すべてのコードです。得点=ポイント数 B11 です。 ポイント数=得点の記録は「正常」です。 よろしくお願いします。
Public ResultCnt As Long Sub スタート_Click() ResultCnt = 0 With ActiveSheet Range("A1").Value = Now + TimeValue("00:02:00") Application.OnTime Range("A1").Value, "計算やめ" End With With Worksheets("かけ算").Select Range("F24").Activate End With End Sub
Sub 計算やめ()
MsgBox " や め" With Worksheets("得点") .Select With .Range("B11") .Value = ResultCnt .Activate End With End With End Sub
Sub タイム解除() Application.OnTime Range("B11").Value, "計算やめ", , False End Sub
Sub 交代Click()
Dim r As Variant If Sheets("得点").Range("C31").Value <> "" And Sheets("得点").Range("B11").Value <> "" Then r = Application.Match(Sheets("得点").Range("C31").Value, Sheets("得点").Range("Q4:Q21"), 0) If IsError(r) Then Exit Sub Sheets("得点").Range("Q4:Q21").Cells(r).End(xlToRight).Offset(, 1).Value = Sheets("得点").Range("B11").Value
End If
If Range("K1").Value <> "" And Range("B11").Value <> "" Then r = Application.Match(Range("K1").Value, Range("P4"), 0) If IsError(r) Then Exit Sub
Range("P4").Cells(r).End(xlToRight).Offset(, 1).Value = Range("B11").Value
End If
Sheets("得点").Range("C31").ClearContents Sheets("スタート").Range("A1") = "" Sheets("かけ算").Range("F24").MergeArea.ClearContents Sheets("スタート").Activate ActiveWorkbook.Save
End Sub
(やま) 2016/10/27(木) 12:11
素人の私には何をしようとしているのか読み取れませんが、
スタートボタンを押して、2分後に「やめ」のメッセージを出す様にされていますね。
「交代」のボタンもあるのですか?タイム解除のボタンも?
いずれにしても、今のこのコードでは走らない様な気がします。
登録番号の役割は何ですか?記録欄との関係は?
今まで使用出来ていたコードも書いて頂けると、
どこで問題が生じたのかわかりやすいと思います。
スタートシートに戻らないとか、登録番号が消えないとかより、
他に問題があるように思います。
上級者の登場を待ちたいと思います。
(素人) 2016/10/27(木) 13:29
まっつわん) 2016/10/27(木) 10:17sann: (mm) 2016/10/27(木) 09:27 さん: 素人) 2016/10/27(木) 13:29 さん:
お手数を煩わせてしまい恐縮です。 ボタンは、「スタートシート」のスタートと「得点シート」の「交代」の2個です。 もう一度、「正常ファイル」から、「挑戦」してみます。 ありがとうございました。 (やま) 2016/10/27(木) 13:56
◎ 「正常」ファイルに、追加記述をするときに勘違い(記憶ミス)をしていました。 P3セルの右列にどんどん「得点記録」がされるコードをそのままにしておいて 新たに「登録番号」で名前を呼び出し「名前=得点」の表を作成し、記録していました。
得点シートの(C31)に、テンキーから入力された「番号」を消してから「スタート」画面へ行きたいが Sheets("得点").Range("C31").clearContets この行で「デバックしますか」のエラーです。 これを、削除した状態では、すべて「順調」に流れます。記録・スタートへ。 追加記述コードと 入力 行 (箇所)についてご教示ください。
Sub 交代Click()
Dim r As Variant If Range("C31").Value <> "" And Range("B11").Value <> "" Then r = Application.Match(Range("C31").Value, Range("Q4:Q21"), 0) If IsError(r) Then Exit Sub Range("Q4:Q21").Cells(r).End(xlToRight).Offset(, 1).Value = Range("B11").Value
End If Sheets("得点").Range("C31").clearContets Sheets("スタート").Range("A1") = "" Sheets("かけ算").Range("F24").MergeArea.ClearContents Sheets("スタート").Activate ActiveWorkbook.Save
End Sub
(やま) 2016/10/27(木) 15:49
あと、過去ログから、かけ算シートに次の様なコードは書かれていますか?
(最終コードかどうかは知りません)
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ResultCnt As Long Dim RndStr As Long Dim Result As String If Target.Row = 24 And Target.Column = 6 Then Result = IIf(Range("B7").Value * Range("I7").Value = Range("F24").Value, "◎", "?") Range("L24").Value = Result If Result = "◎" Then ResultCnt = ResultCnt + 1 Randomize RndStr = Int(120 * Rnd + 1) If ActiveSheet.Name = "かけ算" Then Range("A13").Value = RndStr Range("F24").Select End If End If End Sub
(素人) 2016/10/27(木) 16:07
Sheets("得点").Range("C31").『clearContets』
ここでClearの頭文字が大文字になってないということはタイプミスがあるということです。
確認してください。
全部小文字で入力して、次の行に移った時に、
頭文字が大文字になるかならないかで、タイプミスが発見できます。
Sub 交代Click()
Dim r As Long
On Error GoTo WayOut r = WorksheetFunction.Match(Range("C31").Value, Range("Q4:Q21"), 0) On Error GoTo 0
Range("Q4:Q21").Cells(r).End(xlToRight).Offset(, 1).Value = Range("B11").Value Sheets("得点").Range("C31").ClearContents Sheets("スタート").Range("A1").ClearContents Sheets("かけ算").Range("F24").ClearContents
Application.Goto Sheets("スタート").Range("A1") ThisWorkbook.Save
WayOut:
End Sub
他は見てません。
(まっつわん) 2016/10/27(木) 16:16
(素人) 2016/10/27(木) 16:07 さん:
◎ 下記のとおりです。お手数をかけますが、よろしくお願いします。
Private Sub Worksheet_Change(ByVal Target As Range) Dim RndStr As Long Dim Result As String If Target.Row = 24 And Target.Column = 6 Then Result = IIf(Range("B7").Value * Range("I7").Value = Range("F24").Value, "◎", "?") Range("L24").Value = Result If Result = "◎" Then ResultCnt = ResultCnt + 1 Randomize RndStr = Int(120 * Rnd + 1) If ActiveSheet.Name = "かけ算" Then Range("A13").Value = RndStr Range("F24").Select End If End If
(やま) 2016/10/27(木) 16:28
(まっつわん) 2016/10/27(木) 16:16 さん:
◎ ありがとうございます。下記の行で「エラー」でした。お願いします。
Sheets("得点").Range("C31").ClearContents
(やま) 2016/10/27(木) 16:30
まっつわんさんと私の指摘を見てくれましたか?
Sheets("得点").Range("C31").clearContetsのClearContentsのスペルミスです。
スペルを直したのにエラーになるところじゃありません。
よろしくお願いしますね。
(素人) 2016/10/27(木) 16:40
あと、こういうエラーの原因を調べることをデバッグと言い、自分でやるべき事です。人にやらせては駄目。ましてや、命令の打ち間違いを見つけられてしまうなんて、プログラミングする人にとって恥ずかしい事なのだ、ということを肝に銘じてください。(私はよく、人に尻を拭かせる、と表現します)
で、よく間違えるのが、まっつわんさんの指摘したような、命令の打ち間違い。この場合、「オブジェクトは、このプロパティまたはメソッドをサポートしていません。」というエラーになります。知らない命令を書いているのだから、指摘通りの間違いですね。
次に、シート名が実在しない場合、「インデックスが有効範囲にありません。」となります。ほら、私は推測で2つもエラーメッセージを書きましたが、貴方は実際に出たメッセージを1つ書けば良いだけだったのですよ? 既に2倍以上の手間をかけさせている訳です。 人に頼りすぎないようにお願いしますね。
(???) 2016/10/27(木) 16:49
↑でエラーになるんですか?
じゃぁ、エラーメッセージも横着せずにちゃんと全部書いてください。
エラーが出るなら、
エラーメッセージとエラーになった行はセットで提示するのは最低限の基本。
回答側には、あなたのパソコンが見れないのですから。。。
そして、エラーメッセージそのままで検索かけると、
大抵似たようなことで困っている人の質問が見つかるので、
それで解決することは多いし、
出来ればそれくらいチェックしてから質問もして欲しいかも。
最初はなかなか難しいけど検索が上手になるのも、
問題が早く解決して掲示板で聞くよりいいですよ^^
(まっつわん) 2016/10/27(木) 16:53
よろしくお願い致します。
(素人) 2016/10/27(木) 17:02
では失礼致します。
(素人) 2016/10/27(木) 17:08
(まっつわん) 2016/10/27(木) 16:53 さん:
◎ 大変失礼をしました。マナーも理解できていないのに「質問」で申し訳ありません。
Microsoft Vissual Basic
実効時エラー '1004':
結合されたセルの一部を変更することはできません。
以上ですが? ここのことでしょうか? よろしくお願いします
(やま) 2016/10/27(木) 17:11
「結合されたセルの一部を変更することはできません。」
と手持ちのスマホで調べてみたら、
候補として最初の方に下記質問サイトがありました。
(http://oshiete.goo.ne.jp/qa/1411049.html)
Sheets("得点").Range("C31").ClearContentsでこのエラーが
発生したのは、セルC31が結合されたセルだからということですよね。
すでに、
Sheets("かけ算").Range("F24").MergeArea.ClearContents
と書いていらっしゃいます。
(ラビット) 2016/10/27(木) 18:02
結合になっているセルのクリアは、以下のコードでも可能です。
Sheets("得点").Range("C31").Value = Empty
(β) 2016/10/27(木) 18:03
(ラビット) 2016/10/27(木) 18:02さん: (β) 2016/10/27(木) 18:03 さん:
◎ ありがとうございました。 解決しました。感謝です!
セルの結合=老人会での使用なので、大きく表示を「質問」に付して おけば、早く解決したのですね。 夕方までの「ご教示」には、大変失礼をしてしまいました。 (やま) 2016/10/27(木) 19:01
昨日は、何度もご教示を頂きありがとうございました。昨夜、お陰様で解決しました。 今回は、質問の仕方にも「不適際」が幾つかあり、反省点がありました。
◎ コードは、半角英数で入力し、「改行」で、頭文字が大文字に代われば「スペル」良し。
◎ 質問のポイントをしっかりと「表現」すること。
多数の皆様の、ご教示に感謝致しております。
(やま) 2016/10/28(金) 08:17
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.