Excel 判斷+計算vba 求會的大大~急跪求orz

跪求會的神大大~~幫忙完成vba

有顏色的 兩個格子,要做2次的處理 例:U18,V18

完整說明在檔案裡

紅字答案的部份。有些是我手動填進去的

我vba裡面,無法計算…都是0…不知哪兒數值出錯...沒完成計算= =

求會的大大,幫忙除錯一下…

有勞...拜託了

http://www.funp.net/569366

檔案裡已有我寫的vba,是沒問題的巨集,不會破壞電腦之類的

附上圖片

https://drive.google.com/file/d/0B2sa99IHmd9VQlpzM...

再次感謝一直協助的神大大阿...。。。感激不盡~~囧rz

Update:

感謝Lopez大大

請問這是用sub

我要如何使用在格子裡呢...

在 U19 格子輸入

=Find_Min(U18,V18)

這樣嗎? 我使用了,名稱無效

這個比較的範圍不是大範圍區域性的,都是相鄰的 2個格子,裡面的數字

例:

M22 = Find_Min(M21,N21)

AC22 = Find_Min(AC21,AD21)

感謝 Lopez大大 一直協助。

Update 2:

試了一下

sub 好像不能在格子裡填入 兩個目標格

例如,在 U19 格子輸入

=Find_Min(U18,V18) 這樣

我會往下做100多層@@............

這樣,每2格都要輸入一次,當數值一改變,無法連動了

有沒比較方便填的方法呢...

可以直接修改 兩個目標格...

SUB,我不太會用,

Lopez大大

是否教一下,如何可以數值改變的情況下自動套用.......感謝

3 Answers

Rating
  • Lopez
    Lv 7
    6 years ago
    Favorite Answer

    執行前,請先清空說明文字,因為說明文字會影響計算.

    (或是先剪下儲存格內的說明文字,貼到文字方塊)

    計算區域參照你前一題的,採用E13:AJ29

    Sub Find_Min()

    Set R = Range("E13:AJ29")

    U = R.Cells.Count - 1

    For i = 1 To U

    If HasBorder(R.Cells(i)) And HasBorder(R.Cells(i + 1)) Then

    Cells(R.Cells(i).Row + 1, R.Cells(i).Column) = ""

    a = R.Cells(i)

    b = R.Cells(i + 1)

    With Application

    p = Int(.Max(a, b) / 600)

    q = Int(.Min(a, b) / 300)

    If .Min(p, q) > 0 Then

    Cells(R.Cells(i).Row + 1, R.Cells(i).Column) = .Min(p, q)

    End If

    End With

    End If

    Next

    End Sub

    Function HasBorder(Cell As Range) As Boolean

    Dim i As Variant

    For Each i In Array(xlDiagonalDown, xlDiagonalUp, xlEdgeLeft, _

    xlEdgeTop, xlEdgeBottom, xlEdgeRight)

    If Cell(1).Borders(i).LineStyle <> xlLineStyleNone Then

    HasBorder = True

    Exit For

    End If

    Next

    End Function

    2015-05-24 21:48:36 補充:

    我將程式加了按鈕,請自行下載:

    http://www.funp.net/83985

    除了加上按鈕,還有其他變更,說明如下:

    原本用連續兩格有框線,做為計算目標,因此才有HasBorder函數.

    但依照你的說明,框線似乎只是題目說明的輔助,

    所以改版後的程式不需要HasBorder函數,

    而是用連續2格有數字作為計算目標.

    2015-05-24 21:55:48 補充:

    Sub 是副程式,與函數Function不同:

    Function要輸入在儲存格中,隨著輸入值不同,結果也不同;

    Sub 是執行一連串指令,

    所以我將程式加了按鈕,按鈕已對應Find_Min這個副程式,

    按下按鈕就會執行整個區域所有的計算.

    我將整個區域設定在程式第一行:

    Set R = Range("E13:AJ200")

    請按你實際的計算需要,自行調整.

    Source(s): HasBorder函數參考自: http://www.excelforum.com/excel-programming-vba-ma...
  • 6 years ago

    准大大,好久不見^^

    感謝你回應~~

    我寫了好幾行。。。

    你一行就把我的整個條件解決了........

    哈哈~

    學習了

  • 6 years ago

    U19.一般公式:

    =IF(COUNT(U18:V18)=2,MIN(INT(LARGE(U18:V18,{1,2})/{600,300})),"")

    2015-05-24 12:37:23 補充:

    格子外的數量:

    Function CountValue(R As Range, X) As Long

    Dim H As Range, N&

    For Each H In R

     If H.Formula & "" = X & "" Then N = N + 1

    Next

    CountValue = N

    End Function

Still have questions? Get your answers by asking now.