Board logo

標題: 請問大大出現重複的值要怎麼抓相對應的值 [打印本頁]

作者: 藍天麗池    時間: 2013-7-8 21:25     標題: 請問大大出現重複的值要怎麼抓相對應的值

本帖最後由 藍天麗池 於 2013-7-8 21:27 編輯

A                B              C                            D            E
84558        7956        1        7951.886961        845
84558        7957        1        7951.889495        845
84558        7956        1        7951.89153          845
84558        7956        1        7951.893564        845
84558        7957        3        7951.901137        845
84558        7956        1        7951.903162        845
84559        7957        1        7951.905679        845
84559        7957        1        7951.908193        845
84559        7957        9        7951.930713        845
84559        7957        1        7951.933202        845
84600        7957        3        7951.940657        846
84600        7957        1        7951.943137        846
84600        7957        1        7951.945615        846
84600        7957        5        7951.957967        846
84601        7957        4        7951.967805        846
84601        7957        1        7951.970258        846
84601        7957        2        7951.975158        846
84601        7958        2        7951.981022        846

請問大大,我要怎麼寫VBA當E欄出現846時抓上一個845所對應左邊的值(7951.933202)
作者: sunnyso    時間: 2013-7-8 22:52

重複的數值都是連續的嗎?
作者: oobird    時間: 2013-7-9 07:38

試試:a = [e:e].Find(846, [e65536], , 1)(0, 0)
作者: 藍天麗池    時間: 2013-7-9 10:12

回復 3# oobird


    大大,抱歉小弟還是新手,可以說明一下嗎??
    在VBA上要如何呈現
作者: 藍天麗池    時間: 2013-7-9 10:42

回復 2# sunnyso


    對,都是連續的,E欄的值是抓A欄值的小時和分
作者: cji3cj6xu6    時間: 2013-7-9 11:29

Sub Macro1()

Dim DQ As Integer
'
For DQ = 1 To 17

If Range("D" & DQ).Value = 846 Then

Range("E" & DQ).Value = Range("c" & DQ - 1).Value
DQ = 17                                             ' 如果是一看到就結束,否則此指令可關閉
Else
End If

Next DQ

End Sub
作者: 藍天麗池    時間: 2013-7-9 16:14

回復 6# cji3cj6xu6


    大大,我的資料還要抓847,848,849...一直到1344,所以都要這樣嗎??
    可以簡略寫法嗎??
作者: 藍天麗池    時間: 2013-7-9 16:18     標題: 這個VBA要怎麼寫

本帖最後由 藍天麗池 於 2013-7-8 21:27 編輯

A                B              C                            D            E           F
84558        7956        1        7951.886961        845
84558        7957        1        7951.889495        845
84558        7956        1        7951.89153          845
84558        7956        1        7951.893564        845
84558        7957        3        7951.901137        845
84558        7956        1        7951.903162        845
84559        7957        1        7951.905679        845
84559        7957        1        7951.908193        845
84559        7957        9        7951.930713        845
84559        7957        1        7951.933202        845
84600        7957        3        7951.940657        846
84600        7957        1        7951.943137        846
84600        7957        1        7951.945615        846
84600        7957        5        7951.957967        846
84601        7957        4        7951.967805        846
84601        7957        1        7951.970258        846
84601        7957        2        7951.975158        846
84601        7958        2        7951.981022        846

請問版上大大,我要寫一個VBA的邏輯是搜尋E欄的內容(因為E欄是公式),當E欄出現846時在F2顯示845所對應左邊的值(7951.933202),這個VBA要怎麼寫
作者: cji3cj6xu6    時間: 2013-7-9 18:12

我的資料還要抓847,848,849...一直到1344,所以都要這樣嗎?? ==> 每次只抓第一筆嗎?
    可以簡略寫法嗎?? ==> 我只會if then / for 迴圈 的寫法,呵呵∼

Sub Macro1()

Dim DQ, EndLine, FindValue As Integer
'
EndLine =2000                       '最後一筆資料
FindValue =846


