2013-06-05 23 views
2

我有一個宏綁定到我的Excel工作表上的按鈕單擊事件。發生此事件時,我需要查看工作表FeedSampleFormRange("A5:B5").Value上的值是否存在於我的其他工作表FeedSamplesB列中的任意位置。查找其他工作表上是否存在值(Excel)

任何人都可以幫助我嗎?談到Excel時,我幾乎不是一個用戶,這是我第一次用它「開發」。

編輯

當前下面的代碼。這是針對不同的保存程序,具體取決於保存新記錄還是在編輯先前創建的記錄後保存。

對於示例數據,例如我正在查找「FeedSampleForm」.Range(「A5:B5」)。值爲「SR0238」,我需要查看「FeedSamples」列B中是否存在「SR0238」工作表,當前包含「SR0237」 - 「SR0252」。如果它不存在,我可以使用與我的添加記錄功能相同的代碼,但是如果存在,我必須在保存時寫入確切的行。

Sub SaveInspection() 
    If modeAdd = True Then 
    'Labeler Reg. No. 
    Worksheets("FeedSamples").Range("A1").End(xlDown).Offset(1, 0).value = Range("L3:M3").value 
    'Feed Report No. 
    Worksheets("FeedSamples").Range("B1").End(xlDown).Offset(1, 0).value = Range("A5:B5").value 
    'Product No./Class No. 
    Worksheets("FeedSamples").Range("C1").End(xlDown).Offset(1, 0).value = Range("C5").value 
    Worksheets("FeedSamples").Range("E1").End(xlDown).Offset(1, 0).value = Range("D5").value 
    Worksheets("FeedSamples").Range("F1").End(xlDown).Offset(1, 0).value = Range("E5").value 
    'Description No. 
    Worksheets("FeedSamples").Range("H5").End(xlDown).Offset(1, 0).value = Range("F5").value 
    Worksheets("FeedSamples").Range("I5").End(xlDown).Offset(1, 0).value = Range("G5").value 
    Worksheets("FeedSamples").Range("J5").End(xlDown).Offset(1, 0).value = Range("H5").value 
    Worksheets("FeedSamples").Range("K5").End(xlDown).Offset(1, 0).value = Range("I5").value 
    'Possessor No. 
    Worksheets("FeedSamples").Range("L1").End(xlDown).Offset(1, 0).value = Range("J5:K5").value 
    'Date 
    Worksheets("FeedSamples").Range("M").End(xlDown).Offset(1, 0).value = Range("L5:M5").value 
    'Possessor Name 
    Worksheets("FeedSamples").Range("AB1").End(xlDown).Offset(1, 0).value = Range("A8:F8").value 
    'Possessor Address 
    Worksheets("FeedSamples").Range("AC1").End(xlDown).Offset(1, 0).value = Range("A10:F10").value 
    'Possessor City/St 
    Worksheets("FeedSamples").Range("AD1").End(xlDown).Offset(1, 0).value = Range("A11:E11").value 
    'POssessor Zipcode 
    Worksheets("FeedSamples").Range("AE1").End(xlDown).Offset(1, 0).value = Range("F11").value 
    'Labeler Name 
    Worksheets("FeedSamples").Range("AF1").End(xlDown).Offset(1, 0).value = Range("H8:M8").value 
    'Labeler Address 
    Worksheets("FeedSamples").Range("AG1").End(xlDown).Offset(1, 0).value = Range("H10:M10").value 
    'Labeler City/St 
    Worksheets("FeedSamples").Range("AH1").End(xlDown).Offset(1, 0).value = Range("H11:L11").value 
    'Labeler Zipcode 
    Worksheets("FeedSamples").Range("AI1").End(xlDown).Offset(1, 0).value = Range("M11").value 
    'Product Name 
    Worksheets("FeedSamples").Range("AJ1").End(xlDown).Offset(1, 0).value = Range("A13:I13").value 
    '1. Med 
    Worksheets("FeedSamples").Range("AK1").End(xlDown).Offset(1, 0).value = Range("J13:K13").value 
    '2. Non-Med 
    Worksheets("FeedSamples").Range("AL1").End(xlDown).Offset(1, 0).value = Range("L13:M13").value 
'No. Bags/Loc. Sampled 

    'Total No. Guarantees 
    Worksheets("FeedSamples").Range("P").End(xlDown).Offset(1, 0).value = Range("C15:E15").value 
    'Flag Sample 
    Worksheets("FeedSamples").Range("Q").End(xlDown).Offset(1, 0).value = Range("F15:G15").value 
    'Sample Def. 
    Worksheets("FeedSamples").Range("R").End(xlDown).Offset(1, 0).value = Range("H15:I15").value 
    'Compliance 

    'Duplicate 

    'Bag Tag Mark or Code 
    Worksheets("FeedSamples").Range("U").End(xlDown).Offset(1, 0).value = Range("A17:H17").value 
    'On Hand 
    Worksheets("FeedSamples").Range("V").End(xlDown).Offset(1, 0).value = Range("I17:K17").value 
    'Approx. Wt/Lbs 
    Worksheets("FeedSamples").Range("W").End(xlDown).Offset(1, 0).value = Range("L17:M17").value 
    'Remarks 
    Worksheets("FeedSamples").Range("AA").End(xlDown).Offset(1, 0).value = Range("A19:M19").value 
    'Sample Taken From 

    'Sample Method 

    'Form 

    'Probe Size 

    'Product No./Class No. 
    Worksheets("FeedSamples").Range("D").End(xlDown).Offset(1, 0).value = Range("A23:C23").value 

    modeAdd = False 
