電子書籍の厳選無料作品が豊富!

昨日、空白修正のマクロの質問をしたのですが
それを応用し、様々なセルで空白があった場合『未記入』と入力するマクロを組もうとしています。

Sub 空白修正マクロ()
Dim buf As String, i As Long
Dim j
buf = Dir(Sheets("Sheet1").Range("A1").Value & "\*.xls")
Do While buf <> ""
Workbooks.Open Worksheets("Sheet1").Range("A1").Value & "\" & buf
Select Case buf
Case Worksheets(1).Range("E6") = ""
Worksheets(1).Range("E6").Value = "未記入"
Case Worksheets(1).Range("H6") = ""
Worksheets(1).Range("H6").Value = "未記入"
Case Worksheets(1).Range("E41") = ""
Worksheets(1).Range("E41").Value = "未記入"
Case Worksheets(1).Range("E42") = ""
Worksheets(1).Range("E42").Value = "未記入"
Case Worksheets(1).Range("C47") = ""
Worksheets(1).Range("C47").Value = "未記入"
Case Worksheets(1).Range("C49") = ""
Worksheets(1).Range("C49").Value = "未記入"
Case Worksheets(1).Range("E47") = ""
Worksheets(1).Range("E47").Value = "未記入"
Case Worksheets(1).Range("E49") = ""
Worksheets(1).Range("E49").Value = "未記入"
Case Worksheets(1).Range("D50") = ""
Worksheets(1).Range("E50").Value = "未記入"
End Select
Application.DisplayAlerts = False
ActiveWorkbook.Save
ActiveWorkbook.Close
buf = Dir()
Loop
End Sub

したい内容としては、各セルそれぞれに空白があった場合、未記入と入力する処理です。
ですが、上記を実行すると、読み込みはしてるようなのですが、結果を確認すると
空白部分に入力がされていない状態になってしまいます。
どのようにすれば望んだ処理になるかご教授願えますでしょうか。
よろしくお願い致します。

質問者からの補足コメント

  • ちなみに上記はSheet1A1にフォルダのアドレスを入力しており
    その指定フォルダ内の全てのエクセルファイルに適用しようとしています

      補足日時:2016/05/19 16:20

A 回答 (3件)

> ご指導どおり、Trueと書き換えて実行したところ、やはり空白への記


> 入が確認できませんでした。
私がやったことは以下の通りです。
・マクロ用ブックを1つ用意。
・処理用ブックを3つ用意。
・それらブックをすべてD:\配下に設置。
・マクロ用ブックのA1に「D:」と入力。
提示されてるソースを貼りつけ、Select Case Trueに変更。

これで、処理用ブックの3つとも、E6に「未記入」と書き込まれました。
マクロを何度も実行することで、H6、E41、E42に「未記入」を書き込まれました。

ならないということは、処理用ブック内Sheet1のE6などが、空値ではなく、半角スペースなどが入ってる、文字が入っているけど文字色が白、などしているのではないでしょうか。

また、一度にすべてのセルに「未記入」と入ってほしいというものならば、Select CaseではなくIfを使ってください。
If Worksheets(1).Range("E6") = "" Then
Worksheets(1).Range("E6").Value = "未記入"
End If
If Worksheets(1).Range("H6") = "" Then
Worksheets(1).Range("H6").Value = "未記入"
End If
If Worksheets(1).Range("E41") = "" Then
Worksheets(1).Range("E41").Value = "未記入"
End If
If Worksheets(1).Range("E42") = "" Then
Worksheets(1).Range("E42").Value = "未記入"
End If
If Worksheets(1).Range("C47") = "" Then
Worksheets(1).Range("C47").Value = "未記入"
End If
If Worksheets(1).Range("C49") = "" Then
Worksheets(1).Range("C49").Value = "未記入"
End If
If Worksheets(1).Range("E47") = "" Then
Worksheets(1).Range("E47").Value = "未記入"
End If
If Worksheets(1).Range("E49") = "" Then
Worksheets(1).Range("E49").Value = "未記入"
End If
If Worksheets(1).Range("D50") = "" Then
Worksheets(1).Range("E50").Value = "未記入"
End If
    • good
    • 0
この回答へのお礼

お礼を書いたつもりだったのですが、反映されておりませんでした。
遅くなってしまい大変申し訳ありません。

ご教授いただいたもので無事望みどおりの処理を行うことができました。
SelectCaseに関してはより理解を深め、回答者様の回答を参考に精進していこうと思います。
ありがとうございました。

お礼日時:2016/05/20 09:29

補足がありましたが、それは理解できます。


ループもしてますしね。
しかし、bufをSelect Caseの条件式として指定する必要性はどこにもありません。

よって、
Select Case buf

Select Case True
に変えれば済むでしょう。
    • good
    • 0
この回答へのお礼

補足への更なる回答ありがとうございます。
ご指導どおり、Trueと書き換えて実行したところ、やはり空白への記入が確認できませんでした。
お手数おかけして申し訳ございません。

お礼日時:2016/05/19 16:51

Select Case buf


という記述は、
言いかえると、If buf = nnn Thenと同義です。
bufと、Case句に記されている値を比較します。

例えば、今回のコードの一部をif文で表現すると、以下になります。
If buf = (Worksheets(1).Range("E6") = "") Then
これは、『buf』と、『Range("E6")が空値かどうか』を比較しています。
結果、常に以下のIf文が成り立ちます。
If buf = True Then
bufはTrueではありませんから、Case内が処理されることはありません。

もし、条件が多く、先のCaseにヒットしたら以降を処理させたくないから、Select Caseで実現させたいということならば、
Select Case True
 Case Worksheets(1).Range("E6") = ""
 ・・・
End Case
という書き方で実現します。
    • good
    • 0
この回答へのお礼

申し訳ございません、土台となる知識がなく、私の質問そのものが見当違いとなっているかもしれません。
具体的に行いたい処理としては
『大量のエクセルのアンケートファイルがあり、そちらの回答の全ての空白部分に未記入という入力をしたい』というものです。

そもそも入力ができてないのか、入力したあとの保存ができてないのか、その他どのような要因で思い通りの処理ができてないのかが見当もつかない状況です。
もしよろしければさらなるご指導をお願いできますでしょうか。
よろしくお願い致します。

お礼日時:2016/05/19 16:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!