返回列表 上一主題 發帖

跨欄對比

本帖最後由 Andy2483 於 2024-3-5 13:35 編輯

回復 20# 198188

序號欄原本沒有合併儲存格,基於資料的完整性,序號都一定會有,所以以A欄最後有內容儲存格來判斷其縱向範圍,
如今如果改為有合併儲存格,可以以模號欄B欄判斷縱向範圍
原本  Set xA = Range(ActiveSheet.[G1], ActiveSheet.[A65536].End(3))
改為  Set xA = Range(ActiveSheet.[G1], ActiveSheet.[B65536].End(3)(1, 0))
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

回復 20# 198188

模号..."固定"只在A及H欄?? 其它欄位沒有?
工作項目...只有"噴油"???

TOP

回復 22# 准提部林


    所有位置固定欄位,只有執行的工作表名稱會有不同。

TOP

回復 21# Andy2483


    改了,不過還是一樣。
就算不是合并的儲存格也發生不能讀取的問題。
你看看附件,我改完后,運行了,也是出現這個問題。

對比.rar (29.67 KB)

TOP

回復 22# 准提部林


    另外因爲VBA裏面用中文會有亂碼,所以 ”噴油“ 兩字才安排讀取 KP & KH 儲存格的" 噴油"

TOP

回復 24# 198188


    哪一筆 發生不能讀取的問題??
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

回復 26# Andy2483


    圖片是全部結果,第2-79行已經沒有資料,第80行有,第81 -84行沒有, 第85行有。

TOP

回復  Andy2483


    可以了,謝謝!

Set xA = Range([1!G1], [1!A65536].End(3))
Intersect([1!M ...
198188 發表於 2024-3-5 08:58


修改為用activesheet就要在表 "1"下執行,否則會抓不到資料,
如果在工作表不更換順序的前提下可以用工作表索引號

Option Explicit
Sub TEST()
Dim Arr, Brr, Crr, V$, Z, i&, T$, TT$, A, xA As Range, N%
Set Z = CreateObject("Scripting.Dictionary")
Set xA = Range(Sheets(1).[G1], Sheets(1).[B65536].End(3)(1, 0))
xA.Offset(1, 12).Resize(, 3).ClearContents:  Brr = xA
For i = 2 To UBound(Brr)
   T = Format(Trim(Brr(i, 2)), "0000000"): V = Format(Val(Brr(i, 7)), "0000000"): TT = T & "/" & V
   Z(TT) = i
Next
Arr = Sheets(1).[M1].Resize(UBound(Brr), 3)
A = Array(Range([KH!C1], [KH!A65536].End(3)), Range([KH!J1], [KH!H65536].End(3)), Range([KP!C1], [KP!A65536].End(3)), Range([KP!J1], [KP!H65536].End(3)))
For Each Crr In A
   Crr = Crr: N = N + 1
   For i = 3 To UBound(Crr)
      T = Format(Trim(Crr(i, 1)), "0000000"): V = Format(Val(Crr(i, 2)), "0000000"): TT = T & "/" & V
      If Z.Exists(TT) Then
         If Arr(Z(TT), 1) = "" Then
            Arr(Z(TT), 1) = Crr(1, 1)
            ElseIf InStr("/" & Arr(Z(TT), 1) & "/", "/" & Crr(1, 1) & "/") = 0 Then
            Arr(Z(TT), 1) = Arr(Z(TT), 1) & "/" & Crr(1, 1)
         End If
         Arr(Z(TT), N \ 3 + 2) = Crr(1, 3)
      End If
   Next
Next
Sheets(1).[M1].Resize(UBound(Brr), 3) = Arr
End Sub
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

回復 28# Andy2483


    用了這個程式,運行后,結果也跟之前一樣。第2-79行沒有資料,第80行有,第81-84行沒有資料

TOP

回復 29# 198188


    資料裡可能有看不見的特殊符號
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

        靜思自在 : 能善用時間的人,必能掌握自己努力的方向。
返回列表 上一主題