返回列表 上一主題 發帖

[發問] 我想寫每個機種裏選出 所屬料號中最小實際進料的數字

[發問] 我想寫每個機種裏選出 所屬料號中最小實際進料的數字

請問大大們,如檔案,我想寫每個機種裏選出 所屬料號中(期初庫存+實際進料)最小的數字,該如何寫VBA程式碼??,謝謝
請大大回覆時貼程式碼
file.rar (101.87 KB)

回復 1# scjiao
試試看
  1. Option Explicit
  2. Sub EX()
  3.     Dim Rng(1 To 2) As Range, E As Range
  4.     Dim AR(), i As Integer
  5.     With Sheets("Sheet1")
  6.         Set Rng(1) = .Range("A6", .Range("A" & .Rows.Count).End(xlUp)).SpecialCells(xlCellTypeConstants)
  7.         '讀取機總的範圍有文字的儲存閣
  8.     End With
  9.     ReDim AR(0 To Rng(1).Areas.Count, 1 To 4)
  10.     AR(0, 1) = "機總"
  11.     AR(0, 2) = "料號"
  12.     AR(0, 3) = "期初庫存"
  13.     AR(0, 4) = "實際進料"
  14.     For i = 1 To Rng(1).Areas.Count
  15.         AR(i, 1) = Rng(1).Areas(i).Cells(1)
  16.         Set Rng(2) = Rng(1).Areas(i).Resize(, 2).Columns(2).SpecialCells(xlCellTypeConstants)
  17.             '機總的範圍 [第2欄] 有文字的儲存閣
  18.             For Each E In Rng(2).Areas
  19.             If E.Range("b1") + E.Range("E5") < AR(i, 3) + AR(i, 4) Then
  20.             '"期初庫存"+"實際進料"
  21.                 AR(i, 2) = E.Cells(1)
  22.                 AR(i, 3) = E.Range("b1")   '以E.Cells(1)
  23.                 AR(i, 4) = E.Range("E5")
  24.             ElseIf AR(i, 2) = "" Then  '料號: 陣列元素=""
  25.                 AR(i, 1) = Rng(1).Areas(i).Cells(1)
  26.                 AR(i, 2) = E.Cells(1)
  27.                 AR(i, 3) = E.Range("b1")
  28.                 AR(i, 4) = E.Range("E5")
  29.             End If
  30.         Next
  31.     Next
  32.     Sheets("Sheet2").[A1].Resize(UBound(AR), UBound(AR, 2)) = AR    '顯示
  33. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 2# GBKEE
謝謝版主的熱心回答,非常感謝~:)

TOP

回復 2# GBKEE
請問版主大大
For Each E In Rng(2).Areas
next
Rng(2).Areas 是什麼意思呀?
E.range("b1")又是什麼意思呀?
不好意思,初學者

TOP

回復 4# scjiao
  1. Option Explicit
  2. Sub Ex()
  3.     Dim Rng As Range, i As Integer
  4.     Application.VBE.MainWindow.Visible = True
  5.     Application.VBE.Windows("即時運算").Visible = True
  6.     Set Rng = Range("A1:C1,A5:C5,A3:B4,A10:A15")
  7.     'Areas 屬性 傳回 Areas 集合,此集合代表多重範圍中的所有範圍。唯讀。
  8.     For i = 1 To Rng.Areas.Count '多重範圍的個數
  9.         Stop  '按F8執行下一步
  10.         Debug.Print vbLf & Rng.Areas(i).Address
  11.         
  12.         '以 Areas(i)為基準的 Range 物件,該物件代表一個儲存格或儲存格範圍。
  13.         Debug.Print Rng.Areas(i).Range("A1").Address
  14.         Debug.Print Rng.Areas(i).Range("B1").Address
  15.         Debug.Print Rng.Areas(i).Range("C1").Address

  16.     Next

  17. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 5# GBKEE
非常感謝版主的回覆,那請問
For Each E In Rng(2).Areas
next
其中
E.range("b1")是什麼意思

謝謝版大

TOP

回復 6# scjiao
以 E 為基準的 Range 物件,該物件代表一個儲存格或儲存格範圍
與 5# 的程式碼運行結果ㄧ樣
  1. Option Explicit
  2. Sub Ex()
  3.     Dim Rng As Range, E As Range
  4.     Application.VBE.MainWindow.Visible = True
  5.     Application.VBE.Windows("即時運算").Visible = True
  6.     Set Rng = Range("A1:C1,A5:C5,A3:B4,A10:A15")
  7.     'Areas 屬性 傳回 Areas 集合,此集合代表多重範圍中的所有範圍。唯讀。
  8.     For Each E In Rng.Areas  '多重範圍的個數
  9.         Stop  '按F8執行下一步
  10.         Debug.Print vbLf & E.Address        

  11.         '以 E 為基準的 Range 物件,該物件代表一個儲存格或儲存格範圍。
  12.         Debug.Print E.Range("A1").Address
  13.         Debug.Print E.Range("B1").Address
  14.         Debug.Print E.Range("C1").Address

  15.     Next
  16. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 7# GBKEE
謝謝版大,我完全了解了,最後我想問的是其中一段程式碼
With Sheets("Sheet1")
Set Rng(1) = .Range("A6", .Range("A" & .Rows.Count).End(xlUp)).SpecialCells(xlCellTypeConstants)      '讀取機總的範圍有文字的儲存閣
End With
其中.Range("A" & .Rows.Count).End(xlUp)).SpecialCells(xlCellTypeConstants) 此specialcells(xlcellTypeConstants) 參數是代表什麼意思

TOP

回復 8# scjiao
到 VBA視窗 說明 輸入 SpecialCells 看看
盡量到 說明 中輸入 疑問的屬性.方法.函數.會多了解VBA的
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 9# GBKEE

嗯,謝謝版主

TOP

        靜思自在 : 手心向下是助人,手心向上是求人;助人快樂,求人痛苦。
返回列表 上一主題