『記録したマクロについて』(ちくりんぼう) いつもお世話になります。 早速ですが、記録したマクロについて教えて下さい。 ツール → ユーザー設定 → ツールバータブ → フォーム → チェックボックス を使い、合否判定をするチェックシートを作ろうと思っています。 チェックボックスの『合格』にチェックした時には、入力不要箇所(不合格の時に入力する場所)を 結合したり、文字を消したり、チェックボックスを消したり・・・etc また、チェックボックスの『不合格』にチェックした時には、さらに追加検査を行い記入する。 といった作業を行います。 今回は、上記の『合格』した時の作業をマクロの記録を使って記録したのですが、 『合格』のチェックボックスを実際にチェックすると、何か画面がパチパチパチとなってちょっと時間がかかります。 これは記録したマクロをそのまま作業してくれているのだと思うのですが、『合格』を クリックしたらすぐに結果が反映される様に記録したマクロをダイエットさせる事は可能でしょうか? ご教授下さい。宜しくお願いいたします。 ↓記録したマクロです。↓ Sub チェック629_Click() ' ' Macro1 Macro ' マクロ記録日 : 2006/8/15 ユーザー名 : ' ' Range("E30:I33").Select Selection.ClearContents With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .Orientation = 0 .AddIndent = False .ShrinkToFit = False End With Selection.Merge ActiveSheet.Shapes("Line 602").Select Selection.Delete ActiveSheet.Shapes("Check Box 636").Select Selection.Delete ActiveSheet.Shapes("Check Box 637").Select Selection.Delete With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = False .Orientation = 0 .AddIndent = False .ShrinkToFit = False .MergeCells = True End With With Selection.Font .Name = "MS Pゴシック" .FontStyle = "標準" .Size = 12 .Strikethrough = False .Superscript = False .Subscript = False .OutlineFont = False .Shadow = False .Underline = xlUnderlineStyleNone .ColorIndex = xlAutomatic End With ActiveCell.FormulaR1C1 = "第一サンプルで合格の為、第二サンプル測定の必要無し" ActiveCell.Characters(1, 2).PhoneticCharacters = "ダイイチ" ActiveCell.Characters(8, 2).PhoneticCharacters = "ゴウカク" ActiveCell.Characters(11, 1).PhoneticCharacters = "タメ" ActiveCell.Characters(13, 2).PhoneticCharacters = "ダイニ" ActiveCell.Characters(19, 2).PhoneticCharacters = "ソクテイ" ActiveCell.Characters(22, 2).PhoneticCharacters = "ヒツヨウ" ActiveCell.Characters(24, 1).PhoneticCharacters = "ナ" Range("E30:I33").Select End Sub ---- こんばんは。 何をしているかよくわからなかったので、とりあえずセレクトをなくしてみましたが・・   どうでしょう? (SHIOJII) Sub チェック629_Click() Application.ScreenUpdating = False With ActiveSheet .Shapes("Line 602").Delete .Shapes("Check Box 636").Delete .Shapes("Check Box 637").Delete With .Range("E30:I33") .Merge .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter With .Font .Name = "MS Pゴシック" .FontStyle = "標準" .Size = 12 End With .FormulaR1C1 = "第一サンプルで合格の為、第二サンプル測定の必要無し" .Characters(1, 2).PhoneticCharacters = "ダイイチ" .Characters(8, 2).PhoneticCharacters = "ゴウカク" .Characters(11, 1).PhoneticCharacters = "タメ" .Characters(13, 2).PhoneticCharacters = "ダイニ" .Characters(19, 2).PhoneticCharacters = "ソクテイ" .Characters(22, 2).PhoneticCharacters = "ヒツヨウ" .Characters(24, 1).PhoneticCharacters = "ナ" .Phonetics.Visible = True End With End With Application.ScreenUpdating = True End Sub ---- SHIOJII様ありがとうございました。 記録したマクロでも、いらないコード?を省いて軽くしてやればいいって事ですね。 実際にコードをひとつづつ起動させながら、作業内容を確認する事って可能でしょうか?                                            ちくりんぼう ---- F8を押すことにより確認できますよ。 その他、ブレイクポイントを設定することにより その場所で一時中断させることも可能です。 http://www.v-aid.org/nakatu/exvba/2003/04/menu.html 一応、やり方の記載されたHPをリンクしておきます。 http://miyahorinn.fc2web.com/vbabegin/index.html こちらのサイトも参考にして下さい。 Lesson 5 くらいか〜 (kenbou) ---- kenbou様ありがとうございます。 今から勉強させていただきます。                 (ちくりんぼう) ---- やりました! 上の様なだらだらした長いコードをここまでダイエットさせる事が出来ました(^_^) Sub チェック629_Click() Range("E30:I33").Select Selection.ClearContents Selection.Merge ActiveSheet.Shapes("Check Box 636").Delete ActiveSheet.Shapes("Check Box 637").Delete With Selection .VerticalAlignment = xlCenter End With With Selection.Font .Size = 12 .FontStyle = "標準" End With ActiveCell.FormulaR1C1 = "第一サンプルで合格の為、第二サンプル測定の必要無し" End Sub でも、新しい問題が・・・・(^へ^;) 間違ってチェックをいれてしまった時に、チェックを外したら元の状態に戻したいのですが戻せません。 間違ってチェックをいれてしまっても、チェックを外したら元の状態に戻す事は可能でしょうか? 宜しくご教授下さい。             (ちくりんぼう) ---- みやほりんさんのHPはご覧いただけましたか? Selectは出来るだけしない方が良いです。 チラつく原因です。 例えばRange("E30:I33").ClearContents とするほうが良いと思われます。その下にもSelectionが続くのでwithで全部 行ってしまわれは方が、良さそうですね。 基本的にはVBAで実行してしまった物は元には戻せません。 他のシートにバックアップしておくとか、コマンドボタンで実行させるとかでしょうか。 でも、保存しなしに終了なんで、苦肉の策も・・・ Sub チェック629_Click() ActiveSheet.Shapes("Check Box 636").Delete ActiveSheet.Shapes("Check Box 637").Delete With Range("E30:I33") .ClearContents .Merge .VerticalAlignment = xlCenter .Font.Size = 12 .Font.FontStyle = "標準" .FormulaR1C1 = "第一サンプルで合格の為、第二サンプル測定の必要無し" End With End Sub (kenbou)こうか。 ---- kennbou様 ありがとうございました。 基本的にはVBAで実行してしまった物は元には戻せません。 >初めて知りました。ありがとうございました。                        (ちくりんぼう) ---- お世話になります。 以前ここで、"VBAで実行してしまった物は元には戻せません。" と聞いて、そっかぁ。じゃぁしゃぁないなぁ。って思ってたのですが、 やっぱり、間違ってクリックしてしまう事も想定されますので、1回くらいは 確認して貰う方がいいかと思い、メッセージボックスで確認を促す様にしようと思って 下記コードを追加してみたのですが、キャンセルの時は上手くいきますが、OKの時に 思い通りの作業をしてくれません。(キャンセル時と同じ作業になってしまってる) コードの記述が悪いのでしょうか?ご教授下さい。宜しくお願い致します。 Sub チェック587_Click() MsgBox "本当に合格ですか?" & Chr(13) & Chr(10) & "『OK』をクリックすると取り消しできません", vbOKCancel + vbQuestion, "確認" If MYBTN = vbOK Then Range("E22:I25").Select Selection.ClearContents Selection.Merge ActiveSheet.Shapes("Check Box 593").Delete ActiveSheet.Shapes("Check Box 594").Delete ActiveCell.FormulaR1C1 = "第一サンプルで合格の為、第二サンプル測定の必要無し" Range("E22:I25").Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter End With Selection.Font.Italic = False With Selection.Font .Name = "MS Pゴシック" .Size = 12 .Underline = xlUnderlineStyleNone .ColorIndex = xlAutomatic End With Else MsgBox "キャンセルします" End If End Sub (ちくりんぼう) ---- MYBTNの宣言を忘れているみたいです。 Dim MYBTN As VbMsgBoxResult MYBTN = MsgBox("本当に合格ですか?" & Chr(13) & Chr(10) & "『OK』をクリックすると取り消しできません", vbOKCancel + vbQuestion, "確認") (ROUGE) ---- ROUGE様 ありがとうございました。 >MYBTNの宣言を忘れているみたいです。 っていうかσ(・ω・)宣言とかいまいちわかってないんですよね。(^-^;) もっと勉強します。 本当にありがとうございました。┏○ペコッ (ちくりんぼう) ---- (kenbou)さんのコメントにあるように Selectionをやめた形で記載するのも勉強して見るといいかも しれませんね。 (kenbou)さんがせっかくコメントをくれているのですが そのあとの記載でいかされてないようだったので。。。(横道) ---- この件についてもう一度質問させて下さい。 チェックボックスの『合格』をクリックした時にメッセージボックスを出し、 メッセージボックスの『キャンセル』を選択した時には、『合格』を取り消す為、 初めにチェックしたチェックボックスの「レ点」を取り消したいのですが、 そういった事はできますか?(現在はキャンセル後も『合格』にチェックが入ったままです) 宜しくご教授下さい。 (ちくりんぼう) ---- ifは理解してますよね。 ActiveSheet.OLEObjects("CheckBox1").Object.Value = True でチェックが入りFalseでチェックが外れます。 >っていうかσ(・ω・)宣言とかいまいちわかってないんですよね。(^-^;) 宣言もしていませんが、上では代入がされていないですよね。 (kenbou) ---- kenbou様 いつもありがとうございます。 >ifは理解してますよね。 実は、まだまだ理解できておりません。 先程ヒントを頂き、分からないながらに試してみましたが、 どこに?どのように?が分かっていない為、思うように出来ません。 もう少しヒントを頂けないでしょうか? 宜しくお願い致します。 (ちくりんぼう) ---- If MYBTN = vbOK Then 真の場合の処理 Else 偽の場合の処理 end If となります。 (kenbou) ---- kenbou様 遅くまでお付き合い頂きありがとうございます。 上記ヒントを元に、私なりに考え下記の場所に追記致しましたがダメでした。 偽の場合の処理のコードの書き方が何かおかしいのでしょうか?それとも場所? ん〜(T_T) Sub チェック587_Click() Dim MYBTN As VbMsgBoxResult MYBTN = MsgBox("本当に合格ですか?" & Chr(13) & Chr(10) & "『OK』をクリックすると取り消しできません", vbOKCancel + vbQuestion, "確認") If MYBTN = vbOK Then ActiveSheet.OLEObjects("CheckBox1").Object.Value = True Range("E22:I25").Select Selection.ClearContents Selection.Merge ActiveSheet.Shapes("Check Box 593").Delete ActiveSheet.Shapes("Check Box 594").Delete ActiveCell.FormulaR1C1 = "第一サンプルで合格の為、第二サンプル測定の必要無し" Range("E22:I25").Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter End With With Selection.Font .Name = "MS Pゴシック" .Size = 12 .Underline = xlUnderlineStyleNone .ColorIndex = xlAutomatic End With Else: MsgBox "キャンセルします" MYBTN = vbCancel = False End If End Sub (ちくりんぼう) ---- 場所はいいと思いますが >ActiveSheet.OLEObjects("CheckBox1").Object.Value = True >でチェックが入りFalseでチェックが外れます。 と書きました。 >MYBTN = vbCancel = False これは違うんではないですか? (kenbou) ---- あれから色々考えてみましたが基本が無い為全く分かりません。 どなたかコードの記述をお願い出来ませんか? 宜しくお願い致します。 (ちくりんぼう) ---- 中身を全く見ていないので、ヒントだけ。。。   >>ActiveSheet.OLEObjects("CheckBox1").Object.Value = True >>でチェックが入りFalseでチェックが外れます。  ↓ チェックが入る ActiveSheet.OLEObjects("CheckBox1").Object.Value = True   チェックが外れる ActiveSheet.OLEObjects("CheckBox1").Object.Value = False   追加で、もう一つヒントb   Sub test() If Range("A1") = 1 Then ActiveSheet.OLEObjects("CheckBox1").Object.Value = True Range("A1") = "" Else ActiveSheet.OLEObjects("CheckBox1").Object.Value = False Range("A1") = 1 End If End Sub   (キリキ)(〃⌒o⌒)b ---- >どなたかコードの記述をお願い出来ませんか? >宜しくお願い致します。 いい加減にしてくれ。入門書ぐらい読んでくれますか? ---- 上の名無しさんのコメントは何なのでしょう? 履歴を見る限りでは特にコメントもされていないようですし、ヒントを出された形跡も ない。 人を中傷する様なコメントを残しておいてニックネームすら書いてないし、、 ちくりんぼうさんのコメントを見る限りでは、 >あれから色々考えてみましたが・・・ 何日か?何時間か?は自分なりに考えて試されたのだと思います。 私自信も記録する程度しか出来ないので、ここで色んな人の質問や回答を拝見させて頂 勉強させてもらっています。 先生方はとても分かりやすく丁寧に教えて下さっているいいサイトだと思いますが、 こういったコメントを残す様な人がいるのはとても残念に思います。 最後に、つまらないコメントを残してしまい申し訳ありませんでした。   (吉田) ---- 吉田さん、こんにちわ^^   >何日か?何時間か?は自分なりに考えて試されたのだと思います。 σ(^o^;)もそう思います。 が、 ちくりんぼうさんは、残念ながら「頑張った結果」を、今回はご提示いただけませんでした。。。 残念ながらね・・・   ですので、σ(^o^;)も >どなたかコードの記述をお願い出来ませんか? >宜しくお願い致します。 に、引っかかった一人です。   ここは学校です。 勉強する場であって、質問者の希望通りに作成する(させる)場では無いと思いませんか? もし「依頼」であれば、お金を払ってそういった場所に「依頼」すればいいだけの事。   このサイトは、本当に親切な方が多く勉強になる場だと思います。   >いい加減にしてくれ。入門書ぐらい読んでくれますか? 少なくとも、言い方は別としてσ(^o^;)も同じ印象受けました。 (もちろん名無しさんを否定するものではありません。吉田さんもねb) 変数やIf・・・ 本当に勉強する(した)なら、すぐに調べられるとは思いませんか? 基本中の基本ではないでしょうか?   だから、σ(^o^;)は >どなたかコードの記述をお願い出来ませんか? に対して、 「ヒント」としたわけです。   ※ここは学校だから、こう言った意見のやりとりも大いにありだと思う。 (キリキ)(〃⌒o⌒)b