Board logo

標題: [發問] VBA_指定對應列變更後的程式碼修正。 [打印本頁]

作者: Airman    時間: 2015-12-19 20:49     標題: VBA_指定對應列變更後的程式碼修正。

本帖最後由 Airman 於 2015-12-19 20:56 編輯

以下是對應第3列時的程式碼~

            RW = Array(.[R6] - 3, .[T5] - 3, .Range("R" & b.Row) - 3)
                    Dim R(1 To 3), L(1 To 3)
                    For y = 1 To 3: Set R(y) = .[J:P].Rows(RW(y - 1) + 6).Cells: Next y
            For K = 1 To 7
                  L(1) = K
                  For y = 2 To 3
                      L(y) = Application.Match(R(1)(K), R(y), 0)
                      If IsError(L(y)) Then L(1) = 0: Exit For
                      'If L(y) <> L(1) Then L(1) = 0: Exit For '若要求〔同欄〕,加入這行
                  Next y
                  If L(1) > 0 Then
                    For y = 1 To 3
                        R(y)(L(y)).Select
                        Selection.Interior.ColorIndex = Array(6, 4, 8)(y - 1)
                    Next
                  End If
            Next K


Q_1︰請問︰當對應第3列改為第1列時的程式碼要如何修改?
            RW = Array(.[R6] - 1, .[T5] - 1, .Range("R" & b.Row) - 1)

Q_2︰請問︰當對應第3列改為第2列時的程式碼要如何修改?
            RW = Array(.[R6] - 2, .[T5] - 2, .Range("R" & b.Row) - 2)

Q_3請問︰當對應第3列改為第4列時的程式碼要如何修改?
            RW = Array(.[R6] - 4, .[T5] - 4, .Range("R" & b.Row) - 4)

★★因為三個問題解答是要放在三個不同的檔案,所以煩三個問題分開獨立作解。謝謝!

PS︰本來有想開三題發問比較清楚,但恐被誤解是為增加點數,所以併題發問,敬請見諒。

以上  懇請各位先進、前輩不吝賜教!  謝謝!

作者: Airman    時間: 2015-12-19 23:24

本帖最後由 Airman 於 2015-12-19 23:33 編輯

依與准提版主大在http://forum.twbts.com/viewthrea ... a=pageD1&page=4
#37比對(因M變數與小弟的原檔案重複,所以在今天的提問裡~將其改為L)~
RW = Array(b(1, -1)-0, b(1, -1) - .[T3], b(1, -1) - .[T3] * 2
For y = 1 To 3: Set R(y) = .[J:P].Rows(RW(y - 1) + 6).Cells: Next y
Dim M(1 To 3)
For k = 1 To 7
  M(1) = k
  For y = 2 To 3
    M(y) = Application.Match(R(1)(k), R(y), 0)
    If IsError(M(y)) Then M(1) = 0: Exit For
    'If M(y) <> M(1) Then M(1) = 0: Exit For '若要求〔同欄〕,加入這行 
  Next y
  If M(1) > 0 Then
   For y = 1 To 3: R(y)(M(y)).Interior.ColorIndex = Array(4, 45, 8)(y - 1): Next
  End If
Next k
本來以為是-0或-1或-2或-3或-4或.....不會有差別
但套進小弟的使用檔中,卻只有-3跑出正確答案,其餘的答案都不符合QQ

摸索了一天~也找不出關鍵的錯誤是在哪裡^^"'

敬請諸位先進、前輩不吝賜教為禱!  感恩^^
作者: Airman    時間: 2015-12-19 23:46

本帖最後由 Airman 於 2015-12-19 23:52 編輯

簡扼的說~
RW = Array(b(1, -1), b(1, -1) - .[T3], b(1, -1) - .[T3] * 2
小弟的認知~就是單純的三個指定期數(列)~
是小弟誤解了嗎

敬請各位高手不吝賜教是幸~感恩
作者: 准提部林    時間: 2015-12-20 11:13

設[R6]=10, 10-4=6, 往下再抓4列, 即為6,7,8,9列為一個區,
所以,
10-4 為此區的第1列
10-3 為此區的第2列
10-2 為此區的第3列
10-1 為此區的第4列
作者: Airman    時間: 2015-12-20 12:10

回復 4# 准提部林
准大:
謝謝您的提醒和指導~抓出Bug了

剛剛再將檔案仔細審視一次,發覺是公式和程式碼沒有配對~
在比對的公式時(.[R6] - 5, .[T5] - 5, .Range("R" & b.Row) - 5)是指三個單期數列,
但在比對的公式時,就如您所指導的一般,但小弟並沒有配上三個區域的程式碼

解決了~萬分感謝您多次耐心費神的教導~感恩............




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)