簡體   English   中英

在一個范圍內選擇單元格,而不根據值取消選擇其他單元格

[英]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

到目前為止,這就是我的結果。 它只計算包含單詞WageSum的單元格的數目,如果計數僅為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM