• ベストアンサー

VBAでセルが空白かどうかを調べたい(Excel)

bin-chanの回答

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.2

すみません。一部訂正です。 最初にセルA1を選択してください。 Lineの取得時の+2は削除してください。 Lineに使用されているセルの行が返るので「3」以下ならデータ行無しの判断です。 あと一点、LineはLongで宣言してください。

fuyu
質問者

補足

回答ありがとうございます。 D列以降にA~C列以上にデータが入っている場合が あるので、ActiveCellが使えない状況です。 何か他の方法はないでしょうか?

関連するQ&A

  • Excel2003でのVBA

    WindowsXPでExcel2003を使っています。 Excelにある表をマクロを使って編集したいと思ったのですが、セルの選択の設定で教えてほしい事があります。 まず、横A列~F列、縦1行~6行までの表があります。 A1セルは、空白。 B1セル~F1セルには、1~5の数字が入っています。(見出しなので全て入ってます。) A2セル~A6セルには、a~eのアルファベットが入っています。(見出しなので全て入ってます。) 表の中のデータは、ところどころにしか入っていなくて、全て埋まっていません。 また、横A列~F列というのは固定なのですが、縦1行~6行までという行数は変動します。 この表で、A2セルからF6セルまでを選択したいのですが、行が変動するのでA6とかF6とかでは指定できません。 Range("A2").Select Selection.End(xlDown).Select これで、A2セル~一番下の行(ここではA6セル)まで選択した後、F列まで(列の数は固定です。)選択するにはどうしたらよいのでしょうか? 右下のセルは、空白なので困っています。 Range(Selection, Selection.Next).Select こんなものを考えましたが、これでは一つ右隣しか選択できません。 これを少しいじればいいのではないかと思うのですが、全然違う方法でもかまいません。 どなたか教えていただけないでしょうか? 宜しくお願いします。

  • エクセルVBAで空白セルを削除する方法

    みなさん教えてください。 今エクセルVBAで、下記のようにのA列に空白セルがある場合にそのセルを削除し、 空白セルが無い場合何もしないと言うマクロを作っています(下記のように自動記録し ました)。 しかし、作成したマクロは、下記のようにA列に空白セルがない場合はエラーが出てし まいます。 空白セルが無い場合エラーが出ない方法を教えて頂けないでしょうか。 よろしくお願いします。 <マクロ> Sub Macro1() Columns("A:A").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Selection.SpecialCells(xlCellTypeBlanks).Select Application.CutCopyMode = False Selection.Delete Shift:=xlUp End Sub <データ> A --------- 1 2 1 1 1 3 4 ・ ・ ・ (以降約300行続きます)

  • 空白セルと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

  • 空白前の1つ左のセルに合わせる

    セル範囲を設定したいのですがどうすればいいのか教えてください。    C   D   E   F   G   H I 17    品目  4月  5月  6月 7月  結果 18 No.1 りんご  200 50 23 52  325      19 No.1 もも 20 1 53 1   75 20 No.1 いちご 23 3   26 21 No.1 なし 1 52     53 22 No.1 バナナ 5 2 7 23 結果      226 126 76 58   486  上記のような表があります。 C18からH列の7月の最後の結果表までの範囲 C18:H23 を範囲指定をしたいのです。 しかし行も増える事があり、列も8月・9月と増えて行きます。 途中まではマクロを作成できたのですが、 列の最後の取り方がわかりません。 できれば「結果」という文字の手前での列で 最終行までの範囲を取るにはどうすればいいですか? Range("$C$18" & Range("C65536").End(xlUp).Row).Select Selection.Borders(xlDiagonalDown).LineStyle = xlNone Selection.Borders(xlDiagonalUp).LineStyle = xlNone Selection.Copy

  • 空白セルをデータと認識してしまいます

    Excel2003を使用しています。 「マクロの記録」を使って、あるリストを自動作成 しようとしているのですが、うまくいきません。 A,B2つの列に分かれたデータを連結させるため、 C列に「CONCATENATE」関数を入れて適当な行まで コピーします。(それ以上はデータが入らないだろうと思われる100行目ぐらいまで) その後C列をコピーし、「値貼付け」をして 関数を値に変えます。 そうすると、たとえば実際には20行目までデータが 入っていたとすると、21行目~100行目までは 空白になりますよね? でも、どうもその空白行もデータとみなされている ようなんです…。 Range("C2").End(xlDown).Row で下端セルを探そうとすると、100行目に なってしまいますし、「ジャンプ」で空白セルを 探しても、同じ結果になります。 空白セルを選んで一度「Delete」を押すと 正しく「空白」と認識するようなのですが…。 「実際にデータの入っているセルとそうでないセル」 を自動で判別させたいので、 簡単に「何も入っていないセルを”空白”と正しく 認識させる方法」はありませんでしょうか?

  • 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個上みたいにやりたいのですがどうしたらよいでしょうか?

  • エクセルVBAで範囲の指定をしたいです(初心者)

    エクセルVBAで範囲の指定をしたいです(初心者) 列AからJがデータが入る範囲です。 列AとBとCには必ず数値等が何かしら入ります。 列Dは常に空白です。 列E以降は何か入ることも入らないこともあります。 7行目までデータがある場合、 A1セルからこの場合はJ7セルまでを範囲指定したいのですが 行数は未定なので、 Range("A1").Select Range(Selection,Selection.End(xlDown)).Select でA列のデータ最終行まで下がり、そこから9つ右の列までを 範囲指定するというのがよくわかりません。 自動記録で絶対参照と相対参照を切り替えてやってみたのですが、 どうしても Range(Selection, Selection.End(xlDown)).Select ActiveCell.Range("A1:J7").Select と常にA1からJ7が指定になってしまいます。 バージョンは2003です。 つたない質問文で申し訳ありませんが、 どなたか宜しくお願いいたします。

  • VBAで空白セルまで処理を繰り返す方法

    お忙しいところ申し訳ありません、よろしければご指導のほど御願いします。 作成環境:エクセル2003です。 文字列として保存されている数値を数値形式に変換したいのですが、マクロ記録で実行した所 Sub test() ' ' test Macro ' Range("BG2").Select ActiveCell.FormulaR1C1 = "1" Range("BG2").Select Selection.Copy Columns("BI:BI").Select Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlMultiply, _ SkipBlanks:=False, Transpose:=False ActiveWindow.SmallScroll Down:=-75 Range("BG2").Select Application.CutCopyMode = False ActiveCell.FormulaR1C1 = "" Range("BG5").Select End Sub 上記のようなコードになり、空白セルも値「0」が入力されはみだしてしまいます。 目的としてはCSVを読み込んで特定の列だけ変換できればと考えています、ところが取り込むCSVデータの行が毎回変動いたしまして範囲を指定して処理を実行するのではなく「空白セルまで処理を繰り返す」方法を模索しております。 先日会社から作業負担を軽減するようにVBAでの依頼を受けましたが、皆目検討つかず苦戦しております。お忙しいところもうしわけありませんが、ご指導のほど御願い申し上げます。

  • いい方法を教えてください(VBAについての質問)

    よろしくお願いします。 ある処理についてプロシージャを作成しました。 それは「毎回データの行数・列数の異なるデータから必要な列のデータだけを取り出して別のシートにコピーして貼り付ける」処理です。 具体的にはセルのA2以下にデータを貼り付けて必要な列の1行目空白セルに1を、不要な列は0を入れ、必要なデータ(1を入れた列にあるデータ)だけ取り出すという処理です。  Do Until ActiveCell.Value = ""   If Selection.Value = "1" Then   Selection.Offset(1, 0).Select   Range(Selection, Selection.End(xlDown)).Copy _   Destination:=mySht.Range("IV1").End(xlToLeft).Offset(0, 1)   Selection.End(xlUp).Offset(0, 1).Select   Else   Selection.Offset(0, 1).Select   End If  Loop ↑こんな感じで書きました。 myShtは変数で、必要データ貼り付け用に作成したシートです。 使ってみて穴に気付きました。 データに空白があった時に、空白以後のデータがコピーされないのです。そういう書き方なので当然ですが・・・。 範囲の指定をその列のデータの最初から空白関係なくデータのある最終行までにしようとあれこれと試しましたがことごとくうまくいきません。 これが1つ目の悩みです。 もう1つは   Range(Selection, Selection.End(xlDown)).Copy _   Destination:=mySht.Range("IV1").End(xlToLeft).Offset(0, 1) の部分、取り出した列のコピーを別のシート(mySht)に左寄せで順番に詰めてコピーしていくようにしたのですが、この記述だと1列目が空いてしまいます。 ですから実際はこの後1列目を削除する処理をしています。 この1列目の削除というのが本来不要な作業なので、なんだかイヤなのです。 何かいい方法を教えてください。 ヒントみたいなものでもうれしいです。

  • マクロ 可視セルへコピーする方法

    こんにちは。よろしくお願いします。 A~V列、300~400行程度の表を作っています。 8行目をコピーして空白行へペーストしたいのですがどのようにすれば良いでしょうか。 マクロの記録でつくったものは ActiveSheet.Paste でエラーになります。 またペースト開始行をA17ではなくて可変なものに変えたいです。 よろしくお願いします。 Sub 下までコピー() Range("A8:V8").Select Selection.Copy Selection.AutoFilter Field:=2, Criteria1:="=" Range("A17:V" & Range("B5").End(xlDown).Row).Select Selection.SpecialCells(xlCellTypeVisible).Select ActiveSheet.Paste Application.CutCopyMode = False Selection.AutoFilter Field:=2 End Sub