• ベストアンサー

excelVBA 行の範囲指定についてです。

excel2007のVBAの質問です。 1行目から文字入力がされている行までを範囲指定したいのですが、 For i = 1 To ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row このように入力すると、数式が入力されている行まで指定されてしまいます。 あくまでも 「文字入力がされているところまで」を指定したい場合 どのようにVBAを作成したらよいのでしょうか? よろしくお願いします!

質問者が選んだベストアンサー

  • ベストアンサー
  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.2

一例です。 最終行 = Application.Match("", Range("A:A"), -1) 因みに文字列がないと「ERROR」が戻されるのでIsError関数で判定して下さい。

pumotch1028
質問者

お礼

わかりにくい質問をしてしまい申し訳ありません。 この質問文ではみなさんにわかりにくく、失礼だと思いますので 一度締め切りをして これからは、もう少し文章を考えて質問したいと思います。 ご迷惑をおかけしてすみませんでした! ちなみにNO.2の方の回答で試してみたところ うまくいきました。 どうもありがとうございました。

その他の回答 (3)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.4

こんにちは! 横からお邪魔します。 >このように入力すると、数式が入力されている行まで指定されてしまいます。 >あくまでも >「文字入力がされているところまで」を指定したい場合 とありますが、数値と文字列が混在している列があり、 列の最終行ではなk、文字列の最終行までを範囲指定したい!というコトですよね? そういうことだとしての一例です。 データはA列にあるとします。 Sub test() Dim i, k As Long Application.ScreenUpdating = False For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row If Not IsNumeric(Cells(i, 1)) Then k = Cells(i, 1).Row End If Next i Application.ScreenUpdating = True Range(Cells(1, 1), Cells(k, 1)).Select End Sub こんな感じではどうでしょうか? 的外れならごめんなさいね。m(__)m

pumotch1028
質問者

お礼

わかりにくい質問をしてしまい申し訳ありません。 この質問文ではみなさんにわかりにくく、失礼だと思いますので 一度締め切りをして これからは、もう少し文章を考えて質問したいと思います。 ご迷惑をおかけしてすみませんでした! ちなみにNO.2の方の回答で試してみたところ うまくいきました。 どうもありがとうございました。

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.3

再掲: どこに文字が入力されているのですか。 再掲: たとえば「A列に」生データを「飛び飛びに記入」することにしている,その下端行 for i = 1 to range("A65536").end(xlup).row 具体的に,目に見える姿として,どこ列にどのようにデータを記入していて,具体的にどこ番地のセルを見つけたいのですか?(なぜそこがいい・そこを欲しいのですか?) とお聞きしました。 その投げかけが理解出来なくても,回答のマクロをまず実際に手を動かして試していれば,リクツはあとで勉強するにしても(別にしなくても構いませんが)上手く行く・あるいはいかない事が確認できたはずですね? 回答のマクロを参考に,まずアナタの実際のエクセルに合わせて手直して実際に試してみてから,それで失敗したら「自分ではこうやってみた。実際のエクセルではこういう具合に問題が起きた」と目に見える情報を提供して,追加質問をしてください。

pumotch1028
質問者

お礼

わかりにくい質問をしてしまい申し訳ありません。 この質問文ではみなさんにわかりにくく、失礼だと思いますので 一度締め切りをして これからは、もう少し文章を考えて質問したいと思います。 ご迷惑をおかけしてすみませんでした! ちなみにNO.2の方の回答で試してみたところ うまくいきました。 どうもありがとうございました。

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

>文字入力がされている行までを範囲指定したい どこに文字が入力されているのですか。 作成例: たとえばA列に生データを上から順に記入することにしている,その下端行 for i = 1 to range("A65536").end(xlup).row #参考 cells(rows.count, 1).end(xlup).rowのような書き方もありますが,大概の場合その必要はありません

pumotch1028
質問者

お礼

