1

「見積もりシート」というタイトルのワークシートの列 B を検索して「利益調整」を見つけるには、検索機能が必要です。大文字と小文字が区別されると便利です。以下は私が作業しているコードですが、範囲や言葉遣いが正しくありません。どんな助けでも大歓迎です。

Dim rFound As Range
Set rFound = Range("B10:B1000")

    Cells.Find(What:="Profit Adjustment", After:=ActiveCell, LookIn:=xlFormulas,         LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=True).Activate
    ActiveCell.Offset(0, 8).Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
4

3 に答える 3

1

私はあなたの例を次のように書き直します:

Sub copy_paste_example()
    Dim c As Range
    With ActiveWorkbook.Sheets("Quote Sheet")
        Set c = .Columns("B").Find(What:="Profit Adjustment", _
                                   LookIn:=xlFormulas, LookAt:=xlPart, _
                                   SearchOrder:=xlByRows, _
                                   SearchDirection:=xlNext, MatchCase:=True)
        On Error GoTo NotFoundErr:
            c.Offset(0, 8).Value = c.Value
    End With
    Exit Sub
NotFoundErr:
    Debug.Print "value not found"
End Sub

ノート:

  1. Range Objectを使用したことがなかったrfoundので、削除しました。
  2. Activate必要ありSelectません。コードの速度が低下することもあります。
  3. Findこれは、コードの後半で役立つ範囲オブジェクトを返すことを忘れないでください。
于 2013-02-22T17:15:10.927 に答える
1

の最初の出現のみを検索するのか、それともすべてのProfit Adjustment出現を気にするのかは、すぐにはわかりませんでした。を含むすべての行を検索する場合は、以下のマクロがそのまま機能します。最初に出現したものだけを見つけたい場合は、単に という行のコメントを外してください。Column BProfit AdjustmentExit For

コードは次のとおりです。

Sub FindValueInColumn()
    Dim rowCount As Integer, currentRow As Integer, columnToSearch As Integer
    Dim searchString As String
    Dim quoteSheet As Worksheet
    Set quoteSheet = ActiveWorkbook.Sheets("Quote Sheet")
    searchString = "Profit Adjustment"  'string to look for
    columnToSearch = 2                  '2 represents column B

    rowCount = quoteSheet.Cells(Rows.Count, columnToSearch).End(xlUp).Row
    For currentRow = 1 To rowCount
        If Not Cells(currentRow, columnToSearch).Find(What:=searchString, MatchCase:=True) Is Nothing Then
            Cells(currentRow, 8).Value = Cells(currentRow, columnToSearch).Value
            'uncomment the below "Exit For" line if you only care about the first occurrence
            'Exit For
        End If
    Next
End Sub

検索前: ここに画像の説明を入力

検索後:

ここに画像の説明を入力

于 2013-02-22T18:06:53.423 に答える
1
Sub samPle()

    Dim rFound As Range, cellToFind As Range
    Set rFound = Sheets("Quote Sheet").Range("B10:B1000")

    Set cellToFind = Cells.Find(What:="Profit Adjustment", MatchCase:=True)

    If Not cellToFind Is Nothing Then
        cellToFind.Activate
        ActiveCell.Offset(0, 8).Copy ActiveCell.Offset(0, 8)
    End If
End Sub
于 2013-02-22T17:29:24.463 に答える