昨日、空白修正のマクロの質問をしたのですが
それを応用し、様々なセルで空白があった場合『未記入』と入力するマクロを組もうとしています。
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
したい内容としては、各セルそれぞれに空白があった場合、未記入と入力する処理です。
ですが、上記を実行すると、読み込みはしてるようなのですが、結果を確認すると
空白部分に入力がされていない状態になってしまいます。
どのようにすれば望んだ処理になるかご教授願えますでしょうか。
よろしくお願い致します。
No.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
お礼を書いたつもりだったのですが、反映されておりませんでした。
遅くなってしまい大変申し訳ありません。
ご教授いただいたもので無事望みどおりの処理を行うことができました。
SelectCaseに関してはより理解を深め、回答者様の回答を参考に精進していこうと思います。
ありがとうございました。
No.2
- 回答日時:
補足がありましたが、それは理解できます。
ループもしてますしね。
しかし、bufをSelect Caseの条件式として指定する必要性はどこにもありません。
よって、
Select Case buf
を
Select Case True
に変えれば済むでしょう。
補足への更なる回答ありがとうございます。
ご指導どおり、Trueと書き換えて実行したところ、やはり空白への記入が確認できませんでした。
お手数おかけして申し訳ございません。
No.1
- 回答日時:
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
という書き方で実現します。
申し訳ございません、土台となる知識がなく、私の質問そのものが見当違いとなっているかもしれません。
具体的に行いたい処理としては
『大量のエクセルのアンケートファイルがあり、そちらの回答の全ての空白部分に未記入という入力をしたい』というものです。
そもそも入力ができてないのか、入力したあとの保存ができてないのか、その他どのような要因で思い通りの処理ができてないのかが見当もつかない状況です。
もしよろしければさらなるご指導をお願いできますでしょうか。
よろしくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) excel2021で実行できないマクロ。どこを直したらいいのか 2 2022/03/28 03:40
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Excel(エクセル) vba userformで漢字を全角カタカナに 2 2022/07/24 15:38
- Visual Basic(VBA) 他のシートからコピーする下記マクロで貼付け位置をWorksheets(1).Range("A3")の 8 2023/01/30 18:48
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) 配列の勉強をしています。使用する変数の意味、検索条件の書き方が難しいです。 2 2022/09/15 14:06
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) Sheet3から2つの条件でオートフィルターで抽出した個数をSheet2へ入力するマクロで、一つ目の 4 2023/01/12 23:40
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
敬語 「記入しなくて結構です」...
-
意味の違い(記入事項、記入項...
-
エントリーシートの所属サーク...
-
間違えやすいアルファベットと...
-
レ点の記入の指示
-
銀行等の番号札、どのタイミン...
-
N/Aと似たような意味の略語を教...
-
wordの青文字
-
緊急時の家族等連絡先に父と母...
-
失礼のない言葉使いは?
-
「よろしければ」と「よろしか...
-
パスポート内の住所等記入は日...
-
入社書類の血液型記入のしかた
-
~の上
-
INVOICE & PACKING LISTの2枚目...
-
複写カーボンを用いた書類につ...
-
どなたか教えて下さい。誘導灯...
-
路線名
-
建築業をしているものなのです...
-
履歴書の部活動等の欄について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
敬語 「記入しなくて結構です」...
-
エントリーシートの所属サーク...
-
意味の違い(記入事項、記入項...
-
間違えやすいアルファベットと...
-
wordの青文字
-
~の上
-
申込書に”読めない字”を書くお...
-
失礼のない言葉使いは?
-
会社の部署名が少し変更になった時
-
履歴書のボランティア・社会活...
-
緊急時の家族等連絡先に父と母...
-
企業先で頂いた一枚しかない自...
-
INVOICE & PACKING LISTの2枚目...
-
エクセルでひとつ上のセルを勝...
-
レ点の記入の指示
-
パスポート記入例 「渡航先コ...
-
「よろしければ」と「よろしか...
-
履歴書の志望動機欄の記入につ...
-
VAT numberとは?
-
以前勤務していた会社に提出す...
おすすめ情報
ちなみに上記はSheet1A1にフォルダのアドレスを入力しており
その指定フォルダ内の全てのエクセルファイルに適用しようとしています