2016-08-31 5 views
1

2つのループを使用する必要があります。「サブモジュール」が定義された既知の範囲(「B3」、「B18」)で何回繰り返されたかを数えるのが簡単です。難しい部分は、それぞれの「サブモジュール」ごとに「ポジション」が何度繰り返されているのかを数えようとするときに来ます。これは、各サブモデルの要素の量が異なるため、特別なループの範囲を「submodul」内の特定の要素(= Position)が何回繰り返されるかを計算します。私は正しい形式でそれを書くために管理することができる場合どのようにコードのサイズを変更するループ内の範囲を定義するために書くことができますか?

positionrepetition = Application.CountIf(Worksheets("Sheet2").range("cells(3 + x + y - 1, 3)", "cells(3 + x + y - 1 + submodulrepetition,3"), position) 

は、私はそれが動作すると信じて:私は助けを必要と

特定の部分は次のようです。問題は、通常、範囲が固定されているかわかっているときにのみ範囲関数を使用することです。計算する必要はありません。私は通常Range( "A1"、 "F10")のように書く。

これは固定範囲なので、Range( "A1"、 "F10 ")引数(" Cells(1,1) "、" Cells(10,6) ")でrange関数を使うことができました。私が間違っているなら、私を修正してください。

ここにループの残りのコードがあります。

For x = 0 To numberofparts 
    If Cells(3 + x, 18) = "1" Then 
     submodul = Cells(3 + x, 2).Value 
     submodulrepetition = Application.CountIf(Worksheets("Sheet2").range("B3", "B18"), submodul) 
     For y = 1 To submodulrepetition 
      position = Cells(3 + x + y - 1, 3).Value 
      positionrepetition = Application.CountIf(Worksheets("Sheet2").range("cells(3 + x + y - 1, 3)", "cells(3 + x + y - 1 + submodulrepetition,3"), position) 
     Next 
    Else 
    End If 
    x = x + submodulrepetition - 1 
Next 

もう少し説明することは、すべてのデータは、Excelシートから収集されます。

- すべての情報は -The「サブモジュール」は、列Bにあり、それらは数値に配置されているExcelシートから収集されます注文。すべてのサブモジュールは、このコラムでそれが持つ多くの要素を繰り返す。 - 「位置」(サブモジュールの要素)はC列にあり、同じ列でも、他の「サブモデル」であっても繰り返すことができます。

すべてのご協力をいただき、誠にありがとうございます。

アレハンドロ・ファリーナ

+0

は、それが働いた –

答えて

0

変更し、あなたの行:

positionrepetition = Application.CountIf(Worksheets("Sheet2").Range("cells(3 + x + y - 1, 3)", "cells(3 + x + y - 1 + submodulrepetition,3"), Position) 

付:範囲は列の終わりを取得するには、次のコードを使用しColumn/Rowにより変更しようとしている場合は

positionrepetition = Application.CountIf(Worksheets("Sheet2").Range(Cells(3 + x + y - 1, 3), Cells(3 + x + y - 1 + submodulrepetition, 3), Position)) 
+0

おかげで以下の私の答えを参照してください!今度は、それぞれのLoopのサイズが異なる範囲を使うことができます。 –

+0

@AlejandroFよろしくお願いします。 –

+0

@AlejandroFここに何が起こったのですか?あなたは 'V'を離しましたか? –

0

または行:

次のように

は、例えば柔軟Column\RowのためにあなたのRange機能でGetColEndGetRowEndを使用します。

Sheets("Sheet_Name").Range(Cells(1,1),Cells(GetRowEnd,GetColEnd) 
関連する問題