返回列表 上一主題 發帖

[發問] 如何載入一檔案並判斷特定欄位做運算後產生一新檔案(內含舊檔與運算後之結果)

本帖最後由 GBKEE 於 2014-12-22 15:48 編輯

回復 10# happycoccolin
錯誤請參考 http://forum.twbts.com/viewthread.php?tid=6733
  1.   '**********************************************************
  2.     '1.我目前是想做成我可以執行此程式後跳出一個視窗->讓我挑選要載入的檔案->載入後執行運算->跳出視窗讓我可另存新檔~
  3.    If MsgBox("請問是否要儲存檔案?", vbYesNo) = vbYes Then
  4.         fileout = Application.GetSaveAsFilename(FileFilter:="Excel 活頁簿 (*.xlsx),*.xlsx", Title:="另存為新檔")
  5.         If Not TypeName(fileout) = "String" Then Exit Sub '取消則結束
  6.         SH.Copy
  7.         With ActiveWorkbook
  8.             .SaveAs fileout ', FileFormat:=xlWorkbookDefault
  9.             .Close True
  10.         End With
  11.       
  12.     End If

  13.     '******************************
  14.     '1不要將結果顯示在原檔案
  15.     SH.Parent.Close False
  16.   
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 11# GBKEE


    Hi 版大~

對不起小妹不才
現在已經亂掉了..請版大幫忙指正好嗎~

如附檔

TEST_20141222-1.zip (22.01 KB)

TOP

回復 11# GBKEE


    感謝版大!!

我立刻來試試~~~


非常感激!!!

TOP

回復 11# GBKEE


    版大~剛剛發現兩點要增加的~~~^^

1.
"C" 項目運算部分
在M欄位會出現KV的單位,需要*1000

'IF(O1="C",IF(『擷取M1欄"/"後字元』*0.6>Q1,PASS,FAIL))

意即"/"後字元若是帶KV,需要*1000

EX. 若M欄值為1000PF/2KV->提取出2KV=2*1000
公式為
'IF(O1="C",IF(2*1000*0.6>Q1,PASS,FAIL))

2."R"項目運算部分
'M1需判斷值:以歐姆值計算.若為Kohm:其值×1000、若為Mohm:其值×1000000)
但是若是2.64ohm 即可直接運算,會變成
'IF(O1="R",IF(OR((M1<>"0ohm"),(M1<>"0 ohm")),IF(Q1^2/2.64-2.64*N1<0.0625*0.6,PASS,FAIL)))

請問未帶"K" &"M"的目前有做運算嗎?

還請撥冗幫忙看看~謝謝版大的幫忙~~^^

TOP

回復 11# GBKEE


    Hi 版大~

請問一下版大~~我還有兩點需要增加~但是小妹想了兩天還是用不出結果,可以幫忙看看嗎~謝謝~
請看上則留言14#

TOP

回復 15# happycoccolin
寫不出結果沒關係,PO上妳所寫的,看看如何改.
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 16# GBKEE


    版大~~

我加上這段~但是除了"R" "BEAD"以外的東西都會消失不見 TEST_20141225.zip (18.9 KB)

------------------------------------------------------------------
                If Msg = "KV" Then
                    '在M欄位會出現KV的單位,需要*1000
                      M = Val(Cells(i, "M")) * 1000       'KV
                Msg = Val(Split(Cells(i, "M"), "/")(1)) * 0.6 > Cells(i, "Q")
------------------------------------------------------------------
"C" 項目運算部分
在M欄位會出現KV的單位,需要*1000

'IF(O1="C",IF(『擷取M1欄"/"後字元』*0.6>Q1,PASS,FAIL))

意即"/"後字元若是帶KV,需要*1000

EX. 若M欄值為1000PF/2KV->提取出2KV=2*1000
公式為
'IF(O1="C",IF(2*1000*0.6>Q1,PASS,FAIL))

