返回列表 上一主題 發帖

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

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

大家好~~
最近有個問題想請教一下
目前已經寫好函數,但因為需要人工處理且檔案眾多,想要將之轉成程式執行,想拜託大大們協助~~

如下

公式

『C』:

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

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

IF(O1="R",IF(OR((M1<>"0ohm"),(M1<>"0 ohm")),IF(Q1平方/M1-M1*N1<W參閱項目2*0.6,PASS,FAIL)))
例如: W需要判斷P1只要有出現0402字元就= 0.0625最下面有一對應表格
且M1需判斷值:以歐姆值計算.若為Kohm:其值×1000、若為Mohm:其值×1000000)
例如:M1=2.64Kohm=2.64*1000=2640
IF(O1="R",IF(OR((M1<>"0ohm"),(M1<>"0 ohm")),IF(Q1平方/2640-2640*N1<0.0625*0.6,PASS,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)))

『Bead』:

IF(O1="Bead",IF(Q1平方<『判斷F1欄”/”後字元,若出現mA字元,其值要÷1000反之則否』平方*0.6,PASS,FAIL)))
例如:F1值=FERRITE BEAD(0402)600OHM/300mA,則執行”/”後字元=300mA=300/1000
IF(O1="Bead",IF(Q1平方<0.3平方*0.6,PASS,FAIL)))

項目說明
1.組值換算(以歐姆值計算ohm、若為Kohm:其值×1000、若為Mohm:其值×1000000)
2.W(瓦特數):有一對應表格見此文最下方,需與「PCB Footprint」欄位對應並做判斷


零件大小與功率對應表:
零件大小        功率(W)
0402        0.0625
0603        0.1
0805        0.125
1206        0.25
1210        0.3333
1812        0.5
2010        0.75
2512        1

目前希望能夠建立一個檔案,然後我可以載入一個表格,經過運算後產生一個新檔案並會跳出視窗詢問要不要儲存一個新檔

將運算後的結果PASS or FAIL 顯示在表格最後一欄(表頭為PASS/FAIL)

PASS顯示綠底黑字 FAIL顯示紅底白字 若兩者皆非(表示前面判斷O欄位即非我們上述的關鍵字)請顯示空白即可


附檔為需要運算比對的檔案,還請各位大大牛刀小試一下,拜託拜託~~謝謝大家~

MATERIALS.zip (60.03 KB)

不知道有沒有大大願意撥時間看看呢?

小妹對上VBA腦筋就轉不過來了,還請各位大大解救

若有解釋不清的地方也請不吝提出問題~

謝謝~~

TOP

回復 3# GBKEE


    謝謝板大的幫忙~~~~

但是我執行時停在這行~還沒能載入檔案~可以幫忙看看嗎~~~謝謝~~~~~
Sub Ex()
    Dim AR, SH As Worksheet
    Dim i As Long, Msg As Variant, W As Single, M As Single
    Set SH = ActiveSheet
    With SH.UsedRange
        .Columns("S").Clear
        AR = .Columns("S")
    End With
AR(1, 1) = "PASS/FAIL" <-停在此行
For i = 2 To UBound(AR)

TOP

回復 3# GBKEE


Hi~版大~~~

請問一下~

1.我目前是想做成我可以執行此程式後跳出一個視窗->讓我挑選要載入的檔案->載入後執行運算->跳出視窗讓我可另存新檔~
不要將結果顯示在原檔案

2.若是O欄(Implementation)為空,請在S欄位(結果欄位)顯示"無工作電壓/電流"

3.另外,若是針對"R"的部分,在P欄會出現"r0603_hxx"(xx是變數) or "r0603"的字元,一樣可以判斷出來嗎?(原先是預設為:mx_r0603)            
                Select Case Right(Trim(Cells(i, "P")), 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),一樣可以判斷出來嗎?
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
                Else         '<>"0OHM" Or <> " OHM"
                    '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

以上問題還請大大幫忙解答~~~~~小妹感激不盡~~

TOP

回復 6# GBKEE


    感謝版大~~~~^______^

不好意思啦~我表達的不好~我想要的方式如附檔 MATERIALS (2).zip (65.89 KB)

1.我會用一個按鈕連結執行巨集(檔案為TEST_20141222.xlsm)

按下按鈕後開始執行->選取要運算的檔案(範例:MATERIALS.xlsx)->執行運算->跳出一新檔案並詢問要不要儲存

2.就上次的詢問"R"項目的P欄位需要判斷的增加如下兩種
"r0603_hxx"(xx是變數) : r+後四碼字串_hxx
"r0603" : r+後四碼字串


再次感謝版大耐心解答

TOP

回復 6# GBKEE


    謝謝版大的迅速回覆^___^

請問是否可以讓user任選想要比對的檔案及檔案位置(User想運算的檔案可能存在任何位置)呢?

之前有另一個程式的語法如下
是否可以使用這樣的方式呢?
再拜託版大幫忙參考看看~~感激不盡~~~

--------------------------------------

  filein = Application.GetOpenFilename(FileFilter:="Excel 活頁簿 (*.xlsx),*.xlsx", Title:="請選擇要比對的檔案")
  If Not TypeName(filein) = "String" Then Exit Sub '取消則結束

--------------------------------------
If MsgBox("請問是否要儲存檔案?", vbYesNo) = vbYes Then
      fileout = Application.GetSaveAsFilename(FileFilter:="Excel 活頁簿 (*.xlsx),*.xlsx", Title:="另存為新檔")
      If Not TypeName(fileout) = "String" Then Exit Sub '取消則結束
      .SaveAs fileout, FileFormat:=xlWorkbookDefault
    End If
--------------------------------------

TOP

回復 9# GBKEE


    Hi 版大

小妹不是很了解"不正確的引用",是否是少宣告了甚麼,還請版大協助~感激不盡~~~

停在此行
    .SaveAs fileout, FileFormat:=xlWorkbookDefault
請見附檔~謝謝~~~
TEST_20141222.zip (19.75 KB)

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

        靜思自在 : 【做人的開始】每一天都是故人的開始,每一個時刻都是自己的警惕。
返回列表 上一主題