わかりにくい質問をしてしまい申し訳ありません。 この質問文ではみなさんにわかりにくく、失礼だと思いますので 一度締め切りをして これからは、もう少し文章を考えて質問したいと思います。 ご迷惑をおかけしてすみませんでした! ちなみにNO.2の方の回答で試してみたところ うまくいきました。 どうもありがとうございました。

pumotch1028
質問者

補足

すばやい回答ありがとうございます。 数式は1~1500行まで入力されていますが、 文字入力がされているのはその途中までですので 例えば1000行まで文字が入力されています。 (しかし、途中で文字が入っていないセルも存在しています。) 僕が範囲指定したいのは 1行目から1000行目までです。 わかりにくい説明で申し訳ありません!

関連するQ&A

  • 条件によって行削除を繰り返し処理する

    一行目がフィールド名で、Z列まで値の入っているデータがあります。 x列が""の場合はその行を削除する処理を最終行まで続けたいのですが、 ""行が2行以上続いているとFor~によって行を飛ばしてしまいます。 何か良い方法はありませんでしょうか? Sub 削除() Dim last As Long Dim row As Long last = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).row For row = 2 To last If Cells(row, 24).Value <> "" Then Rows(Format(row) + ":" + Format(row)).EntireRow.Deletesift:=xlUp End If Next End Sub

  • EXCELVBAで行の削除

    WIN98SE EXCEL2000です。 G列に99の文字があったらその行を削除するというVBAを下記のように作りました。 Dim i As Integer Dim rowcount As Integer rowcount = Cells(1,1).CurrentRegion.Rows.Count For i = 1 To rowcount If Cells(i, 7) = "99" Then Rows(i).Delete Next i これを実行するとG列に99のある行が連続してあると1行おきに削除されます。どこをなおせばよいのか教えてください。よろしくお願いします。

  • rangeに変数代入でエラー

    VBA初心者です。お願いします。 下記のように最終セルのアドレスを取得し、セル範囲を選択したいのですがたのですが、エラーが出てしまいます。どなたか助けてください。 ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Activate l = ActiveCell.Column 'アクティブセルの列番号 d = ActiveCell.Row 'アクティブセルの行番号 ad = ActiveCell.Address 'アクティブセルのアドレス Range("A1:ad").Select

  • エクセルVBAでデータ最終行取得方法

    エクセルVBAでデータ最終行取得方法で良い方法を教えてください。 データの行数、列数は不定。 最多のデータ行の列も不定。 この条件で、データ最終行を取得するにはどうすればよいでしょうか? lastrow = ActiveSheet.Cells(ActiveSheet.Rows.Count, "A").End(xlUp).Row では、A列の最終行に限定されます。 lastrow = ActiveSheet.Cells(1, "A").SpecialCells(xlLastCell).Row では、列の限定はありませんが、一旦データ入力後、削除した部分まで入ってしまいます。 lastrow = ActiveSheet.UsedRange.Rows.Count では、データ入力後、削除した部分まで入ってしまい、かつ、1行目など上部が空白の場合、不正確になります。

  • ExcelVBAで最終行を誤認する問題の回避方法

    いつもお世話になります。 ActiveSheet.Cells.SpecialCells(xlLastCell).Rowなどのコードで 最終行を取得しようとするとき、縦スクロールバーを下端まで下げた 時に空行を表示してしまうなどをすると正しく取得できなくなると いったことが起こります。現在では保存すれば修正されるみたい ですが、保存をせずに正しく取得できるようにするための方法は ありますでしょうか。 宜しくお願いいたします。

  • 指定した範囲で0の行を削除するマクロ

    以下のコードで7列目が0の行を削除するマクロを作ったのですが、 13行目以降を削除するように指定できますでしょうか? 1-12行は別のシートに数式を入れているため、削除したくないのですが、 うまくいきません。よろしくお願いいたします。 Sub 行削除() Dim Rw As Long Dim Cnt As Long Application.ScreenUpdating = False For Rw = Cells(Rows.Count, 7).End(xlUp).Row To 1 Step -1 With Cells(Rw, 7) If .Value = 0 Then .EntireRow.Delete Cnt = Cnt + 1 End If End With Next If Cnt = 0 Then MsgBox "削除対象行は、見つかりません。", vbExclamation Else MsgBox Cnt & " 件見つかり行を削除しました。", vbInformation End If End Sub

  • ExcelVBAで、選択範囲内で同じ値が入力されたセルを調べる

    選択範囲内(縦一列)で同じ値が入力されたセルの色を黄色にするプログラムを作りました。 Sub 選択範囲内で同じ値が入力されたセルを調べる_縦() Dim startrow As Byte Dim lasrow As Byte Dim i As Long Dim j As Byte Dim atai If TypeName(Selection) <> "Range" Then Exit Sub startrow = ActiveCell.Row '最初のセルの列番号を取得 lasrow = Selection.Rows(Selection.Rows.Count).Row '最終列番号を取得 '同じ値が入力されているセルを黄色にする For i = startrow To lasrow - 1 If ActiveSheet.Cells(i, ActiveCell.Column).Interior.ColorIndex = xlNone Then atai = ActiveSheet.Cells(i, ActiveCell.Column).Value For j = i + 1 To lasrow If atai = ActiveSheet.Cells(j, ActiveCell.Column).Value Then ActiveSheet.Cells(i, ActiveCell.Column).Interior.ColorIndex = 6 ActiveSheet.Cells(j, ActiveCell.Column).Interior.ColorIndex = 6 End If Next End If Next End Sub 但し、上記のプログラムでは選択範囲内に結合セルがあるとエラーになってしまいます。 どなたか、解決方法をご教授頂けませんでしょうか? 宜しくお願い致しますm(._.)m

  • VBAで複数行の指定

    VBA教えてください  初心者です やりたい事 for next文を使用しbook1のシート内N~R行にある文字が入っていたなら book2のシート内のB行の文字を消すといった内容です 考えたコード sub test() dim c as variant dim i as long Set c = Workbooks("book2.xls").ActiveSheet With Workbooks("book1.xls").ActiveSheet For i = 1 To 100 If .Cells(i, 14) Like "*受入*" Then 'もし、14行目のセルのどれかに『受入』という文字が入っていたら c.Cells(i, 2).Clear 'その2行の条件に当てはまるセルをクリアする End If Next i End With end sub これではbook1のシートに内のN行しか反映されません 複数行N~Rに反映させるコードわからないです 教えてもらえるとすごく助かります。

  • Cellsでの行の指定方法

    EXCEL初心者です。 下記載のサンプルプログラムの連番マクロはA1から連番が始まります。 そこでA2から連番を開始したいのですが、Cells(i, 1) = i - 3の所かなと考えてCells(1, 22) = i - 3としてみましたがエラーが出てしまいました。 Cellsでの行指定の記述はどの様にしたら良いのでしょうか? 全くの初心者で申し訳ありませんが教えて頂けると助かります。 Dim maxrow As Double Dim i As Double Application.EnableEvents = False maxrow = Cells(Rows.Count, 2).End(xlUp).Row For i = 4 To maxrow Cells(i, 1) = i - 3 Next i Application.EnableEvents = True End Sub

  • 条件に一致すれば行を削除するVBA

    こんにちは、以下のVBAについて質問をさせてください!m(_ _)m(タイプミスがあったらすみません、処理は成功しています。) Dim data As Integer For data = Cells(Rows,Count 1).End(xlUp).Row To 2 Step -1 If Cells(data,29) = "おやつ" Then Rows(data).EntireRow.Delete End If Next おやつ 上記だと29列目に「おやつ」という文字が入っている行は消えるのですが、For data~の部分を For data = 2 To Cells(Rows,Count 1).End(xlDown).Row に変えると何も起こらなくなります。 上の行から処理するか下の行から処理するかの違いで、やっていることは同じだと思うのですが、なぜ上の行から処理をしようとするとうまくいかないのでしょうか…?!Step -1のようにどこかに+1というのを入れないといけないのでしょうか…? どなたかご教示いただけると大変嬉しいです、よろしくお願いいたします<(_ _)>

専門家に質問してみよう