Excel 2003 VBA 問題(輸入ID,將資料累計加總)

內容說明:
使用Excel 2003 VBA 功能, 當輸入ID能自動產生完整的資料內容

需求如下:
按下"輸入ID"後, 能將"raw data"sheet自動將資料帶出
註:我的原始資料有多筆資料,且空白位置不一定,並能將位置累計加總至三筆資料補滿就不寫入資料(参閲尋找內容Sheet)

麻煩大家了!


Excel 2003 VBA 問題(輸入ID,將資料累計加總)

Excel 2003 VBA 問題(輸入ID,將資料累計加總)
不知是要做作業,還是實際業務上的需求
如果是實際業務上的需求,用直接用函數來做比較簡單


設定義名稱
RawData=OFFSET('Raw daa'!$A$1,1,0,COUNTA('Raw data'!$A:$A)-1,4)

不確定你輸入資料在哪一格,所以獨立出來定義,範利用 '尋找內容'的$B$1格
輸入ID=尋找內容!$B$1

*定義 "計算" 時,要先點選 尋找內容表中MAX的第1格存儲格再定義 如範例為A4存儲格位置
計算=LARGE((LEFT(INDEX(RawData,0,1),4)=輸入ID)*INDEX(RawData,0,COLUMN(B:B)),ROW(1:1))

上面計算結果為從大到小,公式比較簡單
如果要依序列出要用下面比較複雜的

點選E4格,定義"計算2"
計算2=INDEX(RawData,SMALL(IF((LEFT(INDEX(RawData,0,1),4)=輸入ID)*(INDEX(RawData,0,COLUMN(B:B))<>""),ROW(INDEX(RawData,0,COLUMN(B:B))),""),ROW(1:1))-1,COLUMN(B:B))

最後在要顯示結果的所有存儲格輸入 =計算

PS.用相容性檢查,只有97-2003會顯示警告
沒有2003的EXCEL可以測試,所以不確定2003可不可以用



你好, 我這是工作上需求, 當初選用VBA是因為方便操作員使用, 按個鍵就可以將資料產生
需求:
1.我的資料會從Raw data中(數據)取出多筆相同批號A001(但資料為多筆資料,且有些資料是為空白) -> 参閲圖一
2.當輸入A001時,Max & Min & Avg能自動判斷Raw data資料是否為空白資料,有資料就直接抓取資料,並累計至三批資料為止 -> 参閲圖二



看起來應該是要使用你所提供函數2
=INDEX(RawData,SMALL(IF((LEFT(INDEX(RawData,0,1),4)=輸入ID)*(INDEX(RawData,0,COLUMN(B:B))<>""),ROW(INDEX(RawData,0,COLUMN(B:B))),""),ROW(1:1))-1,COLUMN(B:B))

我有使用公式, 但秀出異常訊息, 可否幫我確認檔案,謝謝

檔案

*小白* wrote:
你好, 我這是工作...(恕刪)




定義 "計算"時 沒有先選取輸出MAX的第一格(如附檔中的 G4)

定義 "計算"時 要先選取起始位置,不然公式的相對位置為跑掉。


VBA版

Private Sub CommandButton1_Click()
Dim R As Integer, C As Integer
Dim SC_Area As Range, AreaRow As Range
Dim tmpArr(1 To 3, 1 To 3)
With Worksheets("Raw data").UsedRange 'Raw data 被查詢的工作表
For C = 1 To 3
.AutoFilter
.AutoFilter Field:=1, Criteria1:=Range("B1").Text & "-??" 'Range("B1") 要查詢值的位置
.AutoFilter Field:=1 + C, Criteria1:="<>"
R = 0
For Each SC_Area In .SpecialCells(xlCellTypeVisible).Areas
For Each AreaRow In SC_Area.Rows
Select Case (R)
Case 1, 2, 3
tmpArr(R, C) = AreaRow.Columns(1 + C).Text
Case 4
Exit For
End Select
R = R + 1
Next AreaRow
Next SC_Area
Next C
.AutoFilter
End With
Range("B4:D6") = tmpArr ' Range("B4:D6") 要顯示結果的位置
End Sub


裡面的的存儲格位置要自己修改,只用範例去測試OK,可能有其他BUG。
你好,
研究了你所提供的程式,仍然不知道如何下手,請再幫忙,謝謝!
是否有方法可以用VBA寫出以下功能?
步驟:
Step 1 : 輸入巡檢表"K2"欄位(批號)
Step 2 : 按下"查詢批號"按鍵可以自動將"輸入表"篩選批號的內容,判斷是否為空白資料,有資料才抓取資料,並累計至三批資料為止

註:目前是使用手動複製資料,再用人判斷是否為空白資料,有資料才抓取資料,並累計至三批資料,所以才想用VBA方式

附上檔案, 請参閲







*小白* wrote:
你好,研究了你所提...(恕刪)