以上是需求
-------------------------------------------------------------
然後發現有一個特殊狀況

"R"判斷 多出現了一個mx_c0603_hxx

這段我不會寫..還請版大撥空教學~~~拜託~~

    Case "R"
                Msg = Split(Cells(i, "P"), "_")   'Msg = P欄中用 "_" 字串分割傳回的陣列
                If UBound(Msg) = 0 Then           '陣列元素只有一個,P欄中沒有"_"的字元
                    Msg = Split(Cells(i, "P"), "_")(0)
                ElseIf UBound(Msg) > 0 Then        'P欄中有"_"的字元
                    Msg = Split(Cells(i, "P"), "_")(1)
                    If Mid(UCase(Msg), 1, 1) = "H" Then
                      '"r0603_hxx"(xx是變數) : r+後四碼字串_hxx
                        Msg = Split(Cells(i, "P"), "_")(0)
                    End If

TOP

回復 17# happycoccolin
請修改 看看
  1. Case "C"
  2.                 'IF(O1="C",IF(『擷取M1欄"/"後字元』*0.6>Q1,PASS,FAIL))
  3.                 If Right(Cells(i, "M"), 2) = "KV" Then Msg = True
  4.                     '在M欄位會出現KV的單位,需要*1000
  5.                 Msg = Val(Split(Cells(i, "M"), "/")(1)) * IIf(Msg = True, 1000, 1) * 0.6 > Cells(i, "Q")
  6.             Case "R"
  7.                 Msg = Split(Cells(i, "P"), "_")   'Msg = P欄中用 "_" 字串分割傳回的陣列
  8.                 If UBound(Msg) = 0 Then           '陣列元素只有一個,P欄中沒有"_"的字元
  9.                     Msg = Split(Cells(i, "P"), "_")(0)
  10.                 ElseIf UBound(Msg) > 0 Then        'P欄中有"_"的字元
  11.                     Msg = Split(Cells(i, "P"), "_")(UBound(Split(Cells(i, "P"), "_")))
  12.                     If Mid(UCase(Msg), 1, 1) = "H" Then
  13.                       '"r0603_hxx"(xx是變數) : r+後四碼字串_hxx
  14.                         Msg = Split(Cells(i, "P"), "_")(UBound(Split(Cells(i, "P"), "_")) - 1)
  15.                     Else
  16.                         Msg = Split(Cells(i, "P"), "_")(UBound(Split(Cells(i, "P"), "_")))
  17.                     End If
  18.                 End If
  19.                 W = 0
  20.                 Select Case Right(Trim(Msg), 4)  ' P欄後4碼字串
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 18# GBKEE


    謝謝版大!!!

立馬測試中~

TOP

本帖最後由 happycoccolin 於 2015-1-20 17:06 編輯

回復 18# GBKEE


    版大~請問一下目前我run過,發現0hm部分都會顯示FAIL,但是我們裡面已經有寫到此段了,請問應如何修改呢?謝謝~

『0ohm』:ohm類的字元前面可能帶空格,部分未帶空格

IF(O1="R",IF(OR((M1="0ohm"),(M1="0 ohm")),IF(Q1平方*N1< W參閱項目2*0.6,PASS,FAIL)))
例如:W需要判斷P1只要有出現0402字元就= 0.0625 最下面有一對應表格
IF(O1="R",IF(OR((M1="0ohm"),(M1="0 ohm")),IF(Q1平方*N1<0.0625*0.6,PASS,FAIL)))

