2017-11-09 7 views
0

Hの英数字を使用してください。この列の一部のセルの内容は、(RAM)で始まり、からから始まる5桁が続きます。
セルH219の内容が(RAM)23596の場合は、「完了」のセルA219を記入する必要があります。
これは「5桁続い(RAM)」コンテンツを含むすべてのセルに対して行われなければならない自動入力するVBAコード

Sub Macro16_B() 
    ' ' Macro16_B Macro ' ' 
    intRowCount = Worksheets("Reconciliation").UsedRange.Rows.Count 
    For i = 11 To intRowCount 
     If InStr(Range("H" & i).Value, "(RAM 00000-99999") Then 
      Range("A" & i).Value = "Completed" 
     End If 
    Next i 
End Sub 
+0

これまでに試したことを示すことはできますか? –

+0

サブMacro16_B() ' ' Macro16_Bマクロ ' ' intRowCount =ワークシート( "調整")。UsedRange.Rows.Count intRowCountに対するI = 11の場合InStr関数(範囲( "H" &I)の場合(RAM "00000-99999")Then 範囲( "A"&i)。値= "完了"終了の場合 次はi 終了サブ – user2574

+0

コーディングが全く新規のため、 – user2574

答えて

0

もう2つの良い答えがありますが、私のコードをここに貼り付けて、自分の次の努力に再利用できるコードで@ user2574を潜んでいます:

Sub Macro16_B() 
    'In the search spec below, * stands for anything, and # for a digit. 
    'Remove the * characters if you expect the content to be limited to "(RAM #####)" only. 
    Const SEARCH_SPEC As String = "*(RAM #####)*" 

    Dim bScreenUpdating As Boolean 
    Dim bEnableEvents As Boolean 

    'Keep track of some settings. 
    bScreenUpdating = Application.ScreenUpdating 
    bEnableEvents = Application.EnableEvents 

    On Error GoTo errHandler 

    'Prevent Excel from updating the screen in real-time, 
    'and disable events to prevent unwanted side effects. 
    Application.ScreenUpdating = False 
    Application.EnableEvents = False 

    'Down with business... 

    Dim scanRange As Excel.Range 
    Dim cell As Excel.Range 
    Dim content As String 
    Dim ramOffset As Long 

    With ThisWorkbook.Worksheets("Reconciliation").Columns("H") 
     Set scanRange = .Worksheet.Range(.Cells(11), .Cells(.Cells.Count).End(xlUp)) 
    End With 

    For Each cell In scanRange 
     content = CStr(cell.Value2) 
     If content Like SEARCH_SPEC Then 
      cell.EntireRow.Columns("A").Value = "Completed" 
     End If 
    Next 

Recover: 
    On Error Resume Next 
    'Restore the settings as they were upon entering this sub. 
    Application.ScreenUpdating = bScreenUpdating 
    Application.EnableEvents = bEnableEvents 
    Exit Sub 

errHandler: 
    MsgBox Err.Description, vbExclamation + vbOKOnly, "Error" 
    Resume Recover 
End Sub 
+1

ありがとうございます!その作業! – user2574

+1

私たちに感謝する最も良い方法は、あなたに役立つ回答をupvoteし、大きな緑のチェックマークで最高のものを選択することです。 – Excelosaurus

+0

@ SJR - 文字列が複数の列にある場合はどうなりますか? – user2574

1

一つの方法は、同様に演算子を使用することです。あなたの文字列の正確なフォーマットは明確ではないので、修正する必要があります(大文字小文字を区別しないと仮定します)。 #は単一の数字を表します。 *は0個以上の文字を表します。 (セルが(RAM以外の余分なテキストを持っていない場合)& 5の数字)

Sub Macro16_B() 
    Dim intRowCount As Long, i As Long 
    ' ' Macro16_B Macro ' ' 
    intRowCount = Worksheets("Reconciliation").UsedRange.Rows.Count 
    For i = 11 To intRowCount 
     If Range("H" & i).Value Like "(RAM) #####*" Then 
      Range("A" & i).Value = "Completed" 
     End If 
    Next i 
End Sub 
+2

あなたの周りの*サンドイッチを見逃す検索文字列。編集:私たちは全体の細胞のコンテンツを探していない限り、ええ、それは可能です... OPは "コンテンツを持っている"と言ったので、それ以上のものを含めることができると仮定。 – Excelosaurus

+0

@Excelosaurus - はい良い点、OPからの説明を待つでしょう。 – SJR

+0

"(RAM)00009 S2X"(これは私の文字列の正確な形式です)。 – user2574

1

非VBAの答えは次のようになります。

=IFERROR(IF(LEN(VALUE(TRIM(SUBSTITUTE(H1,"(RAM)",""))))=5,"completed",""),"") 

マイVBAの答えは次のようになります。

Sub Test() 

    Dim rLastCell As Range 
    Dim rCell As Range 

    With Worksheets("Reconciliation") 
     Set rLastCell = .Columns(8).Find("*", , , , xlByColumns, xlPrevious) 
     If Not rLastCell Is Nothing Then 
      For Each rCell In .Range(.Cells(1, 8), rLastCell) 
       If rCell Like "*(RAM) #####*" Then 
        rCell.Offset(, -7) = "complete" 
       End If 
      Next rCell 
     End If 
    End With 

End Sub 

乾杯@Excelosaurusは、頭の上に*もそれを忘れてしまったでしょう。 :)

+2

あなたは物事を行う2つの方法を提供し、9,000以上のあなたの担当者をぶつけて喜んで私の票を得る。 – Excelosaurus

+0

乾杯。私はまだ9kのための小さな道があると思った。 –

関連する問題