Excel: bestimmten Wert suchen (Spaltenweise suchen) Zeile des gesuchtenwert bekannt, KEIN VBA

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Mono.

    Excel: bestimmten Wert suchen (Spaltenweise suchen) Zeile des gesuchtenwert bekannt, KEIN VBA

    Hallo VB FREUNDE,

    Ich möchte aus einer Excel Tabelle einen bestimmten Wert suchen.
    Da ich weiß, das der gesuchte Wert "TOTAL" sich immer in der ersten Zeile befindet, sollen auch nur die gesamten Spalten der Tabelle1 durchsgesucht werden.

    EDIT 1

    VB.NET-Quellcode

    1. Imports iExcel = Microsoft.Office.Interop.Excel
    2. Public Class Form1
    3. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    4. Dim xlApp As New iExcel.Application
    5. Dim xlWorkbookRPO As iExcel.Workbook
    6. Dim xlWorksheetRPO As iExcel.Worksheet
    7. Dim xlZelleRPO As iExcel.Range
    8. xlWorkbookRPO = xlApp.Workbooks.Open("C:\TOTAL.xls")
    9. xlWorksheetRPO = CType(xlWorkbookRPO.Worksheets("Tabelle1"), iExcel.Worksheet)
    10. 'SucheTotal
    11. Dim intSpalte, SpaltenNrvonTotal As Integer
    12. Dim nSpalte As Boolean
    13. nSpalte = False
    14. intSpalte = 1
    15. xlZelleRPO = CType(xlWorksheetRPO.Rows(1), Excel.Range)' er soll alle Spalten durchsuchen, was soll ich in der Klammer schreiben
    16. While nSpalte = False
    17. If xlZelleRPO.Offset(1, intSpalte).Value = "TOTAL" Then ' Bekomme hier allerdingsFehlermeldung:
    18. nSpalte = True
    19. Debug.WriteLine("bin drin")
    20. SpaltenNrvonTotal = intSpalte
    21. Else
    22. intSpalte += 1
    23. End If
    24. End While
    25. TextBox1.Text = SpaltenNrvonTotal' Ausgabe zur Testzweck
    26. End Sub
    27. End Class

    Danke in voraus!

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Akki“ ()

    Ungefähr so:

    VB.NET-Quellcode

    1. Function Suche(ByVal r As Range, ByVal value As String) As Integer
    2. Dim c As Range
    3. Dim firstAddress As String
    4. Suche = 0
    5. Set c = r.Find(value, LookIn:=xlValues)
    6. Do
    7. If Not c Is Nothing Then
    8. Suche = Suche + 1
    9. If firstAddress = vbNullString Then firstAddress = c.Address
    10. Set c = r.FindNext(c)
    11. Else
    12. Exit Do
    13. End If
    14. Loop While c.Address <> firstAddress
    15. End Function
    16. Sub DoIt()
    17. MsgBox Suche(ActiveSheet.Rows(1), "gefunden")
    18. End Sub

    Gruss mono
    Das ist meine Signatur und sie wird wunderbar sein!
    @FlohFuchs Danke aber ich bekomme diese Fehlermeldung anschließend
    @Mono Danke aber kein VBA code

    VB.NET-Quellcode

    1. xlZelleRPO = CType(xlWorksheetRPO.Rows(1), Excel.Range)
    2. While (nSpalte = False)
    3. If xlZelleRPO.Offset(1, intSpalte).Value = "TOTAL" Then '<<<<<<<<<<<<<<Fehlermeldung




    Ausnahme von HRESULT: 0x800A03EC

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Akki“ ()

    Das leichte anpassen ist ja wohl keine allzugroße Hürde..

    VB.NET-Quellcode

    1. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    2. Dim xlApp As New IExcel.Application
    3. Dim xlWorkbookRPO As IExcel.Workbook
    4. Dim xlWorksheetRPO As IExcel.Worksheet
    5. xlWorkbookRPO = xlApp.Workbooks.Open("C:\TOTAL.xls")
    6. xlWorksheetRPO = CType(xlWorkbookRPO.Worksheets("Tabelle1"), Microsoft.Office.Interop.Excel.Worksheet)
    7. Debug.Print(Suche(CType(xlWorksheetRPO.Rows(1), Microsoft.Office.Interop.Excel.Range), "gefunden").ToString)
    8. End Sub
    9. Function Suche(ByVal r As IExcel.Range, ByVal value As String) As Integer
    10. Dim c As IExcel.Range
    11. Dim firstAddress As String = String.Empty
    12. Suche = 0
    13. c = r.Find(value, LookIn:=IExcel.XlFindLookIn.xlValues)
    14. Do
    15. If Not c Is Nothing Then
    16. Suche = Suche + 1
    17. If String.IsNullOrEmpty(firstAddress) Then firstAddress = c.Address
    18. c = r.FindNext(c)
    19. Else
    20. Exit Do
    21. End If
    22. Loop While c.Address <> firstAddress
    23. End Function
    Das ist meine Signatur und sie wird wunderbar sein!
    du musst natürlich den Range auch durchlaufen...
    Sinnigerweise mit for each...

    VB.NET-Quellcode

    1. for each rng as Range in Suchbereich
    2. if not rng.value = nix then
    3. if rng.value = "Total" then
    4. 'mach halt wat
    5. enf if
    6. end if
    7. next

    Achtung nur PseudoCode ;)

    Merke... nutze @Mono: way... Excel Boardmittel sind wohl sinnvoller.. sry.. :whistling:

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „FloFuchs“ ()

    Man muss keine Range durchlaufen.
    Es gibt für Rangeobjekte die Methode Find.
    Siehe meinen Post oben ^^

    Und zu "zu faul zum umschreiben" sag ich mal nix.
    Forenregeln und so ^^
    Das ist meine Signatur und sie wird wunderbar sein!