返回列表 上一主題 發帖

[發問] 求助~~用VBA製作一個資料尋找~資料搬移的方法~~

[發問] 求助~~用VBA製作一個資料尋找~資料搬移的方法~~

我想要用VBA寫一個   歷年成績    的匯入工具。
(1)要從95年下學期期中考工作表    匯到指定的儲存格內。
(2)像  劉致淵  ;假如我不小心在  歷年成績 內建了兩個劉致淵的名子,則兩筆都要能填入   劉致淵歷年成績。
(3)如果程式執行找 江清宜 時,要有方法  能回傳它的列的值  為10 。
(4)另外一個按鈕功能是~~能把所有重覆的名子~儲存格變成紅色底。

(5)我目前的寫法是用兩個for迴圈找,
  (a) 先取出     95年下學期期中考      A3內人名王小明-
  (b)再到歷年成績內用for迴圈從A3、A4、A5、A6…往下找,找到再搬資料。
  (C)再取出   95年下學期期中考      A4內人名鄭阿娟。
  (D)再到歷年成績內用for迴圈從A3、A4、A5、A6…往下找,找到再搬資料。
就是以前學校學的那套
但當資料很大時,發覺它要一些時間才跑完。
覺得沒效率
故求助~~各位先進指導有無其他 較好的~~~方法,可以改善  謝謝~~~~感恩~~~~   ^^    。

本帖最後由 register313 於 2012-5-13 23:04 編輯

回復 1# ji12345678

發問須知:
1.發問者請上傳EXCEL壓縮檔(小學生也可以)
2.配合EXCEL檔請把功能說明清楚

幫助自己!也給答題者一個方便!
  1. Sub xx()
  2. With Sheets("歷年成績")
  3.   Set Rng = .Range("A3:A" & .[A65536].End(xlUp).Row)
  4.   Rng.Interior.ColorIndex = 0
  5.   For C = 2 To .[IV1].End(xlToLeft).Column
  6.     Sh = .Cells(1, C) & .Cells(2, C)
  7.     For S = 1 To Sheets.Count
  8.       If Sh = Sheets(S).Name Then
  9.       For Each A In Rng
  10.         X = Application.VLookup(A.Value, Sheets(Sh).[A3:B65536], 2, 0)
  11.         If Not IsError(X) Then A.Offset(0, C - 1).Value = X
  12.         If Application.CountIf(Rng, A) > 1 Then A.Interior.ColorIndex = 3
  13.       Next
  14.       End If
  15.     Next S
  16.   Next C
  17. End With
  18. End Sub
複製代碼

TOP

回復 2# register313
register313大大
可以麻煩寫一下註解嗎??
小弟也有需要類似的功能
但是看不太懂= =
煩請抽空.....

TOP

回復 3# toxin
  1. Sub xx()
  2. '設定以下在歷年成績工作表之下工作
  3. With Sheets("歷年成績")
  4.   '設定歷年成績中A3~A欄最後一列為Rng範圍
  5.   Set Rng = .Range("A3:A" & .[A65536].End(xlUp).Row)
  6.   '清除Rng範圍之底色
  7.   Rng.Interior.ColorIndex = 0
  8.   '迴圈1:C=2~第1列最後1欄之列號(第1列有值的範圍)
  9.   For C = 2 To .[IV1].End(xlToLeft).Column
  10.     'Sh=B1&B2,C1&C2,D1&D2(設定學年度學期考次名稱)
  11.     Sh = .Cells(1, C) & .Cells(2, C)
  12.     '迴圈2:S=1~最後一張工作表之數量
  13.     For S = 1 To Sheets.Count
  14.       '若(學年度學期考次名稱)=(工作表名稱)則執行迴圈3
  15.       If Sh = Sheets(S).Name Then
  16.       '迴圈3:A=A3~A欄最後一列之值
  17.       For Each A In Rng
  18.         '查A(姓名)在相對(學年度學期考次)工作表A3~A65536之位置,找到後傳回第2欄之值(分數)
  19.         X = Application.VLookup(A.Value, Sheets(Sh).[A3:B65536], 2, 0)
  20.         '若傳回值(分數)不是錯誤則A(姓名)向右偏移C-1欄後填入分數
  21.         If Not IsError(X) Then A.Offset(0, C - 1).Value = X
  22.         '若A(姓名)在A3~A欄最後一列重覆出現,則填入紅色底色
  23.         If Application.CountIf(Rng, A) > 1 Then A.Interior.ColorIndex = 3
  24.       Next
  25.       End If
  26.     Next S
  27.   Next C
  28. End With
  29. End Sub
複製代碼

TOP

回復 4# register313

感謝register313大大抽空寫註解
小弟這兩天研究一下有問題再麻煩大大了
感恩

TOP

謝謝各位先進熱心指教,來到這�堻o個論譠真的學到好多,感謝~~~。

TOP

藉著各位提問及高手的不吝解答,讓有心學習的能提升自己EXCEL的功力,很高興能來這論壇^^

TOP

感謝分享.
建議變數在使用之前, 進行宣告.

TOP

        靜思自在 : 站在半路,比走到目標更辛苦。
返回列表 上一主題