返回列表 上一主題 發帖

[發問] 階層邏輯判斷

[發問] 階層邏輯判斷

A     B     C     D     E     F      G
1                                        *        6B01M
        2                                        6102B
        2                                        6105B
1                                                2530B
        2                                        2410M
        2                                        241ZM
                3                                2110M
                3                        *        3100B
                        4                        3200B
                        4                *        3200B
                        4                        3600B
                                5                3600B
                        4                        3B00B
                        4                *        3B00B
                        4                *        3B02M
                                5                3B01B0
                        4                *        3B02M
                                5                3B01B
        2                                        4101B
        2                                *        4101B
        2                                        4101B
        2                                        4101B

上面的簡圖是我EXCEL中所出現的圖樣
(因為我無法用表格,只能牽強的用這種方式呈現....Sorry...)
數字是代表階層(由上而下檢視)
如果F欄沒有顯示*字號
則最後G欄的代碼顯示為紅色,反之有*則為黑色

階層的用意:
如果1階為*則2.3.4.5...階都為黑色(不用改變)
如果2階為*則3.4.5.......階都為黑色(不用改變)
.......
如果同階EX: 2下面接著是2則個別依據是否有*來做顏色判別

小弟我目前所做的,只能判別是否有*,但一直想不到該如何依階層判斷的邏輯

麻煩各位大大幫幫忙

以下附上程式碼及EXCEL檔案

謝謝 : )
  1. Sub choose()
  2.    
  3.     Row = Worksheets(1).Range("A35536").End(xlUp).Row

  4.    
  5.     lv = 6
  6.     Dim i As Integer
  7.    
  8.     For i = 1 To Row
  9.    
  10.           'Debug.Print "No." & i
  11.           'Debug.Print "lv:" & lv
  12.                
  13.                
  14.            If Range("A" & i) <> "" And Range("F" & i) = "" Then 'And lv <= 6 Then
  15.            Range("H" & i) = "color1"
  16.            lv = 5
  17.            End If
  18.                

  19.            If Range("B" & i) <> "" And Range("F" & i) = "" And lv <= 5 Then
  20.            Range("H" & i) = "color2"
  21.            lv = 4
  22.            End If


  23.            If Range("C" & i) <> "" And Range("F" & i) = "" And lv <= 4 Then
  24.            Range("H" & i) = "color3"
  25.            lv = 3
  26.            End If
  27.             
  28.    
  29.            If Range("D" & i) <> "" And Range("F" & i) = "" And lv <= 3 Then
  30.            Range("H" & i) = "color4"
  31.            lv = 2
  32.            End If
  33.                
  34.                
  35.            If Range("E" & i) <> "" And Range("F" & i) = "" And lv <= 2 Then
  36.            Range("H" & i) = "color5"
  37.            lv = 1
  38.            End If
  39.                
  40.                
  41.     Next
  42.    
  43. End Sub
複製代碼
Test.zip (15.97 KB)

回復 17# GBKEE

謝謝板大

我測試了幾次就清楚了

又學到了一些東西

謝謝 : )

TOP

回復 16# li_hsien
.Range("A" & i).Resize(, 5).Find("*", .Range("A" & i))
Resize將指定擴充為(幾列,幾欄)的範圍 -> Ai:Ei 的範圍.Find("*", .Range("A" & i))->Find("*" : 尋找有資料的儲存格.
F欄的* 在這裡判斷出來 -> ElseIf .Range("F" & i) = "*" Then
  1. Dim flag(1 To 5) As Boolean-> 初始化 1 - 5 為 False
  2. If .Range("F" & i) = "*" And R = 1 Then Erase flag
  3. '*************************
  4. Erase 陳述式
  5. 重新初始化固定大小陣列的元素,並釋放動態陣列的儲存空間。-> 1 - 5 為 False
  6. '*******************************************
  7.   
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 15# GBKEE

請問 :

Find("*") ->尋找任何有資料的儲存格

所以上面這個*字號

並不是找F欄的*

而是指"有資料"(非空值)的意思嗎???

TOP

回復 14# li_hsien
Find("") ->尋找空白的儲存格
Find("*") ->尋找任何有資料的儲存格
.Find("*", .Range("A" & i))   沒錯 : 是找有有資料的儲存格位置,從A欄開始找吧
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 8# GBKEE

想起問版主大大
R = .Range("A" & i).Resize(, 5).Find("*", .Range("A" & i))

為什麼R會印出儲存格的數字?
.Range("A" & i).Resize(, 5)     <-這段是選取A欄到F吧
.Find("*", .Range("A" & i))      <-這是找有*的儲存格位置,從A欄開始找吧

不知這樣的理解對不對

但我不清楚為什麼他會回傳前面的數字
以下用代碼的區塊
  1. A     B     C     D     E     F
  2. 1                                      *          <-回傳1
  3.          2                                         <-回傳2
  4.          2                                         <-回傳2
  5.                  3                     *          <-回傳3
複製代碼
麻煩大大幫我解惑一下   謝謝 : )

TOP

回復 12# stillfish00


   加了那行就OK!!!
  
   謝謝stillfish00大

   我再來研究研究語法的內容

   : )

TOP

本帖最後由 stillfish00 於 2013-10-29 19:40 編輯

回復 9# li_hsien
你在 For i = 1 To .Rows.Count 前一行加入 .Value = .Value 看看。

附檔的儲存格怪怪的,無法用特殊尋找找到常數儲存格,加上上面的重新賦值就可以了,不知道是為什麼::(
我的判斷邏輯是該行有星號就黃色,沒星號就和上一階同色,(並設定第0階為紅色)。

TOP

感謝   前輩提供~看過受益良多!!!

TOP

回復 8# GBKEE

OK了耶

但板大您的程式碼好精簡

我昨天想了一整天 最後也有想出來

不過都是用最基本的語法

邏輯判斷設了一大堆

我再慢慢研究這些比較專業的語法
還有stillfish00大提供的部分


希望能多學點

不然每次都是用一些沒有效率的作法來處理


謝謝 : )

TOP

        靜思自在 : 【蒙蔽的自由】人常在什麼都可以自由自在的時候,卻被這種隨心所欲的自由蒙蔽,虛擲時光而毫無覺知。
返回列表 上一主題