能不能讓程式偵測【工作表"總表"中的D行內的值】符合【工作表"案件清單"中的哪一個儲存格內的值】,並將【工作表"案件清單"符合的儲存格的右側儲存格的值】接著將【工作表"總表"E行的值】分配過去呢?或是其實我搞錯了有沒有甚麼更效率的方法?

匿名
2024-12-07T15:13:36+00:00

從 這個對話 分割。

很抱歉一直麻煩你,不過我剩下最後2個問題了!(應該)

1.能不能告訴我要怎麼更改"總表"中想要分配資料的列呢?

原本是看A1是什麼工作表名,將B1分配過去的設計;我想要改成看D1顯示的工作表名,並將E1分配過去。

2.工作表名的部分(承上題更改後的話,指的就是D行),其實它顯示的是公司本身賦予的案件號碼(A、C、E行),然而我的其他工作表名稱其實是我自己賦予的流水號(B、D、F行,然而這個才是原本問題中的索引名稱)。而我製作了一個工作表名為"案件清單"大概長的像這樣(以下皆為假資料):

A B C D E F G
1 案件類型A 案件類型B 案件類型C
2 王小名A3-001 客戶1 周周姐B3-001 客戶4 李大豪C3-001 客戶7
3 王小美A3-002 客戶2 林淑華B3-002 客戶5 王清美C3-002 客戶8
4 李明哥A3-002 客戶3 陳美華B3-003 客戶6 劉德華C3-003 客戶9

我的問題是:能不能讓程式偵測【工作表"總表"中的D行內的值】符合【工作表"案件清單"中的哪一個儲存格內的值】,並將【工作表"案件清單"符合的儲存格的右側儲存格的值】接著將【工作表"總表"E行的值】分配過去呢?或是其實我搞錯了有沒有甚麼更效率的方法?

Microsoft 365 與 Office | Excel | 家用版 | Windows

鎖定的問題。 此問題已從 Microsoft 支援服務社群移轉。 您可以對其是否有幫助進行投票,但無法對問題新增註解或回覆,或進行追蹤。

0 則留言 沒有留言
由問題作者接受的回答
匿名
2024-12-07T15:42:56+00:00

你好,張書櫃

歡迎來到微軟社區。

如果我没有理解错的话,可以用这个代码(遍歷「總表」的每一行,取得案件編號。 在「案件清單」中尋找符合的案件編號,以取得對應的工作表名稱。 將任務資訊分配到目標工作表中。)

Sub DistributeTasks()
    Dim summaryWs As Worksheet
    Dim caseListWs As Worksheet
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim lastCaseRow As Long
    Dim i As Long
    Dim j As Long
    Dim targetWs As Worksheet
    Dim targetRow As Long
    Dim caseNumber As String
    Dim sheetName As String

    Set summaryWs = ThisWorkbook.Sheets("總表")
    Set caseListWs = ThisWorkbook.Sheets("案件清單")
    lastRow = summaryWs.Cells(Rows.Count, 4).End(xlUp).Row
    lastCaseRow = caseListWs.Cells(Rows.Count, 1).End(xlUp).Row

    For Each ws In ThisWorkbook.Worksheets
        If ws.Name <> "總表" And ws.Name <> "案件清單" Then
            ws.Range("A1:B" & ws.Cells(Rows.Count, 1).End(xlUp).Row).ClearContents
        End If
    Next ws

    For i = 1 To lastRow
        caseNumber = summaryWs.Cells(i, 4).Value
        sheetName = "" 

        For j = 2 To lastCaseRow
            If caseListWs.Cells(j, 1).Value = caseNumber Then
                sheetName = caseListWs.Cells(j, 2).Value
                Exit For
            ElseIf caseListWs.Cells(j, 3).Value = caseNumber Then
                sheetName = caseListWs.Cells(j, 4).Value
                Exit For
            ElseIf caseListWs.Cells(j, 5).Value = caseNumber Then
                sheetName = caseListWs.Cells(j, 6).Value
                Exit For
            End If
        Next j

        If sheetName <> "" Then
            On Error Resume Next
            Set targetWs = ThisWorkbook.Sheets(sheetName)
            On Error GoTo 0

            If Not targetWs Is Nothing Then
                targetRow = targetWs.Cells(Rows.Count, 1).End(xlUp).Row + 1
                targetWs.Cells(targetRow, 1).Value = targetRow
                targetWs.Cells(targetRow, 2).Value = summaryWs.Cells(i, 5).Value
            End If
        End If
    Next i
End Sub

最美好的祝願

Aiden.C - MSFT |Microsoft社群支援專家

此回答有幫助嗎?

有 1 人認為此回答有所幫助。
0 則留言 沒有留言

1 個其他答案

排序依據: 最實用
  1. 匿名
    2024-12-07T16:18:18+00:00

    真的謝謝你,我已經下跪了。

    非常感謝你們的幫忙。

    如果有英雄我想就是像你這樣的人。

    真的非常感謝😭

    此回答有幫助嗎?

    0 則留言 沒有留言