Case "R"
                Msg = Split(Cells(i, "P"), "_")   'Msg = P欄中用 "_" 字串分割傳回的陣列
                If UBound(Msg) = 0 Then           '陣列元素只有一個,P欄中沒有"_"的字元
                    Msg = Split(Cells(i, "P"), "_")(0)
                ElseIf UBound(Msg) > 0 Then        'P欄中有"_"的字元
                    Msg = Split(Cells(i, "P"), "_")(1)
                    If Mid(UCase(Msg), 1, 1) = "H" Then
                      '"r0603_hxx"(xx是變數) : r+後四碼字串_hxx
                        Msg = Split(Cells(i, "P"), "_")(0)
                    End If
                End If
                W = 0
                Select Case Right(Trim(Msg), 4)  ' P欄後4碼字串
                    Case "0402"           '零件大小
                        W = 0.0625        '功率(W)
                    Case "0603"
                        W = 0.1
                    Case "0805"
                        W = 0.125
                    Case "1206"
                        W = 0.25
                    Case "1210"
                        W = 0.3333
                    Case "1812"
                        W = 0.5
                    Case "2010"
                        W = 0.75
                    Case "2512"
                        W = 1
                End Select
                '**********************************************************************
                '4.以下這段,若是Kohm & Mohm中間帶一個空格(K ohm & M ohm),一樣可以判斷出來嗎?
                '**************************************************************************
                Msg = UCase(Right(Trim(Cells(i, "M")), 5))
               
                If Msg = "K OHM" Or Msg = "M OHM" Then   '讀取5個字元,取得歐姆單位
                    'M1需判斷值:以歐姆值計算.若為Kohm:其值×1000、若為Mohm:其值×1000000)
                    '例如:M1=2.64Kohm=2.64*1000=2640
                     M = Val(Cells(i, "M")) * 10000        'Kohm
                    If Msg = "M OHM" Then M = Val(Cells(i, "M")) * 1000000
                    'IF(O1="R",IF(OR((M1<>"0ohm"),(M1<>"0 ohm")),IF(Q1平方/2640-2640*N1<0.0625*0.6,PASS,FAIL)))
                    Msg = Cells(i, "Q") ^ 2 / M - M * Cells(i, "N") < W * 0.6
                End If
               
                If Not IsNumeric(Msg) Then                      '5個字元,非歐姆單位
                    Msg = UCase(Right(Trim(Cells(i, "M")), 4))  '讀取4個字元,取得歐姆單位
                    If Msg = "0OHM" Or Msg = " OHM" Then  '『非0 ohm』:ohm類的字元前面可能帶空格,部分未帶空格
                        'IF(O1="R",IF(OR((M1="0ohm"),(M1="0 ohm")),IF(Q1平方*N1< W參閱項目2*0.6,PASS,FAIL)))
                        M = Val(Cells(i, "M"))
                        Msg = Cells(i, "Q") ^ 2 * Cells(i, "N") < W * 0.6
                    ElseIf Msg = "KOHM" Or Msg = "MOHM" Then
                        'M1需判斷值:以歐姆值計算.若為Kohm:其值×1000、若為Mohm:其值×1000000)
                        '例如:M1=2.64Kohm=2.64*1000=2640
                        M = Val(Cells(i, "M")) * 10000        'Kohm
                        If Msg = "MOHM" Then M = Val(Cells(i, "M")) * 1000000
                        'IF(O1="R",IF(OR((M1<>"0ohm"),(M1<>"0 ohm")),IF(Q1平方/2640-2640*N1<0.0625*0.6,PASS,FAIL)))
                        Msg = Cells(i, "Q") ^ 2 / M - M * Cells(i, "N") < W * 0.6
                    End If
                End If
                If Not IsNumeric(Msg) Then                  '4個字元,非歐姆單位
                    Msg = UCase(Right(Trim(Cells(i, "M")), 3))  '剩下3個字元,最小的歐姆單位
                    M = Val(Cells(i, "M"))
                    Msg = Cells(i, "Q") ^ 2 * Cells(i, "N") < W * 0.6
               
                End If

這是執行出來的結果
複本 1222_test_bom1.zip (55.63 KB)
語法
TEST20150120.zip (17.02 KB)

再拜託版大指導,謝謝~~~拜託~~

TOP

        靜思自在 : 生氣,就是拿別人的過錯來懲罰自己。
返回列表 上一主題