End If 

If modeEdit = True Then 
    'find the record in "datatable" and save over fields. 
    Dim result As Variant 
    Dim sheet As Worksheet 
    Set sheet = ActiveWorkbook.Sheets("FeedSamples") 

    'Range("O3").Formula = "=IF(ISERROR(MATCH(Range("A5:B5").Value, sheet.Range("B:B"), 0)), "Not Found", "Value found on row " & MATCH(Range("A5:B5").Value, sheet.Range("B:B"), 0))" 
    'Range("O3").Formula = "=IF(ISERROR(MATCH(12345,A:A,0)),"Not Found","Value found on row " & MATCH(12345,A:A,0)))" 

    result = Application.WorksheetFunction.VLookup(Range("A5:B5").value, sheet.Range("B2:B25000"), 2, False) 
    'Throws Object Required Error 
    MsgBox result 
    modeEdit = False 
    allowNav = True 

End If 


End Sub 
+1

你可以發佈你現有的代碼嗎? –

+0

您是否在尋找多個值? 「A5:B5」還是一個值分裂?你能提供任何樣本數據嗎? – Bmo

+0

編輯添加代碼和示例數據。 –

回答

6

一個非常簡單的方法是聲明您要搜索的範圍以及要查找的值。

Sub findValue() 

    Dim xlRange As Range 
    Dim xlCell As Range 
    Dim xlSheet As Worksheet 
    Dim valueToFind 

    valueToFind = "MyValue" 
    Set xlSheet = ActiveWorkbook.Worksheets("Sheet2") 
    Set xlRange = xlSheet.Range("B1:B10") 

    For Each xlCell In xlRange 
     If xlCell.Value = valueToFind Then 
      'Do Something 
     End If 
    Next xlCell 

End Sub 

我假設您的範圍(「A5:B5」)是一個合併的單元格,因爲您指出它包含單個值。合併的單元格可以被合併內的「左上角」單元格引用(或者至少我是這麼想的)。所以你的合併範圍(「A5:B5」)可以被稱爲正好(「A5」)。無論如何,這是上述方法的修改版本,更適合您的需求。

Sub findValue(ByVal valueToFind As String) 

    Dim xlRange As Range 
    Dim xlCell As Range 
    Dim xlFormSheet As Worksheet 
    Dim xlSamplesSheet As Worksheet 
    Dim iLastRow As Integer 
    Dim iRow As Integer 
    Dim bFound As Boolean 

    bFound = False 
    Set xlFormSheet = ActiveWorkbook.Worksheets("FeedSampleForm") 
    Set xlSamplesSheet = ActiveWorkbook.Worksheets("FeedSamples") 

    iLastRow = xlSamplesSheet.Range("B1").End(xlDown).Row 

    Set xlRange = xlsamplesheet.Range("B1:B" & iLastRow) 

    For Each xlCell In xlRange 
     If xlCell.value = valueToFind Then 
      bFound = True '<-- The value was found 
      iRow = xlCell.Row '<-- Here is the row that the value was found on 
     End If 

     If bFound Then Exit For '<-- Optional: Exit the for loop once the value is found the first time 
    Next xlCell 

End Sub 
+0

你讓我朝着正確的方向發展,但它還不完善。當使用下面的代碼時,我得到了一個類型mistmatch錯誤,用於設置valueToFind = xlFormSheet.Range(「A5:B5」).value。 –

+0

「昏暗xlRange作爲範圍 昏暗xlCell作爲範圍 昏暗xlFormSheet作爲工作表 昏暗xlSamplesSheet作爲工作表 昏暗iLastRow作爲整數 昏暗iRow作爲整數 昏暗bFound由於布爾 昏暗valueToFind bFound =假 集xlFormSheet = ActiveWorkbook.Worksheets( 「FeedSampleForm」) 集xlSamplesSheet = ActiveWorkbook.Worksheets( 「FeedSamples」) 集valueToFind = xlFormSheet.Range( 「A5:B5」)。值 iLastRow = xlSamplesSheet.Range( 「B1」)結束。 (xlDown).row 設置xlRange = xlSamplesSheet.Range(「B1:B」&iLastRow) 對於xlRange中的每個xlCell –

+0

在上面我使用的示例中,我聲明valueToFind是一個字符串(根據您提供的示例數據)。所以不要使用「Set valueToFind」。相反,只需使用'valueToFind = xlFormSheet.Range(「A5」)。value' – rwisch45

相關問題