Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


4898 / 13646 ツリー ←次へ | 前へ→

【53723】チェックボックスからの入力について peanuts 08/2/4(月) 22:48 質問[未読]
【53725】Re:チェックボックスからの入力について ハチ 08/2/5(火) 9:37 発言[未読]
【53729】Re:チェックボックスからの入力について peanuts 08/2/5(火) 11:24 回答[未読]
【53732】Re:チェックボックスからの入力について ハチ 08/2/5(火) 11:56 回答[未読]
【53739】Re:チェックボックスからの入力について peanuts 08/2/5(火) 13:31 お礼[未読]
【53730】Re:チェックボックスからの入力について Jaka 08/2/5(火) 11:29 発言[未読]
【53731】Re:チェックボックスからの入力について peanuts 08/2/5(火) 11:45 お礼[未読]

【53723】チェックボックスからの入力について
質問  peanuts  - 08/2/4(月) 22:48 -

引用なし
パスワード
   はじめまして。どなたか御教示下さい。

ユーザーフォームに9つのチェックボックスがあります。
それぞれのチェックボックスをチェックすることで、
セルD4からD12のセルにテキストを入力できるコードを組もうとしています。

チェックボックスをチェックする順番は特に決めておらず、
チェックした順番に上(D4)から順にテキストが入力され、
チェックを外すとその入力されたテキストがクリアーされます。

問題は、例えばD6に入力されたセルがチェックボックスを外して
空白セルになった場合、再度同じチェックボックスをチェックしたら、
その空白のセルに再度入力できるようにするには、どうしたら良いのでしょうか。
空白のセルは一つだけでなく、複数存在することもあり、その場合は
再度チェックした順に上からテキストが入力されるようにしたいのです。

下記のようなコードを見よう見まねで作成して実行してみましたが、
※部のコードが黄色くなり”該当するセルが見つかりません”というエラーが出てしまいます。

Private Sub CheckBox1_Click()
Dim kuuhaku As Variant
Dim mojiretsu As Object
Worksheets("data").Select
If CheckBox1.Value = True Then
※kuuhaku = Range("d4:d12").SpecialCells(xlBlanks).Select
With ActiveCell
.Value = "りんご"
End With
Else
For Each mojiretsu In Worksheets("data").Range("d4:d12")
If mojiretsu.Value Like "りんご" Then
mojiretsu.Value = ""
End If
Next mojiretsu
End If
End Sub

長文・乱文で申し訳ありませんが、宜しくお願い致します。

【53725】Re:チェックボックスからの入力について
発言  ハチ  - 08/2/5(火) 9:37 -

引用なし
パスワード
   ▼peanuts さん:
>For Each mojiretsu In Worksheets("data").Range("d4:d12")
>If mojiretsu.Value Like "りんご" Then
>mojiretsu.Value = ""
>End If
>Next mojiretsu

こちらでループの構文は理解されているようですので、
入力する方も、ループで処理すれば良いのでは?
上から順番に見ていって、空白だったら入力

【53729】Re:チェックボックスからの入力について
回答  peanuts  - 08/2/5(火) 11:24 -

引用なし
パスワード
   ▼ハチ さん:

御指摘有難うございます。
仰るように入力する方も同じように以下コードに修正してみました。

For Each kuuhaku In Worksheets("data").Range("d4:d12")
If kuuhaku.Value = "" Then
kuuhaku.Value = "りんご"
End If
Next kuuhaku

試しに動かしてみたところ、空白セル部にちゃんと”りんご”と入力されたのですが、空白セルが複数ある場合、すべての空白セルに”りんご”と入力されてしまいます。。。
何か繰り返し回数の変数が必要なのかもしれませんが、この場合どれを変数にすればよいのでしょうか。度々申し訳ありません。

【53730】Re:チェックボックスからの入力について
発言  Jaka  - 08/2/5(火) 11:29 -

引用なし
パスワード
   これSpecialCellsの落とし穴というかあまり知られてない現象かも。
状況によってエラーになったりしませんか?
(データの状態によるけど。)
データ状態が把握できないので、安全なのはD12の罫線でも何でも良いですから、
書式を変えておく、要するに使ったことがあるという形跡を残しておく。
SpecialCellsは、UsedRangeの範囲内でしかろくに動かないと言う事なんですが。

そうすれば、
Range("d4:d12").SpecialCells(xlBlanks).Value = "りんご"
でもかまいません。

ただ、SpecialCells該当するものがないとエラーになるから、
On Error Resume Next
でエラー回避。

追加
>kuuhaku = Range("d4:d12").SpecialCells(xlBlanks).Select
この書き方だと、エラーにならなかった場合、選択したかしなかったの結果しか入りません。
エラーの時は何も無いけど、ある場合の結果はTreuだけ。

【53731】Re:チェックボックスからの入力について
お礼  peanuts  - 08/2/5(火) 11:45 -

引用なし
パスワード
   ▼Jaka さん:

アドバイス助かります。
Jakaさんの仰るとおり状況によってエラーが出て、しかも発生に再現性がなく困っておりました。コードをコピーしても元のコードではエラーが出ないのに、コピー先のコードでだけエラーが出るといった現象も確認されました。

D12セルの罫線を変更したところ、確かにエラーが出なくなり動作的に安定している様子です。

ちょっと様子を見てみます。

【53732】Re:チェックボックスからの入力について
回答  ハチ  - 08/2/5(火) 11:56 -

引用なし
パスワード
   ▼peanuts さん:

>試しに動かしてみたところ、空白セル部にちゃんと”りんご”と入力されたのですが、空白セルが複数ある場合、すべての空白セルに”りんご”と入力されてしまいます。。。
>何か繰り返し回数の変数が必要なのかもしれませんが、この場合どれを変数にすればよいのでしょうか。度々申し訳ありません。

1つ目の空白が見つかったら、
ループを終了すれば良いと思います。

> For Each kuuhaku In Worksheets("data").Range("d4:d12")
> If kuuhaku.Value = "" Then
> kuuhaku.Value = "りんご"

Exit For

> End If
> Next kuuhaku

【53739】Re:チェックボックスからの入力について
お礼  peanuts  - 08/2/5(火) 13:31 -

引用なし
パスワード
   ▼ハチ さん:

有難うございました。

所定の箇所にExit Forを挿入してみたところ、
きちんと入力と消去が適正に出来ました。

助かりました。

4898 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free