8

Sheet2コードモジュールからSheet1の行数を数えたい。

sheet1コードモジュールでは、次のコードが正常に機能します

ctr = Range("B2", Range("B2").End(xlDown)).Count

Sheet2コードモジュールで同じコードを試しました

recct = ThisWorkbook.Sheets("Sheet1").Range("B2", Range("B2").End(xlDown)).Count

私は得ていますrun time error 1004 Application -Defined or Defined error

ありがとう

4

4 に答える 4

9

の 2 番目の範囲参照でエラーが発生しますrecct。別のシートを参照しているため、両方の範囲参照でシート名を VBA に伝える必要があります。

代わりにこれを試してください:

With ThisWorkbook.Sheets("Sheet1")    
    recct = .Range("B2", .Range("B2").End(xlDown)).Rows.Count    
End With

あるいは、これも同様に機能します (少しずさんですが)。

recct = ThisWorkbook.Sheets("Sheet1").Range("B2", ThisWorkbook.Sheets("Sheet1").Range("B2").End(xlDown)).Rows.Count

アップデート

シートの行数が実際に何を意味するかについては多くの議論があるため、上記のコードを使用して文字通り B2 から開始し、そのすぐ下にある連続したセルの数を数えます。

ただし、列Bで最後に使用された「実際の」セルを見つけたい場合(実際には、データが含まれていることを意味します)、次のようにします。

With ThisWorkbook.Sheets("Sheet1")

    recct = .Range("B2", .Range("B" & .Rows.Count).End(xlUp)).Rows.Count

End With
于 2012-10-26T13:49:47.423 に答える
4

たとえば、これを使用できます。

rowsInThere = Sheets("Sheet1").UsedRange.Rows.Count

これは範囲なしで機能します。またActiveSheet、現在のシートを変更してその行数を確認する必要がある場合に備えて、チェックするシートとして使用することもできます。

于 2012-10-26T13:48:19.287 に答える
2

二つのこと

  1. オフシートで作業するときは、範囲を完全に限定する必要があります
  2. 常に最後のセルを上からではなく下から上に測定してください - ギャップがある場合があります

コード

Sub GetB()
Dim ws As Worksheet
Set ws = Sheets(1)
Dim lngCnt As Long
lngCnt = ws.Range(ws.[b2], ws.Cells(Rows.Count, "b").End(xlUp)).Count
End Sub

より堅牢

すべての状況をきれいに処理するFind方が簡単です

Sub GetB()
    Dim ws As Worksheet
    Dim rng1 As Range
    Set ws = Sheets(1)
    Set rng1 = ws.Range("B:B").Find("*", ws.[b1], xlValues, , , xlPrevious)
    If Not rng1 Is Nothing Then
    Select Case rng1.Row
    Case 1
    MsgBox "Only B1 has data", vbCritical
    Case 2
    MsgBox "No used cells past B2"
    Case Else
    MsgBox rng1.Row - 1 & " cells between B2 and B" & rng1.Row
    End Select
    Else
        MsgBox ws.Name & " column B Is blank", vbCritical
    End If
End Sub
于 2012-10-26T13:56:48.683 に答える
1

これが役立つかどうかはわかりませんが、モジュールで常にこれを使用しています。

Dim TR as long, TC as long

TR = [Sheet1!A1].CurrentRegion.Rows.count
TC = [Sheet1!A1].CurrentRegion.Columns.count

別のプログラムからの抽出など、扱っているデータセットに空の行や列がないことがわかっている場合は、すばやく、うまく機能します。これから、範囲選択を指定するか、vlookup を実行できます。

TR = [Sheet1!A1].CurrentRegion.Rows.count
[I2] = "=vlookup($C2,'sheet1'!A$2:B$" & TR & ",2,FALSE)"
于 2014-06-03T17:02:54.220 に答える