Java имеет пул строк, в котором Java управляет распределением памяти для объектов String. См. String Pools в Java
Когда вы проверяете (сравниваете) два объекта с помощью оператора ==
, он сравнивает равенство адресов в пуле строк. Если два объекта String имеют одинаковые адреса, то он возвращает true
, в противном случае false
. Но если вы хотите сравнить содержимое двух объектов String, вы должны переопределить метод equals
.
equals
- фактически метод класса Object, но он переопределяется в класс String и дается новое определение, которое сравнивает содержимое объекта.
Example:
stringObjectOne.equals(stringObjectTwo);
Но помните, что это относится к случаю String. Если вы хотите сравнить регистр без учета регистра, вы должны пойти для метода equalsIgnoreCase класса String.
Давайте посмотрим:
String one = "HELLO";
String two = "HELLO";
String three = new String("HELLO");
String four = "hello";
one == two; // TRUE
one == three; // FALSE
one == four; // FALSE
one.equals(two); // TRUE
one.equals(three); // TRUE
one.equals(four); // FALSE
one.equalsIgnoreCase(four); // TRUE
перед тем, как использовать
, вы должны определить размер emptyRows()
, кроме того, вы можете использовать WorksheetFunction.Count()
для проверки любого значения в текущей строке
finally
Function FindAllEmptyRows(sheet As Worksheet) As Variant
Dim emptyRows() As Variant
Dim i As Long, rowNumber As Long, rowCounter As Long
With sheet.UsedRange ' reference passed sheet UsedRange
rowNumber = .Rows.Count
ReDim emptyRows(0 To rowNumber - 1) ' dim the array to the maximum possible size
For i = rowNumber To 1 Step -1 ' step through reference range rows from the last baxkwards to the first
If WorksheetFunction.Count(.Rows(i)) = 0 Then
emptyRows(rowCounter) = i + .Rows(1).Row - 1 ' fill array in current index with current row index
rowCounter = rowCounter + 1 ' update array index
End If
Next
End With
ReDim Preserve emptyRows(0 To rowCounter) ' redim the array according to the actual number of found empty rows
FindAllEmptyRows = emptyRows
End Function
обратите внимание, что:
emptyRows(rowCounter) = i + .Rows(1).Row - 1
хранит индекс строки absolute , т. е. индекс строки листа, тогда как
emptyRows(rowCounter) = i
будет хранить индекс строки relative , т. е. индекс строки с UsedRange
, который может начинаться с строки, отличной от строки 1
emptyRows()
необходимо подбирать, чтобы соответствовать данным, используя ReDim
.Column = 16384
следует изменить на .Column = sheet.Columns.Count
. If WorksheetFunction.CountA(sheet.Rows(i)) = 0 Then
Cells
должен быть квалифицирован для sheet
: sheet.Cells(i, 1)
Function FindAllEmptyRows(sheet As Worksheet) As Variant
Dim emptyRows() As Variant
Dim i As Long, rowNumber As Long
Dim rowCounter As Integer
rowNumber = sheet.UsedRange.Rows.Count
For i = rowNumber To 1 Step -1
If sheet.Cells(i, 1).End(xlToRight).Column = sheet.Columns.Count And Cells(i, 1) = "" Then
If rowCounter = 0 Then
ReDim emptyRows(0)
Else
ReDim Preserve emptyRows(rowCounter)
End If
emptyRows(rowCounter) = i
rowCounter = rowCounter + 1
End If
Next
FindAllEmptyRows = emptyRows
End Function
Range.SpecialCells()
можно использовать для разделения Range
на области ячеек, которые соответствуют определенным критериям.
MSDN - Range.SpecialCells Method (Excel)
Возвращает объект Range, который представляет все ячейки, соответствующие указанному типу и значению
< blockquote>Одним из наиболее полезных методов в Excel (по моему опыту) является метод SpecialCells. При использовании он возвращает объект диапазона, который представляет только те типы ячеек, которые мы указываем. Например, можно использовать метод SpecialCells для возврата объекта Range, который содержит только формулы. Фактически, мы можем, если хотим, даже сузить его дальше, чтобы наш объект Range (содержащий только формулы) возвращал только формулы с ошибками.
Изучение вывода этого кода должно дайте вам хорошие идеи о том, как использовать SpecialCells.
Sub SpecialFoo() Dim rArea As Range, rBlanks As Range, rFormulas As Range, rConstants As Range, rUnion As Range Dim sheet As Worksheet Set sheet = ActiveSheet On Error Resume Next Set rBlanks = sheet.UsedRange.SpecialCells(xlCellTypeBlanks) On Error GoTo 0 If Not rBlanks Is Nothing Then For Each rArea In rBlanks.Areas Debug.Print "rBlanks Areas: "; rArea.Address Next End If On Error Resume Next Set rFormulas = sheet.UsedRange.SpecialCells(xlCellTypeFormulas) On Error GoTo 0 If Not rFormulas Is Nothing Then For Each rArea In rFormulas.Areas Debug.Print "rFormulas Areas: "; rArea.Address Next End If On Error Resume Next Set rConstants = sheet.UsedRange.SpecialCells(xlCellTypeConstants) On Error GoTo 0 If Not rConstants Is Nothing Then For Each rArea In rConstants.Areas Debug.Print "rConstants Areas: "; rArea.Address Next End If If Not rFormulas Is Nothing And Not rConstants Is Nothing Then Set rFormulas = Union(rConstants, rFormulas) For Each rArea In rFormulas.Areas Debug.Print "rUnion Areas: "; rArea.Address Next End If End Sub