For DQ = 1 To EndLine

If Range("E" & DQ).Value = FindValue Then
Range("F" & DQ).Value = Range("D" & DQ - 1).Value
FindValue=FindValue+1                                          
Else
End If

Next DQ

End Sub
作者: sunnyso    時間: 2013-7-9 21:14

回復 5# 藍天麗池

根據你的條件(連續時間)不用VBA就可以做到,見附件。你一定要用VBA嗎?
[attach]15388[/attach]
[attach]15389[/attach]
作者: 藍天麗池    時間: 2013-7-9 21:19

回復 9# sunnyso


    大大,小弟還無法下載附件,可以直接貼上來嗎??
    大大用的是DMAX函數嗎??
作者: 藍天麗池    時間: 2013-7-9 21:32

回復 9# sunnyso


    如果是用DMAX是不行的,我試過了
作者: kimbal    時間: 2013-7-9 22:50

F2 的公式
=OFFSET(D1,MATCH(846,E:E,0)-2,0)

VBA:
  1. On Error Resume Next
  2. [F2] = [D1].Offset(Application.WorksheetFunction.Match(846, Columns(5), 0) - 2)
複製代碼

作者: 藍天麗池    時間: 2013-7-9 23:46

回復 2# kimbal


    大大你的兩個方法都不行,第一個方法由於E欄是公式所以MATCH找不到
                                                    第二個方式VBA出現錯誤1004(無法取得類別worksheetfunction的match屬性)
    請問大大以上問題要如何解決呢??
作者: 藍天麗池    時間: 2013-7-9 23:54

回復 13# sunnyso


    大大你這個方法也不行ㄟ,感謝大大
作者: sunnyso    時間: 2013-7-10 09:58

回復 14# 藍天麗池

upload your Excle file
作者: GBKEE    時間: 2013-7-12 16:18

回復 12# 藍天麗池
程式碼依你1#的資料所寫試試看
  1. Option Explicit
  2. Sub Ex()
  3.    'Dim(關鍵字) 宣告變數為程式私用的變數
  4.    Dim N As String, Rng As Range        'String   字串型態  'Range(範圍)型態為物件
  5.            
  6.     With Sheets("資料表")                                   '修正為正確的工作表名稱
  7.         '.[E:E] = .Range("E:E")                             'Sheets("資料表")的 E 欄
  8.         'Application.Max(.[E:E]) ->傳回E欗 最大值
  9.         'Application.Min (.[E:E])->傳回E欗 最小值
  10.         'N = InputBox("輸入數值")  '不預設數值 用此程式碼
  11.             'InputBox 函數  顯示一對話方塊來做為提示,等使用者輸入文字或按下按鈕,並傳回包含文字方塊內容的String。
  12.         N = InputBox("輸入數值", , Application.Max(.[E:E]))
  13.          Set Rng = .Range("E:E").Find(What:=N, After:=Range("E1"), LookAt:=xlWhole)   'SET(設立物件變數)的關鍵字
  14.         ' 請詳看 VBA Find方法, InputBox 函數 的說明
  15.         If Not Rng Is Nothing Then                       'Nothing: Find 找不到 N(的數值)
  16.             If Rng.Row = 2 Then                          '當Rng(物件)的列號是 2
  17.                Set Rng = Rng.Offset(, -1)                '物件:原物件  列位(  不動  ),欗位(左移一欄)
  18.             Else
  19.                 Set Rng = Rng.Offset(-1, -1)             '物件:原物件  列位(上升一列),欗位(左移一欄)
  20.             End If
  21.                 Rng.Select
  22.                 MsgBox Rng.Address
  23.         End If
  24.     End With
  25. End Sub
複製代碼

作者: yangjie    時間: 2013-7-13 12:13

藍天
你的Data是否為Excel  a,b,c,d,e,f,...欄(已建立好)之情形下,
只要整合找出不同的 e 欄value 對應值為上ㄧ列d欄
若是如此,用VBA才是王道




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)