看不懂要怎抓,上圖A1(1,2,3) 累計3批 就有9筆資料
可是你要丟的地方只有5格,可以詳述 怎麼手動抓哪幾筆過去嗎?

你好,
1.資料抓取為 -> 將"輸入表"批號經過篩選後,將資料複製到"巡檢表內"

2.不管我的"輸入表"內資料有多少批,只要找到相同批號資料,將資料依序補滿到"巡檢表"的F4:J18儲存格內,補滿至五格為止(空白跳過不補資料),参閲圖一~圖三























*小白* wrote:
你好,1.資料抓取...(恕刪)


Private Sub CommandButton3_Click()
Dim R As Integer, C As Integer
Dim SC_Area As Range, AreaRange As Range, ToRange As Range, FRange As Range
Dim tmpArr()
Set ToRange = Range("F4:J18") '要顯示結果的位置
ReDim tmpArr(ToRange.Rows.Count - 1, 4)
ToRange.ClearContents
With Worksheets("輸入表").UsedRange '被查詢的工作表
Set FRange = .Range("E6:AV6") '被查詢的第一筆資料位置
.AutoFilter
.AutoFilter Field:=1, Criteria1:=Range("I2").Text & "-????" 'Range("I2") 要查詢值的位置
For R = 0 To ToRange.Rows.Count - 1
C = 0
For Each SC_Area In .Offset(FRange.Row - 1, FRange.Column - 1 + (R * 3)).Resize(, 3) _
.SpecialCells(xlCellTypeVisible).Areas 'R*3 因為 A1~L 各有3個欄
For Each AreaRange In SC_Area
If C >= 5 Then
Exit For
ElseIf AreaRange.Text <> "" Then
tmpArr(R, C) = AreaRange.Text
C = C + 1
End If
Next AreaRange
Next SC_Area
Next R
.AutoFilter
End With
ToRange = tmpArr
End Sub


Criteria1:=Range("I2").Text & "-????"

上面的意思是 DW01-16010223-0222 只輸入 DW01-16010223
去搜尋 符合 DW01-16010223 開頭的所有批號

如果要輸入完整批號,要自己修改

PS.這個程式是寫死的東西
如果資料與輸出結構有變動 ,要自己做修改
它不會聰明到知道自己要去哪抓資料,丟到哪裡。
你好,
感謝你迅速協助寫出程式,因工作需求,我才剛接觸VBA,目前我已修改按下按鈕字可自動輸入批號並搜尋批號並複製至巡檢內,
我仍然有3個問題想詢問,麻煩大大了!
檔案附件
=======================================================================================================
1.若程式想修改為最後一欄改成只要抓兩筆資料,即輸入表內的AV:AU(巡檢表F18:G18),需修改哪些地方
註:程式已設定範圍 --> Set ToRange = Range("F4:J18") 當我抓取資料會抓取到範圍外的資料這是為何?
2.若我想將資料移動位置(例如往上移動, 往下移動),修改程式碼那?
3.機台編號我一直無法抓到, 是公式用錯嗎?
=======================================================================================================
Private Sub CommandButton1_Click()
Dim R As Integer, C As Integer, O As Integer
Dim SC_Area As Range, AreaRange As Range, ToRange As Range, FRange As Range, x
Dim tmpArr()
Set ToRange = Range("F4:J18")
ReDim tmpArr(ToRange.Rows.Count - 1, 4)
'ReDim 重新宣告
ToRange.ClearContents
With Worksheets("輸入表").UsedRange
x = InputBox("請輸入批號 [ Please enter Lot ID ]", "請輸入批號 [Please enter Lot ID ]")
'按下搜尋資料按鈕後,輸入批號,自動搜尋資料
Sheets("巡檢表").Range("I2") = "DW01-" & x
'將批號輸入至"巡檢表"內的"I2"儲存格,預設為DW01-輸入的批號(有變要自行手動修改)
Set FRange = .Range("E6:AV6")
'設定篩選範圍
.AutoFilter
.AutoFilter Field:=1, Criteria1:="????-" & x & "-????", Operator:=xlOr, _
Criteria2:="????-" & x & "-???"
'定義自動篩選內容標準為何
For R = 0 To ToRange.Rows.Count - 1
C = 0
For Each SC_Area In .Offset(FRange.Row - 1, FRange.Column - 1 + (R * 3)).Resize(, 3) _
.SpecialCells(xlCellTypeVisible).Areas

For Each AreaRange In SC_Area
If C >= 5 Then
Exit For
'Exit For:強制離開For Next迴圈
ElseIf AreaRange.Text <> "" Then
tmpArr(R, C) = AreaRange.Text
C = C + 1
End If
Next AreaRange
Next SC_Area
Next R
.AutoFilter
End With
ToRange = tmpArr
End Sub
======================================================================================================
關閉廣告
文章分享
評分
評分
複製連結

今日熱門文章 網友點擊推薦!