[[20161026203911]] 『コード記述の確認』(やま) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『コード記述の確認』(やま)

 小学生向けのくく練習ゲームらしきものを作成しています。						
 かなり前に、ここでご教示頂いて「正常に作動」していたファイルを利用して						
 「登録番号」を新設して、得点記録表に、ポイント数(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


Match関数がエラーしてExit Subとなっていないか?
確認方法:2つのIf IsError(r) Then Exit Sub をコメントアウトしてエラーするか否か確認する。
(mm) 2016/10/27(木) 09:27

 (まっつわん) 2016/10/27(木) 09:22 さん:

 早々にありがとうございます。

 ◎ 複数台のPCで、並んで操作をします。2分間の競争で「ポイント」を競うようなイメージです。

 ◎ これから、もう一度「旧ファイル」=正常に作動の から、やり直してみますが、テンキーから
     C31に「入力」した番号を「消す」為の操作についてお尋ねをします。前述のコードの、どこの行に
  どんな「記述」をするのか? VBAは素人で、ご教示を頂いて「完成」しているものです。
(やま) 2016/10/27(木) 09:51

>テンキーからC31に「入力」した番号を「消す」為の操作についてお尋ねをします。

て、テンキーから???
んと、該当セルに矢印キーで移動し、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


よくわからないのですが、
元々のコードに「登録番号」を新設された。それはSheets("得点")のRangeC31。
コードを見ると、Sheets("スタート")のRangeB11、Sheets("かけ算")のRange("Q4:Q21")を使っている様ですが、
シート名が記載されていません。これでは何をしているかわかりません。

ポイント数は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


ClearContentsのスペルミスです。

あと、過去ログから、かけ算シートに次の様なコードは書かれていますか?
(最終コードかどうかは知りません)

 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


>ありがとうございます。下記の行で「エラー」でした。お願いします。
> Sheets("得点").Range("C31").ClearContents

↑でエラーになるんですか?
じゃぁ、エラーメッセージも横着せずにちゃんと全部書いてください。

エラーが出るなら、
エラーメッセージとエラーになった行はセットで提示するのは最低限の基本。
回答側には、あなたのパソコンが見れないのですから。。。

そして、エラーメッセージそのままで検索かけると、
大抵似たようなことで困っている人の質問が見つかるので、
それで解決することは多いし、
出来ればそれくらいチェックしてから質問もして欲しいかも。
最初はなかなか難しいけど検索が上手になるのも、
問題が早く解決して掲示板で聞くよりいいですよ^^

(まっつわん) 2016/10/27(木) 16:53


???さん、まっつわんさん、素人がでしゃばり申し訳ありません。
今日は定時退社で明日は出張不在となります。

よろしくお願い致します。
(素人) 2016/10/27(木) 17:02


いやいや、素人さんはどんどんでしゃばってください。
そうやって他人の問題を調べていくうちに、いろいろ上達していきますよ。今後とも頑張ってくださいませ。
(???) 2016/10/27(木) 17:06

???さん、ありがとう御座います。
そう言って頂けると、励みになります。

では失礼致します。
(素人) 2016/10/27(木) 17:08


 (まっつわん) 2016/10/27(木) 16:53 さん:

 ◎ 大変失礼をしました。マナーも理解できていないのに「質問」で申し訳ありません。

 Microsoft Vissual Basic 

 実効時エラー '1004':

 結合されたセルの一部を変更することはできません。

 以上ですが? ここのことでしょうか? よろしくお願いします

(やま) 2016/10/27(木) 17:11


あー、セル結合しているのですね。メッセージ通りです。
結合したセル範囲で指定してみてください。「一部」を変えられないのだから、「全部」を変えるのです。
(???) 2016/10/27(木) 17:53

途中から失礼します。

「結合されたセルの一部を変更することはできません。」
と手持ちのスマホで調べてみたら、
候補として最初の方に下記質問サイトがありました。
(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.