請教在EXCEL裡不同工作表時,若予比較標題欄名稱相等時,但列數不等時的VBA簡易方法

恩..大致情況是假設目的工作表名為A
來源工作表則為B、C、D、E、F、G......等計百個以上
如此當我予從A工作表裡去模擬excel vlookup函數的方法時,去這些百個來源工作表找相同標題名稱(欄),卻不同列的資料時
想同高手們請教,您們都用何種方法來速決比對,找得後再貼入到目的A

我試了一堆,如陣列、或function..或vlookup
但感覺語法都挺亂的..
尤其當標題欄名一大堆時...若採用function
我必須先將標題欄內的名一一丟入到變數..然後再由VBA去回傳欄位的數值
因為VBA裡好像不能直傳回欄位的英文...如超過Z欄後..我就不知道要怎麼正確傳回欄位了
所以只能傳回欄位索引編號..

可是由於我有很多不同的工作簿,且常需要在不同的工作簿裡的內部工作表內去找先前已key過的資料..然後再複製貼到目的工作表內
由於欄位名稱在不同工作簿都不相同..也因此若我老在那重編程..實在快吃不消
無奈只好前來求救高手們有無好的方法可以快速解決..

在此真的也不知說些什麼好.
我只能誠心表達感謝與祝褔您們的幫助跟回覆.
再次說聲謝謝。
我沒研究過VBA,不過建議可以到臉書的社團問問看。
https://www.facebook.com/groups/excel.com.tw/about
也有VBA相關的社團。
MaverickRay
我都忘記了,其實我有加入過,人...果然不能有太多煩心事...一雜心亂..很多事都搞得亂七八糟的
wilson.tom
[打氣][打氣][打氣]
看樓主幾篇的問題
我覺得應該考慮使用資料庫管理資料
然後資料要做正規化
這樣之後才比較好管理
MaverickRay
這個我也很想哦,問題在我買了五六本書吧,大部份都是在講VBA的寫法..好像目前還沒看到有關該處理的部份..也可能是我近一二年被許多雜事煩心..所以書都看一半就沒有時間再深究..哎..謝謝您的回覆哦
以下欄位表示方式不知是否您要的,供您參考

儲存格: Cell
Cells(1, 1).Value = 23

Cells 將第一行第一列的儲存格

Cells配合Range

Range(Cells(1, 1), Cells(4, 2)).Value = 13


列(直)
Columns(2).Select


行(橫)
Rows(3).Select
et3x wrote:
以下欄位表示方式不知(恕刪)
恩,,不好意思我試著跑了下,感覺不太一樣的意思
放兩個大致的示意圖
工作表000是比較新的,而001則是先前的
000裡的欄位多了個配件,且此欄位是後續想到才做插入在其中的
這麼一來問題就來了,其它的身高啦、血型欄、專長欄等.....
事先都在001工作表內key過了
而000工作表只有輸入姓名的前提下,我想令其能自動往前去回朔看有沒有已key過的後欄位資料時,便將其自動對應到同欄位,且列裡的對應格.
這問題在處理欄位不變的前提下,其實也都好處理.
唯一麻煩的是,很多時候在後續的想法下,會在某些欄位中間再做插入的動作..如此
新的工作表若要用程式去抓舊工作表裡的資料時,若採寫死的方法
如sheets("000").cells(2,4)=sheets("001").cells(2,4)時
就會變成在工作表000的D2格裡填入B (正確填入的話,應該是要填入 查無 二字)
之所以會這樣請教的一個很大的原因出在,以往的工作表已有上百頁了
但新入的工作表,插入的欄位放在後欄位的話又感覺很不對..因為很多時必須左右欄一塊看會比較明瞭這新入欄位的用意在幹嗎
也因此還是得用插入的方法才會淺顯易懂..
唯麻煩的就在先前的上百個工作表,可能每隔幾個,其欄位就會有增減..
所以我目前的做法是採回圈先去抓標題列的名稱,然後取其欄位索引編號
再去用列,如劉備...這關鍵字來做搜索
這樣的好處是不易出錯,但問題也很囉唆..會變成每次都要宣告新變數來對新入的欄位做記欄位值的記錄..
而且若換另一個"工作簿"時,又會因標題列名不同,我又必須重搞一回了...= =
曾經用過用陣列的方式,先去抓標題列,然後再一一輸出..
這樣就可避免我自己一個個宣告變數,再來指定變數=什麼標題名時...如:
dim 身高col%,血型Col%,專長Col%
for i = 1 to cell(1,columns.count).end(xltoleft).column
if cells(1,i)="身高" then 身高Col=i
if cells(1,i)="血型" then 血型Col=i
...............
next
............
諸如以上...我光想到一堆標題名時就覺得頭大..
上回有試過用二維陣列來定位
但寫了一陣後,我有點忘了丟在哪去了..且語法久沒用,又生疏了
這問題實在很困惑..所以才來請高手們給個大致方向與指教。看能否省點時間自個在摸索。
以上內容繁瑣,也感謝諸位的不吝指教。謝謝
舊的工作表存在的意義是什麼?
如果只是記錄留存,那每次只要複製之前最後製作工作表的資料到新的即可
複製完再插入欄位,就不需要用 VBA 去抓資料了
MaverickRay
然後呢,可能再過幾天,劉備又會在最新的工作表裡跑出來了,所以這時就必須在偵測到劉備出現時,去補先前工作表裡有劉備這列的後部欄位內的有資料的值..這後面這裡都好處理,
MaverickRay
問題就在每日的列裡,資料不會都是固定不變的,有時今天有的人名,明日可能就又沒有,後天可能又會跑出來了..所以才很麻煩,如果是用手工的..可知道那是道.....令人發瘋的手續,尤其是..有時資料變多時
文章分享
評分
評分
複製連結

今日熱門文章 網友點擊推薦!