EXCEL 資料查詢的巨集使用

匿名
2023-05-15T12:54:34+00:00

EXCEL 資料查詢的巨集使用

目的:希望能建立一個 巨集 能從客戶資料中快速搜尋訂單

資料庫 大致如下

希望建立的巨集如下 /輸入 月跟日 能把當天需要出貨的訂單整列拉出來

資料庫會一直更新資料

我有嘗試使用 錄製巨集 卻不適合我想要的模式 (因為資料會一值更新 )

圈起來兩處是我認為 資料更新無法 克服的地方

希望能有人 幫我解惑

1.如何創出我需要的巨集

2.我錄製的巨集能怎麼做修正

萬分感謝

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

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

0 則留言 沒有留言

16 個回答

排序依據: 最實用
  1. 匿名
    2023-05-16T07:32:39+00:00

    你好

    感謝您的反饋。

    很抱歉,不幸的是,我沒有提供任何進一步的故障排除。

    論壇上有許多知識淵博的使用者,我希望其他人可以對您的問題提供進一步的見解。

    親切問候 沙基魯

    這回覆已被自動翻譯,因此,可能出現文法錯誤或表達不當。

    此回答有幫助嗎?

    0 則留言 沒有留言
  2. 匿名
    2023-05-15T16:07:00+00:00

    再次感謝你的回覆 但還是無法使用

    你的程式碼 因為被翻譯過 所以我看到的可能會跟你想表達的有點不一樣

    我修正過你的程式碼如下

    Sub QueryAndCopyData()

    Dim searchValueA As Variant, searchValueB As Variant

    Dim foundRows As Range, foundRow As Range

    Dim pasteRange As Range

    Dim wsOrder As Worksheet, wsQuery As Worksheet

    Dim lastRow As Long, result As Variant

    Set wsOrder = Worksheets("訂單整理")

    Set wsQuery = Worksheets("查詢訂單")

    searchValueA = wsQuery.Range("D3").Value

    searchValueB = wsQuery.Range("F3").Value

    lastRow = wsOrder.Cells(wsOrder.Rows.Count, "J").End(xlUp).Row

    result = Application.XLookup(searchValueA & searchValueB, wsOrder.Range("J1:K" & lastRow), wsOrder.Range("A1:O" & lastRow), 0, 2)

    If Not IsError(result) Then

    Set pasteRange = wsQuery.Range("B8") 
    
    For i = LBound(result) To UBound(result) 
    
        Set foundRow = wsOrder.Rows(result(i)) 
    
        foundRow.Copy Destination:=pasteRange 
    
        Set pasteRange = pasteRange.Offset(1, 0) 
    
    Next i 
    
    MsgBox "查詢成功。數據複製到查詢順序表。" 
    

    Else

    MsgBox "未找到匹配的配置檔。" 
    

    End If

    End Sub


    執行後 顯示 查無匹配的項目 我不曉得 問題出在哪邊

    或是你能重新幫我設計一個能成功抓取我要的資料的程式碼嗎

    首先我的查詢頁面長這樣

    影像

    利用D3欄位所輸入的值 來對資料庫 J列作搜索

    且

    利用F3欄位所輸入的值 來對資料庫 K列作搜索

    影像
    當兩個條件都達成 則把整列資料複製(可能會有30列左右)


    同樣我的動作 如果用以下圖片這個功能也可以完成

    但是因為 未來要使用這個表格的是寶寶等級的使用者 他們不會這些功能 所以我必須把它建立成一個巨集 讓它們做搜索

    影像

    影像

    影像

    將篩選出的資料 複製並貼在我想要的工作表上

    影像

    影像

    影像

    再次感謝你用心地回復

    此回答有幫助嗎?

    0 則留言 沒有留言
  3. 匿名
    2023-05-15T15:39:41+00:00

    嗨大頭陳

    感謝您的反饋。

    請嘗試以下操作: Sub QueryAndCopyData() 將搜索值 A 作為變體,將搜索值 B 作為變體 將找到的行調暗為範圍,找到的行作為範圍 暗淡粘貼範圍作為範圍 將 wsOrder 調暗為工作表,將 wsQuery 顯示為工作表 將最後一行調暗為長,結果為變體 昏暗我只要

    ' 設定工作表物件 設置 wsOrder = 工作表(“訂單查詢”) 設定 wsQuery = 工作表(“查詢順序”)

    ' 從指定的儲存格中取得搜尋值 searchValueA = wsQuery.Range(“D3”).價值 searchValueB = wsQuery.Range(“F3”).價值

    ' 尋找訂單查詢表J列中的最後一行 lastRow = wsOrder.Cells(wsOrder.Rows.Count, “J”).結束(xlUp)。排

    ' 執行 XLookup 以查找匹配的行 result = Application.XLookup(searchValueA & searchValueB, wsOrder.Range(“J1:K” & lastRow), wsOrder.Range(“A1:O” & lastRow), 0, 2)

    ' 檢查是否找到任何匹配的設定檔 如果不是 IsError(result) 則 ' 初始化粘貼範圍 Set pasteRange = wsQuery.Range(“B8”)

    ' 遍曆結果陣列並複製找到的行 For i = LBound(result) To UBound(result) Set foundRow = wsOrder.Rows(result(i)) foundRow.Copy Destination:=pasteRange 設定貼上範圍 = 貼上範圍.偏移量(1, 0) 下一頁 i

    消息框「查詢成功。數據複製到查詢順序表。 還 消息框「未找到匹配的配置檔。 結束如果 結束子

    確保將工作表名稱(“訂單查詢”和“查詢訂單”)替換為Excel工作簿中的實際名稱。此外,請確保搜索值(“D3”和“F3”)和粘貼區域(“B8”)的單元格引用準確無誤。

    請記住將此宏分配給按鈕或鍵盤快速鍵以執行。如果有任何錯誤,代碼將顯示相應的錯誤消息。

    此致敬意

    這回覆已被自動翻譯,因此,可能出現文法錯誤或表達不當。

    此回答有幫助嗎?

    0 則留言 沒有留言
  4. 匿名
    2023-05-15T15:16:37+00:00

    感謝你的回覆 因為我的資料庫中沒有日期的形式 所以你提供的程式碼 無法使用

    我的程式碼 是不能成功執行的
    如下


    Sub 查詢並複製資料()

    Dim searchValueA As Variant, searchValueB As Variant 
    
    Dim foundRows As Range, foundRow As Range 
    
    Dim pasteRange As Range 
    
    Dim wsOrder As Worksheet, wsQuery As Worksheet 
    
    Dim lastRow As Long, result As Variant 
    
    Set wsOrder = Worksheets("訂單查詢") 
    
    Set wsQuery = Worksheets("查詢訂單") 
    
    searchValueA = wsQuery.Range("D3").Value 
    
    searchValueB = wsQuery.Range("F3").Value 
    
    lastRow = wsOrder.Cells(wsOrder.Rows.Count, "J").End(xlUp).Row 
    
    result = Application.XLookup(searchValueA & searchValueB, wsOrder.Range("J1:K" & lastRow), wsOrder.Range("A1:O" & lastRow), 0, 2) 
    
    If Not IsError(result) Then 
    
        For i = LBound(result) To UBound(result) 
    
            Set foundRow = wsOrder.Rows(result(i)) 
    
            If Not pasteRange Is Nothing Then 
    
                Set pasteRange = pasteRange.Offset(1, 0) 
    
            Else 
    
                Set pasteRange = wsQuery.Range("B8") 
    
            End If 
    
            foundRow.Copy Destination:=pasteRange 
    
        Next i 
    
        MsgBox "查詢成功。" 
    
    Else 
    
        MsgBox "找不到符合條件的資料。" 
    
    End If 
    

    End Sub


    我設計的表格 如下
    紅色框起來是讓我輸入月份去查詢資料 (D3欄位)
    黑色框起來是讓我輸入日期去查詢資料 (F3欄位)

    我寫的 程式碼 是希望在資料庫的J欄位 有符合 我所想要查詢的月份 且 K欄位有符合我想要查詢的日期

    這兩個條件都達成後

    把那一整列複製下來 並在新的工作表上貼上

    但不知道為什麼 我的程式碼 始終無法使用

    此回答有幫助嗎?

    0 則留言 沒有留言
  5. 匿名
    2023-05-15T13:39:12+00:00

    嗨,大頭陳!

    請您嘗試在此處粘貼您的 VBA 代碼嗎?

    但是,您可以嘗試編輯以下VBA代碼: Sub SearchOrdersByDate() 暗淡搜索日期為日期 暗淡順序範圍作為範圍 將順序暗淡為範圍

    ' 提示使用者輸入搜尋日期 搜尋日期 = 輸入框(“輸入要搜索的日期 (月/日/年):”, “搜索訂單”)

    ' 設置包含訂單數據的範圍 ' 根據您的資料庫佈局更新範圍位址和工作表名稱 設置訂單範圍 = 工作表(“工作表 1”)。範圍(“A2:E100”)

    ' 清除任何以前的搜尋結果 工作表(“工作表2”)。使用範圍.清除內容

    ' 迴圈遍曆每個訂單並將匹配的訂單複製到新工作表 對於每個訂單 在訂單範圍中。行 如果訂購。細胞(1,1)。值 = 搜索日期然後 次序。複製目的地:=工作表(“工作表2”)。範圍(“A”和行.計數)。結束(xlUp)。偏移(1) 結束如果 下一個訂單

    ' 結果工作表中的自動調整列 工作表(“工作表2”)。UsedRange.Columns.AutoFit

    ' 通知使用者搜尋完成 消息框“搜索完成。找到“ & Worksheets(”Sheet2“)。UsedRange.Rows.Count - 1 & “ orders.” 結束子

    該宏將提示您輸入日期(月/日/年格式)以搜索訂單。然後,它會將匹配的訂單複製到名為“Sheet2”的新工作表中。結果表將自動調整列寬,消息框將顯示找到的訂單數。

    關於更正錄製的宏,如果您提供有關錄製過程中遇到的問題或錯誤的更具體的詳細資訊以及錄製的代碼本身,將會很有説明。這將使我們能夠識別問題並對錄製的宏提出更正或改進建議。

    如果您需要其他説明,請告訴我,我將很樂意為您提供進一步的説明。

    此致敬意 沙基魯

    這回覆已被自動翻譯,因此,可能出現文法錯誤或表達不當。

    此回答有幫助嗎?

    0 則留言 沒有留言