열에서 텍스트를 찾는 방법 및 처음 찾은 행 번호 저장 - Excel VBA
프로젝트라는 이름의 다음 열(A 열)이 있습니다(행 열에는 행 번호만 표시됩니다).
rows project
1 14
2 15
3 16
4 17
5 18
6 19
7 ProjTemp
8 ProjTemp
9 ProjTemp
사용자가 마지막 프로젝트 이름 바로 뒤에 제가 삽입하고 싶은 새로운 프로젝트 이름을 적는 입력 메시지 상자가 있습니다.Ex: 프로젝트 20은 프로젝트 19 직후와 첫 번째 "ProjTemp" 이전에 삽입됩니다.
제 이론은 첫 번째 "ProjTemp"의 행 번호를 찾은 다음 프로젝트가 20인 새로운 행을 삽입하는 것이었습니다.
찾기 기능을 사용하려고 했는데 오버플로 오류가 발생합니다(3개의 "ProjTemp" 문자열을 찾아서 하나의 매개 변수로 설정하려고 하므로 해당 오류가 발생합니다).
Dim FindRow as Range
with WB.Sheets("ECM Overview")
Set FindRow = .Range("A:A").Find(What:="ProjTemp", _
After:=.Cells(.Cells.Count), _
LookIn:=xlValues, _
LookAt:=xlWhole, _
SearchOrder:=xlByRows, _
MatchCase:=False)
end with
첫 번째 "ProjTemp" 행 번호만 찾도록 코드화하려면 어떻게 해야 합니까?더 나은 방법이 없을까요? 어쩌면 루프?
감사합니다, 어떤 도움이든 감사히 받겠습니다!
저는 그 모든 변수에 대해 잘 알지 못합니다.Find
method; 그러나 단축하면 다음이 제게 효과가 있습니다.
With WB.Sheets("ECM Overview")
Set FindRow = .Range("A:A").Find(What:="ProjTemp", LookIn:=xlValues)
End With
행 번호만 필요한 경우 다음과 같이 사용할 수 있습니다.
Dim FindRowNumber As Long
.....
FindRowNumber = FindRow.Row
Dim FindRow as Range
Set FindRow = Range("A:A").Find(What:="ProjTemp", _' This is what you are searching for
After:=.Cells(.Cells.Count), _ ' This is saying after the last cell in the_
' column i.e. the first
LookIn:=xlValues, _ ' this says look in the values of the cell not the formula
LookAt:=xlWhole, _ ' This look s for EXACT ENTIRE MATCH
SearchOrder:=xlByRows, _ 'This look down the column row by row
'Larger Ranges with multiple columns can be set to
' look column by column then down
MatchCase:=False) ' this says that the search is not case sensitive
If Not FindRow Is Nothing Then ' if findrow is something (Prevents Errors)
FirstRow = FindRow.Row ' set FirstRow to the first time a match is found
End If
추가로 구입하려면 다음을 사용할 수 있습니다.
Do Until FindRow Is Nothing
Set FindRow = Range("A:A").FindNext(after:=FindRow)
If FindRow.row = FirstRow Then
Exit Do
Else ' Do what you'd like with the additional rows here.
End If
Loop
또는 루프를 사용하여 행 번호(카운터는 행 번호여야 함)를 유지하고 첫 번째 "ProjTemp"를 찾으면 루프를 중지할 수 있습니다.
그렇다면 다음과 같은 모양이어야 합니다.
Sub find()
Dim i As Integer
Dim firstTime As Integer
Dim bNotFound As Boolean
i = 1
bNotFound = True
Do While bNotFound
If Cells(i, 2).Value = "ProjTemp" Then
firstTime = i
bNotFound = false
End If
i = i + 1
Loop
End Sub
몇 가지 의견:
- 검색 위치가 중요하므로 검색을 시작할 위치를 지정해야 합니다.사용합니다.
ws.[a1]
그리고.xlNext
아래에서 검색을 시작합니다.A2
지정된 시트의 - 중 일부
Find
s 인수 - 포함lookat
사전 검색 설정을 사용합니다.그래서 당신은 항상 특정해야 합니다.xlWhole
아니면xlPart
각각 스트링의 전부 또는 일부를 일치시킵니다. - 사용하지 않고 행을 삽입하고 사용자에게 새 값을 요구하는 것을 포함하여 원하는 모든 것을 할 수 있습니다(이전 값이 19인 경우 내 코드는 20을 제안합니다).
Select
아니면Activate
제안코드
Sub FindEm()
Dim Wb As Workbook
Dim ws As Worksheet
Dim rng1 As Range
Set Wb = ThisWorkbook
Set ws = Wb.Sheets("ECM Overview")
Set rng1 = ws.Range("A:A").Find("ProjTemp", ws.[a1], xlValues, xlWhole, , xlNext)
If Not rng1 Is Nothing Then
rng1.EntireRow.Insert
rng1.Offset(-1, 0).Value = Application.InputBox("Please enter data", "User Data Entry", rng1.Offset(-2, 0) + 1, , , , , 1)
Else
MsgBox "ProjTemp not found", vbCritical
End If
End Sub
"projecttemp"를 확인한 다음 이전 항목이 번호 입력(예: 19,18 등)인지 확인한 다음 해당 projtemp의 행 번호를 가져옵니다.
만약 그렇지 않다면..그런 다음 이전 항목이 프로젝트템 또는 번호 입력인지 다시 확인합니다.
언급URL : https://stackoverflow.com/questions/15910913/how-to-find-text-in-a-column-and-saving-the-row-number-where-it-is-first-found
'programing' 카테고리의 다른 글
집계 함수가 있는 MySQL 쿼리에서 그룹화된 레코드의 첫 번째 레코드와 마지막 레코드를 가져오는 방법은 무엇입니까? (0) | 2023.10.07 |
---|---|
UI 이미지 크기를 200x200pt/px로 조정 (0) | 2023.10.07 |
모듈을 가져왔는지 확인하려면 어떻게 해야 합니까? (0) | 2023.10.02 |
워드프레스 플러그인 페이지에 드래그 가능한 섹션 추가 (0) | 2023.10.02 |
시간값을 인쇄 가능한 형식으로 구조화 (0) | 2023.10.02 |