これが私のコードです。コード自体は機能しているようですが、何らかの理由で条件ステートメントが32645行目で停止します。すべての変数をLongに切り替えてみましたが、役に立ちませんでした。
また、32646行目から開始するとコードは機能しますが、その後のランダムな行(〜18000)で停止します。停止するデータに類似点はないようです。もともと私は開始行と終了行を指定するforループを試しましたが、それも機能しなかったので、whileループを試しました(理論的には両方とも機能するはずですが、どちらも機能しないようです)。
130,000以上の行を処理できる必要がありますが、なぜこれが発生するのか考えてみてください。
問題
ループはエラーなしで実行を停止し、メッセージボックスを追加することで、行増分変数が最後の行で終了することがわかりますが、ブックによっては、条件ステートメントは任意の行数の後で評価されなくなります。
最初の実行が停止した下の行からスクリプトを実行すると、スクリプトは機能しますが、(おそらく異なる)任意の数のステップで再び機能します。
ノート
すべての変数を「Long」タイプにしました。OptionExplicitを使用しました。
data_row = CLng(InputBox("Please enter the row number of the first data entry"))
Worksheets.Add(After:=Worksheets(1)).name = "Formatted_Output"
Set ws = Sheets("Formatted_Output")
Worksheets(1).Activate
LastCol = ActiveSheet.UsedRange.Columns(ActiveSheet.UsedRange.Columns.Count).Column
LastRow = ActiveSheet.UsedRange.Rows(ActiveSheet.UsedRange.Rows.Count).row
data_col = LastCol
'loop through entries to get account and permissions
increment = data_row
Do Until increment = LastRow
If Cells(data_row, data_col) = "" Then
data_col = data_col - 1
Else
' ~> For illegal ==> access denied permission that throws errors
If Cells(data_row, data_col).Value = "==>access denied" Then
permissions = "access denied" 'remove illegal =
ws.Cells(output_row, 3).Value = permissions 'print permissions to output file
Else
permissions = Cells(data_row, data_col).Value 'cell should be permission cell of each row
ws.Cells(output_row, 3).Value = permissions 'print permissions to output file
End If
data_col = data_col - 1 'domain / account cell is now highlighted
If InStrRev(Cells(data_row, data_col).Value, "?") > 0 Then
account = Split(Cells(data_row, data_col).Value, "?")(1) & Str(unknown_count) ' separate domain name and unknown id
unknown_count = unknown_count + 1 ' counting the number of unkown accounts found
ws.Cells(output_row, 2) = account 'print unknown account Id to output
domain_bit = Split(Cells(data_row, data_col).Value, "?")(0) '' get separate domain name from id cell
data_col = data_col - 1 'domain second from end cell is now highlighted
Do While data_col > 0 'generate domain from rest of row
domain_bit = Cells(data_row, data_col).Value & domain_bit 'domain built backwards
data_col = data_col - 1 'check next column for more of location name
Loop
ws.Cells(output_row, 1) = domain_bit
'data_col = LastCol
'data_row = data_row + 1
'output_row = output_row + 1
ElseIf InStrRev(Cells(data_row, data_col).Value, "\") > 0 Then
account = Split(Cells(data_row, data_col).Value, "\")(1) 'separate account ID
ws.Cells(output_row, 2) = account 'print account ID to oputput
domain_bit = Split(Cells(data_row, data_col).Value, "\")(0)
data_col = data_col - 1 'domain second from end cell is now highlighted
Do While data_col > 0 'generate domain from rest of row
domain_bit = Cells(data_row, data_col).Value & domain_bit 'domain built backwards
data_col = data_col - 1 'check next column for more of location name
Loop
ws.Cells(output_row, 1) = domain_bit 'output to file
Else
account = Cells(data_row, data_col).Value 'account is just whole cell whether empty or one word no path
ws.Cells(output_row, 2) = account 'print account ID to oputput
data_col = data_col - 1 'domain second from end cell is now highlighted (since no domain in account cell)
Do While data_col > 0 'generate domain from rest of row
domain_bit = Cells(data_row, data_col).Value & domain_bit 'domain built backwards
data_col = data_col - 1 'check next column for more of location name
Loop
ws.Cells(output_row, 1) = domain_bit 'output to file
End If
data_col = LastCol
data_row = data_row + 1
output_row = output_row + 1
End If
'Next increment
ws.Range("E" & 1) = unknown_count
increment = increment + 1
If increment = LastRow Then
MsgBox (Str(increment) & "=" & Str(LastRow))
End If
Loop