Excel VBAで空白セルをチェックする方法
- Excel VBAを使用して、選択範囲内の空白セルをチェックする方法を教えてください。
- 条件を満たす場合、メッセージを表示させたいです。
- A1からA3の範囲のみをチェックする場合、どのように記述すれば良いでしょうか。
- ベストアンサー
Excel VBA 空白セルをチェックする方法
こんばんは ある選択範囲でどれか1つのセルに空白があった場合 メッセージを表示させたいのですが、 リスト中に入力された範囲のすべてのセルをチェックしたいのです。 どのようにしたら良いのでしょうか。 A1~A3の範囲のみでしたら下記でよいのかな?と考えてみました。 VBA勉強中なのですが、なかなかうまくいきません。お力をお願い致します。 If IsEmpty(Range("a2:d2").Value) Then MsgBox "開始時刻が入力されていません。" Worksheets("Sheet1").Range("a2").Select
- mugigohan
- お礼率36% (48/133)
- その他([技術者向] コンピューター)
- 回答数2
- ありがとう数0
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
#1です。 >ある選択範囲でどれか1つのセルに空白があった場合 とあるので、調べたい範囲を選択した後、以下を実行しては? Sub bbb() Dim sel As Range For Each sel In Selection If IsEmpty(sel) Then MsgBox "開始時刻未入力" sel.Select Exit For End If Next sel End Sub ただ、範囲のすべてのセル、を知りたいということですからちょっと違ってるかもしれませんね。 でも、「チェックしたい」というのはやや曖昧です。どうしたいのでしょうか。 調べたい範囲を選択した上で、以下だったら該当セルだけ選択されます。 Sub ccc() Dim Rng As Range Set Rng = Selection Selection.SpecialCells(xlCellTypeBlanks).Select Set Rng = Nothing End Sub とか。 例えば、調べたい範囲を選択した後で、 Sub ddd() Dim sel As Range For Each sel In Selection If IsEmpty(sel) Then sel.Interior.ColorIndex = 4 End If Next sel ActiveCell.CurrentRegion.Cells(1, 1).Select End Sub としとけば空白の欄はとりあえず分かりますが。 (検査後、色を戻すようなことは適宜設定してください) >リストに入力された値が「n」行、B~F列の場合、 >その入力された行に空白がないかチェックするにはどのようにしたら>良いのでしょうか。 n行はデータを与えないといけないですね。 Sub eee() Dim Rng As Range Dim Flg As Boolean Dim n As Integer, c As Integer n = InputBox("何行目を検索?") Flg = False For c = 2 To 6 If IsEmpty(Cells(n, c)) Then Cells(n, c).Interior.ColorIndex = 6 Flg = True End If Next c If Flg = True Then MsgBox "開始時刻未入力" End Sub n に数字以外が入力された場合のエラー対応など色々細かいこともあるでしょうから適宜対応ください。
その他の回答 (1)
- soixante
- ベストアンサー率32% (401/1246)
範囲は適当ですけど Sub aaa() Dim sel As Range For Each sel In Range("a1:e10") If IsEmpty(sel) Then MsgBox "開始時刻未入力" sel.Select Exit For End If Next End Sub とかはどうでしょうか。
関連するQ&A
- 空白セルに●を入れたい
Excelのセル範囲(例:としてA1からC10)のセルを調べて、 空白のセルになにかの文字(例:●)を打ち込みたい場合のVBAの書き方を教えてください。 Sub セル埋め() Dim r As Range, i As Range Set r = Range("A1:C10") '範囲指定 If Intersect(r, Target) Is Nothing Then For Each i In r If i.Value = "" Then i.Value = "●" Next i End Sub この書き方にこだわっているわけではないので、もっと簡単なやり方でもけっこうです。
- ベストアンサー
- Visual Basic
- 空白のセルを行削除する。EXCELマクロなのですが・・
VBA初心者です。 データーをHPから、単純にコピーしてきて、 EXCELに貼り付けています。 フィルターをかけても、画像かなにかがセルに張り付いているのか、 空白行をすべて削除できません。 いろいろ試して(HPから、空白セルの行削除について書かれてあるマクロを貼り付けて)動いたのが、このVBAです。 しかし、遅いので、早いVBAに簡略できればいいのですが。。 大体、1000行ぐらいの文字を貼り付けて、3/1ぐらいが空白行です。A行のセルの空白のみを、削除したいのですが。 まったくの素人なので、わかりません。 どうかよろしくお願いいたします。 Sub 空白の削除() x% = Worksheets("sheet1").Range("A65536").End(xlUp).Row For i = x% To 1 Step -1 If Worksheets("sheet1").Cells(i, 1).Value = "" Then Worksheets("sheet1").Rows(i).Delete Next End Sub
- ベストアンサー
- オフィス系ソフト
- エクセルvbaでのセルの情報を貼り付け方法
vba初心者です。sheet1にあるセルの情報をsheet2にあるセルに貼り付けようと考えています。 下記のようにプログラムしました。 If Cells(Line, 6).Value = "" Then Cells(Line, 6).Value = "データがありません" Cells(Line, 5).Value GoTo コピー貼り付け End If コピー貼り付け: Cells(Line, 5).Copy 'コピーする Worksheets("輸入Parts").Range("A2").PasteSpecial Paste:=xlPasteValues '値を貼り付け 問題はコーピー貼り付けの箇所でRange("A2")ではなくA列の最初の空白のセルに貼り付けるようにしたいです。 どなたかお力をお貸しください。
- 締切済み
- Excel(エクセル)
- ExcelVBAで、広範囲セルの空白チェックをしたいと思います。
ExcelVBAで、広範囲セルの空白チェックをしたいと思います。 以下のようなExcelシートがあります。 ・10行目まではタイトル行 ・データ入力可能セル範囲はA11~AF65536 全てのデータ範囲を削除するために、以下のコードを作成しました。 動きとしては問題ないのですが、データが存在しない場合の 処理時間が長くなってしまいます。 Sub 全データ削除() Dim endrow As Long Dim mydelete As Integer Dim myrange As Range endrow = Range("A11").End(xlDown).Row For Each myrange In Range("A11:AF" & endrow) If myrange.Value <> "" Then GoTo 削除処理 End If Next myrange MsgBox "データがありません。" Exit Sub 削除処理: mydelete = MsgBox("全てのデータを削除しますか?", vbOKCancel) Select Case mydelete Case vbOK Rows("11:65536").Delete Range("D4").Formula = "=COUNTA(A11:A65536)" MsgBox "データを削除しました。" Exit Sub Case vbCancel MsgBox "キャンセルされました。" Exit Sub End Select End Sub データ範囲が65536行までになってしまうため時間がかかっているのだと思いますが、 回避方法がわかりません。 ご教授お願いいたします。
- ベストアンサー
- その他MS Office製品
- エクセルのVBAで悩んでいます。
いつもありがとうございます。 エクセルのVBAで悩んでいます。 セルの範囲指定をVBAで行いたいのです。 ただし、引数に数値変数を使用する為、Cellsプロパティを使います。 すると、離れている範囲の範囲指定が出来ないのです。 例えば、Rangeプロパティだと、 Range("A5:E5,A9:E32").Select こうなるところを、 A9:E32 を変数に置き換えたくて、 Range("A5:E5", Cells(g, 1), Cells(h, 5)).Select と、するとエラーが出ます。 VBAの前文は次の通りです。 Private Sub CommandButton1_Click() a = Me.TextBox1.Value b = Me.TextBox2.Value Set c = Range("a:a").Find(what:=a, LookIn:=xlValues, lookat:=xlWhole) Set d = Range("a:a").Find(what:=b, LookIn:=xlValues, lookat:=xlWhole) 'MsgBox c + d e = c.Address 'MsgBox e f = d.Address 'MsgBox f g = Range(e).Row MsgBox g h = Range(f).Row MsgBox h Range(Cells(g, 1), Cells(h, 5)).Select End sub よろしくお願い致します。
- 締切済み
- Windows XP
- VBA 選択したセルが空白であったらシートを削除
こんばんは!いつもお世話になっています。 選択したシート1のセル(C9)が空白であったら、選択したシートを削除するマクロ(VBA)を作りましたが、上手く作動しなくて困っています。 どうしたらよいのかよろしくお願い致します。 'シート1のセルC9を選択し、空白か判断する Sub セルの選択() Worksheets("Sheet1").Activate Range("C9").Select If Len(Application.Trim(ActiveCell)) = 0 Then MsgBox("空白セル") End If End Sub '現在アクティブなシートを削除する Sub DeleteWorksheet() Application.DisplayAlerts = False ActiveSheet.Delete Application.DisplayAlerts = True End Sub
- 締切済み
- その他(プログラミング・開発)
- VBAのセル空白探しは??????多々仕様なども含めて迷っている部分があるので助けてください
VBAで入力チェッカーを作っているのですが、仕様の部分でなやんでいます。 Private Sub CommandButton1_Click() Dim i As Long lastRow = Range("A65536").End(xlUp).Row For i = 10 To lastRow If Range("A" & i).Value = "" Then Range("A" & i).Value = ??? Exit For End If Next i End Sub USERがあるセルにデータを入力するとA列に5行ごと自動に値が入ります。 しかし、入力忘れで5行飛ばしたりはたまた10行空白が出来る場合があります。 その際のチェッカーの役割なのですが。。。 したから行を見ていってA10~最終行までの間でどこか空白があったら下から空白を探し空白箇所から5個上のセルの値を基本的にコピーをしていれる。 もし5個上のセルにも無かったら10個上みたいにやりたいのですがどうしたらよいでしょうか?
- ベストアンサー
- Visual Basic
- VBAで空白行を削除する
VBAでリストの空白行を削除するための適当なコードを探しているのですがどんぴしゃのものが中々見つかりません。ご教授下さい。 ブックBのシートBのリストにはA2~AN●まで値が入っています。 別のブックAからVBAで値を取り出し貼り付けています。 いくつかの方法を試しました。 (1)ブックを開いたときに空白行を削除 Sub Auto_Open() '空白行を削除 Dim lRow As Long Dim i As Long lRow = Cells(Rows.Count, 1).End(xlUp).Row Application.ScreenUpdating = False For i = lRow To 2 Step -1 If Cells(i, 1).Value = "" Then Range(i & ":" & i).Delete End If Next i Application.ScreenUpdating = True End Sub 5分以上砂時計のままで結局終わりません。 強制終了させ再度ブックを開くと空白行は削除されているのですが、こんな動作では使うことができません。 (2)ブックAの値を貼り付けた後、空白行を削除し上書き保存する Sub エクスポート() Application.ScreenUpdating = False Application.Calculation = xlCalculationManual Range(Cells(5, 7), Cells(79, 46)).Select Selection.Copy 'コピー Workbooks.Open Filename:="\\パス\ブックB.xlsm" '貼り付け先ファイルオープン Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False '貼り付け Dim lRow As Long Dim i As Long lRow = Cells(Rows.Count, 1).End(xlUp).Row Application.ScreenUpdating = False For i = lRow To 2 Step -1 If Cells(i, 1).Value = "" Then Range(i & ":" & i).Delete End If Next i Application.ScreenUpdating = True '空白行を削除 ActiveWorkbook.Save '上書き保存 Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True End Sub (3)空白行を削除の部分は以下のコードも試しました Worksheets("SheetB").Range("A1").Select Set currentCell = Worksheets("sheetB").Range("A1") Do While Not IsEmpty(currentCell) Set nextCell = currentCell.Offset(1, 0) If Not IsEmpty(currentCell) Then 'カレントセルが空白でなく、 If IsEmpty(nextCell) Then '次のセルが空白のとき nextCell.EntireRow.Delete End If End If Set currentCell = currentCell.Offset(1, 0) Loop '空白行削除 宜しくお願い致します。
- 締切済み
- Excel(エクセル)
- Excelのセルの比較について
Excelのマクロにてセルの比較を行っています。 A1に"123" A2をハイパーリンクに指定して"123"と表示しています。 表示形式はどちらも通貨で表示しています。 If Range(A1).Value <> Range(A2).Value Then MsgBox "同じではない" Else MsgBox "同じ" End If と比較しているのですが"同じではない"が表示されてしまいます。 試しに MsgBox Range(A1).Value と MsgBox Range(A2).Value を表示してみたところ、どちらも"123"と表示されました。 セルに表示されている値で比較するにはどうしたらいいのでしょうか?
- ベストアンサー
- オフィス系ソフト
- 空白セルと0値を識別させたい。(VBA)
すみません、誰か教えていただけますか。 シートの53、54、55行目にそれぞれ値入っています。 それを3行目にビジュアル的に表現させています。 55行目はセルの色で、53行目は数値があり同じ値が 続く部分の合計を出しています。 しかし、下記の記述ですと数値が0(変数D=0)の時に うまくいきません。空白セルと認識されてしまうと思います。 何か、良い方法があれば教えて頂けませんでしょうか。 宜しくお願いします。 Sub 表示() Dim a As Long Dim c As Long Dim D As Long Dim e As String Dim f As String c = 3 For a = 3 To 64 With Worksheets("Sheet1") If .Cells(53, a) <> .Cells(53, a + 1) Then .Range(.Cells(53, c), .Cells(53, a)).Select D = WorksheetFunction.Sum(Selection) e = D f = Selection(1).Offset(1, 0).Value G = Selection(1).Offset(2, 0).Value If D <> 0 Then Selection(1).Offset(-50, 0).Value = f + "//" + e .Range(.Cells(53, c), .Cells(53, a)).Offset(-50, 0).Select Selection.Interior.ColorIndex = G End If If Selection(1).Value = "" Then .Range(.Cells(53, c), .Cells(53, a)).Offset(-50, 0).Select Selection.ClearContents Selection.Interior.ColorIndex = xlNone End If c = a + 1 End If End With Next End Sub
- ベストアンサー
- オフィス系ソフト
補足
ご説明が不足して申し訳ありません。 リストに入力された値が「n」行、B~F列の場合、 その入力された行に空白がないかチェックするにはどのようにしたら良いのでしょうか。 宜しくお願い致します。