Я хотел добавить отличный пример того, как «EnableDelayedExpansion» (EDE) может быть полезен вне вездесущих примеров цикла FOR.
Вот строка данных землетрясения, которую я хочу проанализировать (I назовите это 1line.txt)
ak_11574812 2015.04.29.193822 62.9525 -148.8849 1.0 9.5 1 49km S Кантуэлл, Аляска
Проблема, с которой я столкнулся, заключалась в том, что последний сегмент этой строки не всегда начинаются с одного и того же номера столбца. Поэтому мне нужно было создать гибкую команду SET, которая точно вырвет последний сегмент этой строки.
ECHO OFF
setlocal enableDelayedExpansion
set where=72
set /p line=<1line.txt
set locate=!line:~%where%,28!
echo %locate%
EDE позволяет мне помещать переменную (где) внутри другой переменной (строки). EDE сначала преобразует переменную с квадратом в%, а затем обработает переменную, заключенную в скобки! и (в этом случае) выталкивают результаты в переменную «locate».
Хитрость в получении абсолютного относительные адресационные ссылки правильные.
Home
Вкладка, Conditional Formatting
, New Rule
, Use Formula to determine...
Format
, выберите желаемое условное форматирование. Нажмите OK
Format Values where this formula is true:
- =COUNTIF($B2:$E2,B2)>1
$B2:$E2
[1137 ] - строка, содержащая верхнюю левую ячейку выделения. B2
- это верхняя левая ячейка (первая ячейка, выбранная в диапазоне). Обозначение относительного адреса N.B. Текстовые значения в диапазоне, содержащем *
или ?
, вызовут countif
сопоставление с образцом. Матричные совпадения также будут отмечены как дубликаты.
Средство форматирования может использоваться для расширения этого условного форматирования.
* Для условного форматирования дубликатов столбцов поменяйте местами обозначения относительного / абсолютного адреса в диапазоне столбцов Countif
.
Вы можете изменить и попробовать:
Option Explicit
Sub test()
Dim LastRow As Long, LastColumn As Long, Row As Long, Times As Long, Column As Long
Dim str As String
Dim rng As Range
With ThisWorkbook.Worksheets("Sheet1")
'Find last row column A
LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
'Find last column row 1 (with titles)
LastColumn = .Cells(1, .Columns.Count).End(xlToLeft).Column
'Loop rows
For Row = 2 To LastRow
'Loop columns
For Column = 2 To LastColumn
'Loop values
str = .Cells(Row, Column).Value
'Set range for each row
Set rng = .Range(Cells(Row, 2), Cells(Row, LastColumn))
'How many times value appears in row
Times = Application.WorksheetFunction.CountIf(rng, str)
'if appears more than one times
If Times > 1 Then
.Range(Cells(Row, 2), Cells(Row, LastColumn)).Interior.Color = vbGreen
End If
Next Column
Next Row
End With
End Sub