返回列表 上一主題 發帖

[發問] 如何取多個工作表非空白的值

[發問] 如何取多個工作表非空白的值

工作表"總表"的號是取各工作表重複的值、期限則是工作表名稱
目前已知Worksheet.Name=工作表名稱
其餘尚在努力研究中,求解感謝!

詳如附件(下)
總表重複.rar (19.88 KB)

回復 2# samwang

由衷感謝前輩的幫助,我也努力研究學習中,並標示了註解,不知道是否有誤,還請大大有空再看,謝謝!
  1.     Dim Arr, xD, Brr(1 To 1000, 1 To 2), i&, n%, sh% '宣告變數
  2.     Set xD = CreateObject("Scripting.Dictionary") '設定xD為字典物件
  3.     For sh = 2 To Sheets.Count '工作表2~工作表總數,For迴圈sh(宣告為int)
  4.         With Sheets(sh) '進入工作表,以sh代入
  5.             Arr = .[a1].CurrentRegion '選取a1包含鄰近的所有範圍,Arr為組數
  6.             For i = 2 To UBound(Arr) '第2列~Arr的列上限,For迴圈i(宣告為Long)
  7.                 If xD.Exists(Arr(i, 1)) Then '列是變動的,A欄是固定的,i代入列,判斷字典裡的key有沒有Arr(i, 1),如果有就往下做
  8.                     If Not xD.Exists(Arr(i, 1) & "|" & Sheets(sh).Name) Then '如果字典裡的key沒有Arr(i, 1)就存入字典裡,連同工作表名稱
  9.                         n = n + 1: Brr(n, 1) = Arr(i, 1) '將Arr(i, 1)重複的資料存給Brr(n, 1)
  10.                         Brr(n, 2) = Sheets(sh).Name '將Arr(i, 1)重複時的工作表名稱存入Brr(n, 2)
  11.                     End If
  12.                     xD(Arr(i, 1) & "|" & Sheets(sh).Name) = "" '如果字典裡的key有Arr(i, 1)就存入字典裡,連同工作表名稱
  13.                 Else '判斷字典裡的key有沒有Arr(i, 1),如果沒有就往下做
  14.                     xD(Arr(i, 1)) = "" '將Arr(i, 1)存入字典裡
  15.                 End If
  16.             Next
  17.         End With
  18.         xD.RemoveAll '清空字典中的數據
  19.     Next
  20.     If n > 0 Then '如果有找到重複的資料往下做
  21.         With Sheets("總表")
  22.             .[a1].CurrentRegion.Offset(1) = "" '清空A、B欄數據,保留標題
  23.             .Range("a2").Resize(n, 2) = Brr '將Brr組數釋放到A、B欄
  24.         End With
  25.     End If
複製代碼

TOP

回復 5# 准提部林


    非常感謝版主抽空觀看我的問題,也讓我對程式又更深一層的理解,
    版主的答案讓我可以更快速自行更改條件,讓我對於嚴謹的程式碼有進一步的學習。

    唯獨有一小段程式碼還不懂,希望版主能解惑,我也持續在網路上尋找這段的解答。
    xD(T) = -9 ^ 9

TOP

回復 7# 准提部林


   原來如此,版大的意思是讓就算再次遇到更多次重複的,也不會因為被存放到Brr中,對嗎?謝謝版大。

TOP

回復 5# 准提部林


    版主您好,我自我練習新增了進階題,改寫了一下,但是出現錯誤'424,此處需要物件。

    總表重複2.rar (26 KB)

   
    錯誤程式碼:Brr(N, 0) = Arr(i, 1).Resize(i, 3)

TOP

回復 10# 准提部林


    非常感謝版主抽空幫助解題,
   後面發現姓名有機會重複,我改了雙主鍵  T = Arr(i, 2) & Arr(i, 3)
   就排除了,得到所需要的表格內容,可說是受益良多。

TOP

回復 12# 准提部林

    謝謝版主大大,剛好也讓我明白了為什麼samwang前輩所使用的
    Arr(i, 1) & "|" & Sheets(sh).Name 中的 "|" 原因了,
    嚴謹的程式碼真的很重要,也是我一直缺少且必須不斷學習的!

TOP

回復 12# 准提部林

准大您好,
關於http://forum.twbts.com/viewthread.php?tid=21077
3樓准大發表的文章中要如何達成U>0及U<0在我的問題中呢?
U>0  重複時的第一筆資料
U<0  重複第二筆資料以上

目前能改寫的部分
xD(T) = 1  去除重複
xD(T) = 2  重複第二筆資料
xD(T) = 3  重複第三筆資料
xD(T) >1  重複第二筆資料
xD(T) >2  重複第三筆資料

不知有沒有辦法改寫成重複時的所有資料,也就是U>0和U<0
詳如附件,總表為答案,謝謝准大


總表重複3.rar (26.42 KB)

TOP

回復 12# 准提部林

    版主您好,目前有解開一半了,

    U<0  重複第二筆資料以上,已透過xD(T) <> 1解開了,
    只剩下U>0  重複時的第一筆資料,還沒想出來了,繼續努力中。

TOP

回復 17# 准提部林


    samwang大,萬分感謝,三個願望一次滿足。

   1.不知為何要存兩次主鍵給字典?可能我理解有誤
   2.RemoveAll要加在哪可以讓工作表各自獨立作業

TOP

        靜思自在 : 【為善競爭】人生要為善競爭,分秒必爭。
返回列表 上一主題