Fw: [VBA ] 資料自動換欄位(完成)加入VLOOK自動查表

看板Office作者 ((0_ 0))時間11年前 (2015/05/01 15:55), 11年前編輯推噓0(0014)
留言14則, 1人參與, 最新討論串1/1
※ [本文轉錄自 Visual_Basic 看板 #1LGR8kWq ] 作者: hugh509 ((0_ 0)) 看板: Visual_Basic 標題: Re: [VBA ] 資料自動換欄位(完成)加入VLOOK自動查表 時間: Thu Apr 30 12:40:10 2015 ※ 引述《hugh509 ((0_ 0))》之銘言: : 目前希望的格式是 : A B C D E F G H : 1 : 2 編號 名稱 |x001 資料表1 11111 x203 資料表203 20320 : 3 x001 xxxx | 1111111 11111 203203203 20320 : 4 x002 xxxx | 1111111 11111 203203203 20320 : 5 . | 1111111 11111 203203203 20320 : 6 . |x002 資料表2 22222 : . | 2222222 22222 : . | 2222222 22222 ↗ : 200 x203 xxxx | 2222222 22222 : 左邊A、B欄位固定式編號及名稱 : 右邊D2放置網路抓取的表格 : 但是因為抓取的表格很多 : 所以想再一定的編號,如200列後換欄位 : 目前寫出來的是這樣,只能持續向下不會自動換欄 : 但又不知該如何著手才好,請各位大大幫忙謝謝~ : 已更新為可運行,感謝長今大幫助 : Dim PO As Integer : Dim POY As Integer : '清空欄位 : Columns("C:IV").Select : Selection.ClearContents : PO=2 : POY=3 : LRA = Range("A2").End(xlDown).Row : For i = 3 To LRA : If Sheets("匯入資料").Cells(i, 2) <> "" Then : ValuesSno = "$A$" & i : LinkSS = "URL;http://xxxxxx.xxxx" & Sheets("匯入資料").Cells(i, 1) : : If PO >=200 Then : PO = 2 : POY = POY + 3 : End If : With ActiveSheet.QueryTmables.Add(Connection:= _ : LinkSS, Destination:=Sheets("匯入資料").Cells(PO , POY _ : )) : .FieldNames = True : . : . : . : End With : '帶入編號,欄位也是向右邊移兩欄 : Cells(PO , POY) = "=VLOOKUP(A" & i & ",A:B,1,0)" : PO = PO + 4 : End If : Next i 想上面同樣的迴圈,添入下面這段 達到這種自動填表的功能 ("分析資料") A B C D E F 1 編號 品名 2 x0001 xaaa 3 x0002 xbbb Dim mrange As Range Set myrange = Sheets("匯入資料").Range(Cells(PO, POY), Cells(PO + 3, POY + 1)) Sheets("分析資料").Cells(i, 1) = "=VLOOKUP(" & Sheets("匯入資料").Cells(i, 1) & ",匯入資料!$A:$B,1,0)" 編號這段已經可以運行 Sheets("分析資料").Cells(i, 2) = "=VLOOKUP(" & Sheets("分析資料 ").Cells(i, ) & "," & myrange & ",2,0)" 但對於品名這段,卻因為將範圍設為變數無法運行 因為品名在選取的表格中,它的位置是不固定的 有時在第二格,有時在第三格 所以才想用VLOOKUP做,想請教一下該怎樣達到目標? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.252.41.19 ※ 文章網址: https://www.ptt.cc/bbs/Visual_Basic/M.1430368814.A.834.html ※ 發信站: 批踢踢實業坊(ptt.cc) ※ 轉錄者: hugh509 (111.252.41.19), 05/01/2015 15:55:11

05/01 16:45, , 1F
品名的部分,位置變數可用match
05/01 16:45, 1F

05/01 16:45, , 2F
match(""品名"",匯入資料!$1:$1,0)
05/01 16:45, 2F
你好,不太明白你說的 因為我是想將最上面原本"匯入資料"中各自分散的表格內容 填入"分析資料"一個的大表格內,由於"品名"和其他欄位在各自表格內位置不固定 才想用VLOOKUP讓它去找,其實要找到哪一個標的不是問題 現在遇到的問題是VLOOKUP(標的,範圍,欄位,T/F)的範圍 我現在想做的是讓它利用迴圈選起"匯入資料"獨立的表格 匯入到"分析資料"B欄-品名中 如第一個迴圈找表格D2:E5,第二個迴圈找D6:E9... 就是這裡的範圍變數,一直無法運作成功 感謝你的回覆,想請教一下VLOOKUP有辦法這樣做嗎??

05/01 19:10, , 3F
用for each 變數 in range.areas...next的方式
05/01 19:10, 3F

05/01 19:14, , 4F
https://goo.gl/QWKC4s 範例檔,要取範圍字串,再將
05/01 19:14, 4F

05/01 19:14, , 5F
select改為address
05/01 19:14, 5F
Set usedrng = Cells.SpecialCells(2, 3) 看到這新方法很興奮,雖然google爬完 試了很久才大概知道怎麼使用它來控制範圍 原本設想是每匯入一個表格,然後去抓那個表格範圍 可是現在遇到兩個問題 1.抓取的工作表是用來填入的 2.抓取範圍確實跟著迴圈向下跑,但只有抓左邊的欄目 右邊的內容沒有被框到,變成這個狀況 http://i.imgur.com/ZsqahEg.png
但我用你給我的範本做,的確就是選取最後的整個表格沒錯 這該怎麼解決?? 感謝

05/01 23:36, , 6F
在那for each ...next 內在設個for each..next配合resize
05/01 23:36, 6F

05/01 23:37, , 7F
及offset,可以的話請提供檔案
05/01 23:37, 7F
非常謝謝你回應,第一個問題已經解決了 只是沒有設好位置,不過第二個問題 我想了好久沒辦法解決 Set usedrng = Cells.SpecialCells(2, 3) ↑確實取到想要的範圍(列) 不過還是不知道怎麼和Resize(,1)結合 把C1:C16等範圍,擴大為C1:D16 For Each a In usedrng.Areas Sheets("分析資料").Cells(i, 2) ="=VLOOKUP(" & Sheets("匯入資料").Cells(i, 1) & ",匯入資料!" & a.Address & ",2,0)" Next

05/02 18:10, , 8F
c1:c16擴大為c1:d16,resize內的1改2試試
05/02 18:10, 8F
還是沒有辦法耶,這兩天資料連不上去 所以我用YAHOO的股票表格做了檔案 類似要把"營業利益率"填入其他工作表 只是我需要的是會自動尋找目標,因為我引用的表格"目標是不固定的" 而且發現SpecialCells,不若想像中好控制 像是引用股票的這個檔案,他的範圍又都不一樣了 http://www.solidfiles.com/d/a73d3876bd/test.xlsm ※ 編輯: hugh509 (111.252.34.130), 05/03/2015 15:13:03

05/03 15:35, , 9F
以檔案的來看,不要用for each ...next,改用range.find的
05/03 15:35, 9F

05/03 15:35, , 10F
方式
05/03 15:35, 10F

05/03 15:39, , 11F
巨集碼內一開始如工作表"匯入資料"已select
05/03 15:39, 11F

05/03 15:40, , 12F
後面有些sheets("匯入資料")就可以省略
05/03 15:40, 12F

05/03 15:43, , 13F
已想有dim(宣告)變數,就讓它全部都宣告到,不要想到才宣
05/03 15:43, 13F

05/03 15:44, , 14F
告,巨集碼內的LRA,i,ValuesSno,LinkSS四個變數都沒有宣告
05/03 15:44, 14F
非常感謝你的幫忙,已經解決了~ 謝謝~ ※ 編輯: hugh509 (111.252.34.130), 05/03/2015 16:50:30
文章代碼(AID): #1LGp5WxE (Office)
文章代碼(AID): #1LGp5WxE (Office)