Lightフォーマットを行うSubを持っていて、その列に "1"か何も含まれていないかどうかを評価してカウントする必要があります。 isNumericかどうかのヘッダー。Excel "Do While" Loopが最初の繰り返しの後に正しく機能しない
Do ... Untilループの最初の反復処理は、まさにそのように機能します。しかし、2回目に実行しようとすると、ワークシート(XFD)の右端の列にアクティブなセルがすべてスローされます。私はこれをループするために必要な合計約114,000行を持っています。
最初のループのみで、以下のコードをご覧ください。これは、すべての行を循環する別のループの中に入れ子にする必要があります:
Sub TotalBookCountsProcess()
Dim ws As Excel.Worksheet
Dim numberedBooks As Integer 'Total Number of physical books
Dim virtualBooks As Integer 'Total Number of virtual books
Dim firstBookCol As Integer 'First Column with a book number
Dim ispeecCol As Integer 'ISPEC Column
Dim lastWorksheetCol As Integer 'Last Column in the worksheet after adding total book count columns
Dim loopColOffset As Integer 'Offset column amounts for new row reset after loop
Dim lastItem As String 'Last item number in last row of the worksheet
ActiveCell.End(xlDown).Select
lastItem = ActiveCell.Value
ActiveCell.End(xlUp).End(xlToRight).Select
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = "Total Numbered Books"
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = "Total CS Books"
lastWorksheetCol = ActiveCell.Column
Columns.AutoFit
numberedBooks = 0
virtualBooks = 0
Cells.Range("1:1").Find("ISPEC").Select
ispecCol = ActiveCell.Column
firstBookCol = ispecCol + 1
ActiveCell.Offset(1, 1).Select
loopColOffset = ((lastWorksheetCol - firstBookCol) * -1)
Do Until ActiveCell.End(xlUp).Value = "Total Numbered Books"
If ActiveCell.Value = 1 And IsNumeric(ActiveCell.End(xlUp).Value) = True Then
numberedBooks = numberedBooks + 1
ActiveCell.Offset(0, 1).Select
ElseIf ActiveCell.Value = 1 And IsNumeric(ActiveCell.End(xlUp).Value) = False Then
virtualBooks = virtualBooks + 1
ActiveCell.Offset(0, 1).Select
Else
ActiveCell.Offset(0, 1).Select
End If
Loop
ActiveCell.Value = numberedBooks
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = virtualBooks
ActiveCell.Offset(1, loopColOffset).Select
End Sub
洞察力は大変ありがたいです。
を活性化されていることを確認しシートのスクリーンショットを添付しますか?すべてのセルをルーピングするのではなく、試行していることを達成するためのより良いオプションがあります。 – Spidey
これを行うにはVBAは必要ありません。これは、セル内式で行うことができます。 – trincot
データが "A1"で始まると仮定すると、 'ActiveCell.Worksheet.Range(" A1 ")を試してください。最初の行を選択してください –