[英]Select Cells in a range without deselecting other cells based on a value
我想根據一個值來選擇范圍內的單元格,就像(Ctrl +鼠標單擊)
如果G列的值包含單詞Wage and Sum ,它將被選中。 在圖片的情況下,將選擇5/15工資摘要和4/15工資摘要 。
如果選擇的計數僅為1,則將顯示其數量(j列)。
如果選擇計數為2或更多,則將比較日期。 在圖片的情況下,它是(5/15和4/15)。 將比較日期以獲得最高的日期。 如果有兩個或多個最高日期,則將添加金額,如果只有一個,則將顯示該日期。 這是我的代碼;
Dim ws1 As Worksheet, wsm As Worksheet
Dim wb1 As Workbook
Dim Loc As Range
Dim crt As Integer, r As Long, c As Long, last As Long
ctr = 0
i = 3
Set wb1 = ThisWorkbook
Set ws1 = wb1.Sheets("SHIPNET102")
Set wsm = wb1.Sheets("MACRO TEMPLATE")
last = ws1.Cells(Rows.Count, "A").End(xlUp).Row
Do Until ws1.Cells(i, 7) = ""
Set Loc = ws1.Cells(i, 7).Find(What:="*WAGE*SUM*")
If Loc Is Nothing Then
i = i + 1
Else
ctr = ctr + 1
i = i + 1
End If
Loop
If ctr > 1 Then
'?
Else
r = Loc.Row
c = Loc.Column + 3
wsm.Cells(5, 3) = ws1.Cells(r, c)
End If
到目前為止,這就是我的結果。 它只計算包含單詞Wage和Sum的單元格的數目,如果計數僅為1,則顯示該數目。任何幫助將不勝感激。
我為您添加了一些行。 請讓我知道它是否無效。
Dim ws1 As Worksheet, wsm As Worksheet
Dim wb1 As Workbook
Dim Loc As Range
Dim crt As Integer, r As Long, c As Long, last As Long
Dim CellsToSelect As String
ctr = 0
i = 3
Set wb1 = ThisWorkbook
Set ws1 = wb1.Sheets("sheet2")
Set wsm = wb1.Sheets("Sheet1")
last = ws1.Cells(Rows.Count, "A").End(xlUp).Row
Do Until ws1.Cells(i, 7) = ""
Set Loc = ws1.Cells(i, 7).Find(What:="*WAGE*")
If Loc Is Nothing Then
i = i + 1
Else
If CellsToSelect = Empty Then
CellsToSelect = ws1.Cells(i, 7).Address
Else
CellsToSelect = CellsToSelect & "," & ws1.Cells(i, 7).Address
End If
ctr = ctr + 1
i = i + 1
End If
Loop
If ctr > 1 Then
ws1.Range(CellsToSelect).Select
Else
r = Loc.Row
c = Loc.Column + 3
wsm.Cells(5, 3) = ws1.Cells(r, c)
End If
使用以下代碼比較日期:
Sub Program()
Dim Str As String, str2 As String
Dim MonthS As String, YearS As String
Dim DateS As Date
Str = "12/18 WAGES SUMMARY "
str2 = Trim$(Left$(Str, InStr(Str, " ") - 1))
MonthS = Trim$(Left$(str2, InStr(str2, "/") - 1))
YearS = Trim$(Right$(str2, Len(str2) - InStr(str2, "/")))
DateS = "1/" & MonthS & "/" & YearS
If DateS > "5/8/16" Then
a = 1
Else
a = 2
End If
End Sub
如果G列的值可以采用多種格式(“ 4/15 WAGE Summary”,“ WAGE Summary 4/15”等),那么您可能需要考慮使用正則表達式從文本中提取日期。
在VBA中,可以在Microsoft VBScript正則表達式庫中找到正則表達式,您可以通過在VB編輯器中轉到“工具”>“引用”從項目中引用正則表達式。
如何在單元格和循環中使用Microsoft Excel中的正則表達式(Regex)
http://www.regular-expressions.info/vb.html
提取字符串的日期部分后,可以使用內置的CDate函數將其轉換為日期,並比較兩個日期以獲取最新的日期。
使用的一般方法的另一個問題是,當您重復使用“查找”時,您不會保存先前檢查過的單元格的狀態,這對於比較解析的日期是必需的。
我建議創建一個帶有字符串參數的函數(我們將其稱為GetDate(str作為String)),如果字符串具有“ WAGE”和“ SUMMARY”以及可解析的日期,則返回日期,否則返回Nothing如果輸入字符串不匹配。
在列H處插入一列,該列用公式= GetDate(G2)填充。 然后按H列中的日期降序對數據進行排序。 現在,您可以遍歷符合條件和總和的行,直到找不到日期或日期變舊為止。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.