2017-08-10 5 views
0

A列に最初に "1"が記述されている行を探したいとします。Range()。Find()。行結果If条件なし

Dim begin1, end1 As Integer 
begin1 = 0 
end1 = 0 


begin1 = Range("A:A").Find("1", SearchOrder:=xlByRows, SearchDirection:=xlNext, LookIn:=xlValues).Row 
end1 = Range("A:A").Find("1", SearchOrder:=xlByRows, SearchDirection:=xlPrevious, LookIn:=xlValues).Row 

If Not begin1 Is Nothing Then 

間違ったオブジェクトであるため、この「If Not」条件が機能しません。私はこの状態をどのように変えることができるか知るのに十分なVBAを知らない。

ご協力いただければ幸いです!

+0

「begin1 <> 0 Then Then '? –

+0

これは何かしたが、私はエラーがあることを知っている91 begin1 = ...とend1 =に関してオブジェクト変数が設定されていない – Doule

+0

If Not Begin1 Is Nothing Thenは、 。 'begin1'は0または行番号のいずれかの整数です。また、このチェックは、 'begin1 = Range(" A:A ")から廃止されました。" 1 "、SearchOrder:= xlByRows、SearchDirection:= xlNext、LookIn:= xlValues) " 見つかりません。 –

答えて

1

まず、宣言にカンマを使用する方法に注意してください。

Dim begin1, end1 As Integer 

この結果、begin1は 'variant'と宣言され、end1は整数として宣言されます。 あなたはコンマを使用したい場合は、以下の整数として、両方を宣言します:

Dim begin1 as integer, end1 as integer 

次に、あなたが使用する必要があり、その後... if文で整数を使用する場合:

If begin1 <> 0 then 

範囲を使用する場合は、次のようになります。

if Not begin1 is nothing then 
+0

何も見つからない場合でもエラーがスローされます(見つかった範囲の '.Row'メソッドでオブジェクトが設定されていません) - これは' If begin1 <> 0 Then'行が最初に廃止されたことを意味します。それ以外はあなたが当然のことです。 –

+0

あなたは正しいですが、エラーハンドリングは質問では扱われていませんでしたので、私は言及しませんでした。 – Slaqr

2

これを試してください。 begin1とend1を範囲として宣言し、見つかったかどうかをチェックします(列全体に1つしかない場合でもend1が見つかるため、前者を確認する必要があります)。見つかったセルの行プロパティを使用している場合。

Sub x() 

Dim begin1 As Range, end1 As Range 

With Range("A:A") 
    Set begin1 = .Find(1, after:=.Cells(.Cells.Count), SearchOrder:=xlByRows, SearchDirection:=xlNext, LookIn:=xlValues) 
    Set end1 = .Find(1, after:=.Cells(1), SearchOrder:=xlByRows, SearchDirection:=xlPrevious, LookIn:=xlValues) 
End With 

If Not begin1 Is Nothing Then 
    MsgBox "First row is " & begin1.Row 
    MsgBox "Last row is " & end1.Row 
End If 

End Sub 
+0

私はプログラムが実際にコンパイルするが、私は後で整数としてbegin1とend1を使用していた。for i = begin1 end1 - X + 1。begin1とend1が範囲右なら、それはうまくいかない? – Doule

+0

いいえ、他の2つの変数をLongとして宣言し、見つかった2つのセルの行にそれぞれ設定することができます。個人的には、 'begin1.row'だけを使用しますが、繰り返し使用している場合は、変数が意味をなさないかもしれません。 (または範囲変数の名前を変更してください。) – SJR

+0

@SJRが言ったように、私は 'begin1.row'に固執します。 'If​​ ... End If'ブロックで' Integer'変数を使うことができます。 'iBegin = begin1.row'を最初に整数として宣言しておいてください...最初の1を32768行に追加し、オーバーフローエラーが発生します。数字のように本当に必要な場合は、代わりに 'Long'を使います。 –