Excel VBA質問箱 IV

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

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


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

【63632】Do While、For To 文がうまくいきません KOBUN 09/11/23(月) 14:57 質問[未読]
【63633】Re:Do While、For To 文がうまくいきませ... マクロマン 09/11/23(月) 15:01 発言[未読]
【63635】Re:Do While、For To 文がうまくいきませ... KOBUN 09/11/23(月) 17:16 質問[未読]
【63636】Re:Do While、For To 文がうまくいきませ... かみちゃん 09/11/23(月) 17:26 発言[未読]
【63634】Re:Do While、For To 文がうまくいきませ... かみちゃん 09/11/23(月) 15:05 発言[未読]
【63637】Re:Do While、For To 文がうまくいきませ... KOBUN 09/11/23(月) 17:30 質問[未読]
【63638】Re:Do While、For To 文がうまくいきませ... かみちゃん 09/11/23(月) 18:01 発言[未読]
【63647】Re:Do While、For To 文がうまくいきませ... KOBUN 09/11/24(火) 18:14 質問[未読]

【63632】Do While、For To 文がうまくいきません
質問  KOBUN  - 09/11/23(月) 14:57 -

引用なし
パスワード
   皆様、お世話になっております。
以下Do Whileで実行したいプロシージャがあるのですが、
Do Whileをパスして次ステップで終わってしまいます。
(MsgBoxにいってしまいます)
どうも条件文が悪いのか、それとも他に原因があるのか?
どなたかご教示頂ければ幸いです。
このプロシージャの目的・意図は、
Do Whileで特定セルにある文字列が入っていることを認識
→指定セルたちがブランクなら、それらのセルを赤くする
です。
どうかよろしくお願い致します。

Sub 入力漏れチェック1()
  Dim i As Integer
  Dim j As Integer
  Dim k As String
  
  i = 15
  j = 2
  k = FEAP
  
  
  On Error Resume Next
  
  Do While Worksheets("Publication List").Cells(i, 8) = k
  
  For j = 2 To 13
    Worksheets("Publication List").Cells(i, j).Interior.ColorIndex = xlColorIndexNone
    Worksheets("Publication List").Cells(i, j).SpecialCells(xlCellTypeBlanks).Interior.ColorIndex = 3
  
  Next j
  
  i = i + 1
  
  Loop
  
  MsgBox ("赤いセル箇所を入力して下さい。")

End Sub

【63633】Re:Do While、For To 文がうまくいきま...
発言  マクロマン  - 09/11/23(月) 15:01 -

引用なし
パスワード
   >On Error Resume Next
  
これをはずして実行するとどうなりますか?

【63634】Re:Do While、For To 文がうまくいきま...
発言  かみちゃん  - 09/11/23(月) 15:05 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>どうも条件文が悪いのか、それとも他に原因があるのか?

変数k の値は何ですか?
Option Explicit
をモジュールの先頭に記述して、確認してみてください。

>→指定セルたちがブランクなら、それらのセルを赤くする
>です。

Publication ListシートのH15セルがブランクになっていないとか?

【63635】Re:Do While、For To 文がうまくいきま...
質問  KOBUN  - 09/11/23(月) 17:16 -

引用なし
パスワード
   ▼マクロマン さん:
早速ありがとうございます。
On Error Resume Next
これをはずして実行してみましたが、
やはりDo Whileの次ステップで終わってしまいました。
On Error Resume Nextは、
「エラーが出ても無視して次ステップへ進む」と思ってましたが
違っていますか。

【63636】Re:Do While、For To 文がうまくいきま...
発言  かみちゃん  - 09/11/23(月) 17:26 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>やはりDo Whileの次ステップで終わってしまいました。

Publication ListシートのH15セルがブランクになっていないとか?

【63637】Re:Do While、For To 文がうまくいきま...
質問  KOBUN  - 09/11/23(月) 17:30 -

引用なし
パスワード
   ▼かみちゃん さん:
早速、ありがとうございます。
変数kですが、最初、文字列なのでStringを宣言していたのですが、
もしやと思って、Variantでやってみました。
でも変化無しでした。

→指定セルたちがブランクなら、それらのセルを赤くするです。
>Publication ListシートのH15セルがブランクになっていないとか?

Do While Worksheets("Publication List").Cells(i, 8) = k
で確かにH15に変数kが入っていました。
それで条件を満たしていたので次ステップに進んだのだろうと。
そこでH15をブランクにしたところ、
今度はCells(1,1)から処理が始まってしまってセル達一面が真っ赤に・・・。
For to で開始セルを指定していたはずなのに、何故でしょうか。
ご教示頂ければ、幸いです。

【63638】Re:Do While、For To 文がうまくいきま...
発言  かみちゃん  - 09/11/23(月) 18:01 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>そこでH15をブランクにしたところ、
>今度はCells(1,1)から処理が始まってしまってセル達一面が真っ赤に・・・。
>For to で開始セルを指定していたはずなのに、何故でしょうか。

SpecialCells
が単一セルになっているからだと思います。

  k = FEAP
というコードがよくわからないのですが、以下のようにすればいかがですか?
(For〜Nextを使う必要はありません)

Sub 入力漏れチェック2()
  Dim i As Integer
  Dim j As Integer
  Dim k As String
 
  i = 15
  j = 2
  k = FEAP
 
 
  On Error Resume Next
 
  With Worksheets("Publication List")
   Do While .Cells(i, 8) = k
     .Cells(i, j).Interior.ColorIndex = xlColorIndexNone
     .Cells(i, j).Resize(, 12).SpecialCells(xlCellTypeBlanks).Interior.ColorIndex = 3
     i = i + 1
   Loop
  End With
  MsgBox ("赤いセル箇所を入力して下さい。")

End Sub

【63647】Re:Do While、For To 文がうまくいきま...
質問  KOBUN  - 09/11/24(火) 18:14 -

引用なし
パスワード
   ▼かみちゃん さん:
こんにちは。KOBUNです。
ありがとうございます!
ご教示通りWithステートメントを使うと、すっきりしました。
また、動作もうまくいきそうです。
本当はもう少し内容が増えるので、またエラーが出るかもしれませんが、
ご教示頂ければ助かります。
(辞書と首っ引きで頑張ってますが・・・)

初心者で恐縮ですが、以下を教えて頂けますでしょうか。
Resize(, 12)を何故ここで使えるのかが分かりません。
.Cells(i, j).Resize(, 12).SpecialCells(xlCellTypeBlanks).Interior.ColorIndex = 3

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