2017-01-12 5 views
0

私が使用して、配列にワークシートから情報を入れしようとしています削除配列の範囲からデータを転送する:最後の行

WBArray = ActiveSheet.Range(Cells(5, 1), Cells(end1, 29)).Value 

をしかし、問題がいくつかあります:最初の最後の2行を私の元の範囲の無駄なデータが含まれています。どのように配列に渡すと、これらの2行を削除できますか?私が使っているような直接的な方法はありますか?

第2に、私の範囲は行5から始まりますが、古いファイルを通過する必要があるため、その数は異なる場合があります。フローティングリファレンスを作成する方法はありますか?それで、私はどこのデータが始まるのかに基づいて変更しますか? (たとえば、行7で開始する場合)。

すでに各項目をループしてみましたが、それもうまくいかないようです。

アイデア?

答えて

1

あなたは、この機能を使用することができます:

Function GetArray(sht As Worksheet) ', uselessRows As Long) 
    With sht 
     GetArray = .Range(.Columns(1).Find(what:="Identifier", lookat:=xlWhole, LookIn:=xlValues), _ 
          .Cells(.UsedRange.Rows(.UsedRange.Rows.Count).Row - 6, 29)).Value 
    End With 
End Function 

として、あなたのメインサブでそれを呼び出す:

WBArray = GetArray(mySht) 

myShtは、例えばActiveSheetのような有効なワークシートの参考資料です。

+0

答えをありがとう。はい、それは1つのファイルに対しては完全に機能しますが、マクロは何百ものブックをループし、それぞれが異なる開始点と終了点としてループします。したがって、各ファイルでそれを呼び出す方法はありません。 ループを作成しようとしています。そのセルの名前が私が望む名前であれば、そのセルを私のstart1として使用します。 – DGMS89

+0

あなたの質問には何百ものファイルは言及されておらず、とにかくその機能は一般的です。ビート解答を受け入れて_original_質問を投稿し、_new_問題を_new_ issueに投稿することができます。 – user3598756

+0

はい、そうです、複数の反復があるはずです。しかし、いずれの場合でも、私がただ1つのファイルに対して実行している場合、コード内の座標を特別に呼び出すことなく、場所を見つける方法はありますか? – DGMS89

1

たぶん

OPの明確化後に編集
Sub x() 

Dim start1 As Long, end1 As Long, WBArray, r As Range 

With ActiveSheet 
    Set r = .Columns(1).Find(What:="Identifier", After:=.Cells(.rows.Count,1), LookAt:=xlWhole, _ 
          SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False) 
    If Not r Is Nothing Then 
     start1 = r.Row 
     end1 = .Range("A" & Rows.Count).End(xlUp).Row - 2 
     WBArray = .Range(Cells(start1, 1), Cells(end1, 29)).Value 
    Else 
     MsgBox "Identified not found" 
    End If 
End With 

End Sub 
+0

ありがとうございます。 1 - 最後に1を定義したら、最後に2を変更すると、無駄なセルを考慮することができます)(5つの無駄な行があり、私はちょうど5)を入れることができますか? 2 - Start1の問題は、最初の行にデータがあるが、私が望むデータが5行目または7行目(またはそれ以外)で始まる可能性があるということです。 UsedRangeを使用すると、最初の不要な行が数えられます。 – DGMS89

+0

Re end1 - はい(ただし、認識可能なパターンがあればコードに組み込むことができます)。再スタート1 - はい。どのようにして望ましくない行と区別しますか? – SJR

+0

希望の範囲内の最初のセルは、常に同じ識別子を持ちます。 次の行 – DGMS89

関連する問題