• ベストアンサー
  • 困ってます

マクロ:セルの選択

  • 質問No.5622230
  • 閲覧数391
  • ありがとう数1
  • 回答数4

お礼率 0% (0/9)

他の方の作ったマクロなのですが、
入力されている次の行(空白行)を選択する、というものだと思うのですが
400行ほど入力があり、その後マクロを実行すると更に空白行を400行ほどいった行が選択されてしまいます。
その間の空白に見える400行を全て削除してやり直しても同じです。
何か原因は考えられるでしょうか?

関係のありそうなマクロ↓
Gyou1 = ActiveCell.Row
Do While Cells(Gyou1, 2) <> Empty Or Cells(Gyou1, 3) <> Empty Or _
Cells(Gyou1, 4) <> Empty Or Cells(Gyou1, 5) <> Empty Or _
Cells(Gyou1, 6) <> Empty Or Cells(Gyou1, 7) <> Empty Or _
Cells(Gyou1, 8) <> Empty Or Cells(Gyou1, 9) <> Empty Or _
Cells(Gyou1, 10) <> Empty Or Cells(Gyou1, 11) <> Empty Or _
Cells(Gyou1, 12) <> Empty Or Cells(Gyou1, 13) <> Empty Or _
Cells(Gyou1, 14) <> Empty Or Cells(Gyou1, 15) <> Empty Or _
Cells(Gyou1, 16) <> Empty Or Cells(Gyou1, 17) <> Empty Or _
Cells(Gyou1, 18) <> Empty Or Cells(Gyou1, 19) <> Empty Or _
Cells(Gyou1, 20) <> Empty Or Cells(Gyou1, 21) <> Empty
Gyou1 = Gyou1 + 1
Loop

よろしくお願いします。

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

  • 回答No.4
  • ベストアンサー

ベストアンサー率 57% (3570/6233)

こんにちは。

B列からのようですし、私の解釈が、すべての行が空のセルということですと、#2のコードは違いましたね。

元のコードは、ループの抜けた後に、
Cells(Gyou1, ActiveCell.Column).Select
が必要ですね。

'-------------------------------------------

Sub MacroTest1R()
  Dim i As Long
  Dim j As Long
  Dim n As Long
  Dim m As Long
  Const COL As Integer = 2 '列の始まり
  With ActiveSheet
    j = ActiveCell.Row + 1
    If ActiveCell.Value = "" Then Exit Sub
    m = .Cells(Rows.Count, COL).End(xlUp).Row '最終行
    n = ActiveCell.CurrentRegion.Columns.Count '最大幅
    For i = j To m
      '行全体が空行, < n というなら、ひとつでも空のセルがある場合
      If WorksheetFunction.CountA(.Rows(i)) = 0 Then 
        '色付け
        '.Rows(i).SpecialCells(xlCellTypeBlanks).Interior.ColorIndex = 36
        Exit For
      End If
    Next i
    .Cells(i, COL).Resize(, n).Select
  End With
End Sub

'-------------------------------------------

その他の回答 (全3件)

  • 回答No.3

ベストアンサー率 52% (885/1701)

原因はこの部分では無いと思われます。
このマクロは、B列~U列が空になっている(入力されて居ない)行をアクティブ行から下に1行づつ探しています。
そして、見つかった行番号を「Gyou1」と言う変数に入れて居ます。

恐らく、入力行の一番上の行がアクティブ行の状態でこのマクロが動く様になっているのでしょう。
例えば、1~400行まで入力が在り、B1セルがアクティブな場合、Gyou1=401 に、なります。

今回提示されて居ませんが401行目をselectするような動きをするのでしょう。
そして、トラブルは、恐らく401行目をSelectした後に、その更に401行下の行をSelectしている箇所が在るのではないでしょうか。

コードを見る限り、マクロを作りなれて居ない方が作られているようです。
マクロを1行づつステップ実行しながら動作を確認してみてください。
  • 回答No.2

ベストアンサー率 57% (3570/6233)

こんにちは。

Excelだとしたら、ありえないマクロです。
他でも同じようなことを書いたのですが、そういうテクニック的な質問に対する回答は最終的には無駄になって、また別な質問が立つことが多いと思います。最終的に何をしたいのか教えてください。次の空白を見つけることぐらいなら、いろんな方法があるかと思いますが、例えば、こんな風にできます。

'-------------------------------------------
Sub MacroTest1()
  Dim i As Long
  Dim j As Long
  Dim n As Long
  Dim m As Long
  With ActiveSheet
    j = ActiveCell.Row 'アクティブセル行
    If ActiveCell.Value = "" Then Exit Sub '選択した場所が空白セルでは動かない
    m = .Cells(Rows.Count, 1).End(xlUp).Row '最終行
    n = ActiveCell.CurrentRegion.Columns.Count '最大幅 または、21
    For i = j To m
      If WorksheetFunction.CountA(.Rows(i)) < n Then
        '色付け
        '.Rows(i).SpecialCells(xlCellTypeBlanks).Interior.ColorIndex = 36
        .Cells(i, 1).Resize(, n).Select
        Exit For
      End If
    Next i
  End With
End Sub
  • 回答No.1

ベストアンサー率 40% (705/1742)

選択( ○○○○.select )が提示されていないのでなんともいえないです。
とりあえず、勉強がてら↓作ってみました。
1列目と22列目がどのようになっているかで
希望する動作にならない可能性があります。
1行マクロです。
Cells(ActiveCell.CurrentRegion.Rows.Count _
+ ActiveCell.CurrentRegion.Row, _
ActiveCell.Column).Select
関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