2017-10-26 2 views
0

コードの塊を検索用語として使用して別の行にあるサブを作成しようとしています。 0032などの4桁のコードを検索しようとしていますが、何を試してもが検索され、113213213211などのセクションが見つかりません。これが今私が問題に取り組んでいることです。VBAで証明書番号の形式で検索する

For i = 1 To frng.Count 
crng(i, 1).Value = Application.WorksheetFunction.CountIf(mfrng, cfrng(i, 1).Value) 
Next i 
'puts the number of times it appears next to the filtered version of it 

'to find the row number 
'use numbers from cfrng to search in mcode range and find rownumbers. Then add one to the rownumber and use it to copy and paste the other columns. Organize by lcode + 40000 
Dim wrrow As Long 
Dim wdrow As Long 
Dim flist As Range 
    rangevalue = ("R2:R" & flastrow) 
    Set flist = Range(rangevalue) 
Dim nlist As Range 
    rangevalue = ("S2:S" & flastrow) 
    Set nlist = Range(rangevalue) 
Dim Search As Variant 
Dim j As Integer 
Dim n As Integer 
Dim found As Object 

For j = 1 To flist.Count 
    Search = flist(j, 1) 
    n = nlist(j, 1) 
    Set found = mfrng.Find(What:=Search, LookIn:=xlValues, lookat:=xlPart, searchformat:=True) 
     Dim s As Integer 
     For s = 1 To n 
     If s = 1 Then GoTo First Else GoTo Second 

First: 
     wrrow = found.Row 
     wdrow = (wrrow + 1) 
     wd.Activate 
      Dim high As Range 
      rangevalue = ("V" & wdrow & ", AA" & wdrow & ", D" & wdrow & ", E" & wdrow & ", L" & wdrow & ", M" & wdrow & ", U" & wdrow) 
      Set high = Range(rangevalue) 
     high.Select 
     Selection.Copy 
     wr.Activate 
     Dim r As Integer 
     Dim v As Integer 
      r = wr.Cells(wr.Rows.Count, "B").End(xlUp).Row 
      v = (r + 1) 
     wr.Range("B" & v).Select 
     ActiveSheet.Paste 
     wr.Range("A" & v).Value = j 
     GoTo Third 

Second: 
     Set found = mfrng.FindNext(found) 
     wrrow = found.Row 
     wdrow = (wrrow + 1) 
      wd.Activate 
      rangevalue = ("V" & wdrow & ",AA" & wdrow & ",D" & wdrow & ",E" & wdrow & ",L" & wdrow & ",M" & wdrow & ",U" & wdrow) 
      Set high = Range(rangevalue) 
     high.Select 
     Selection.Copy 
      r = wr.Cells(wr.Rows.Count, "B").End(xlUp).Row 
      v = (r + 1) 
     wr.Activate 
     Range("B" & v).Select 
     ActiveSheet.Paste 
     wr.Range("A" & v).Value = j 

Third: 
     Next s 
Next j 

フィールド・リストの値が0032として表示されますが、私は試してみて、検索を使用する場合には32、ない0032表します。数値形式を試すと、オブジェクトに必要なエラーが返されます。

私はバリアントに検索を設定しました。私は、検索を比較しています何の

いくつかの例としては、に私はそれが0032で行を検索するなど、私が欲しいものです0032、だけでなく、21323225です。

j変数が変更された検索条件のリストがあります。私はまた、特定の変数がnlistであるものが現れる回数があります。

+2

はい、その文字列を見つけることができます。データのサンプルと予想される出力とともに、より多くのコードを表示します。 [良い質問をする方法](http://stackoverflow.com/help/how-to-ask)、[最小限の完全かつ検証可能な例を作成する方法](http: –

+0

「0032」を検索している場合は、効果的に数字ではなくテキストを検索しています。検索される範囲がテキストでもあれば、すべてが問題なく、 'Dim Search as String'を保証するだけです。範囲が数字で構成されている場合は、一致するものは見つからず、「Dim Search as Long」を選択してから、代わりに「32」の番号を検索します(検索の数字のフォーマットに関係なく、どのような値(例)が検索されているのかを私たちに教えてください – Ralph

+0

コードモジュールの最上部に 'Option Explicit'を入れてください。これはすべての変数の宣言を必要とし、タイプミス、宣言されていない変数(例えば:あなたが投稿したコードで 'Search'が宣言されていないなど)、その他の問題を取り除く。' .numberformat'は 'Range'オブジェクトのプロパティなので、' Search'は'Range';それゆえあなたの' object required'エラーです。また、 '.Find'ステートメントのオプション引数の** ALL **を含みます。さらに助けが必要なら、私と@Ralphの両方の質問に答えてくださいあなたのデータと期待される出力のサンプルを提供することに関して。 –

答えて

0

皆のアドバイスから、私はそれを理解することができました。

これは私の最終的なコードのようです。

Dim wrrow As Long 
Dim wdrow As Long 
Dim flist As Range 
    rangevalue = ("R2:R" & flastrow) 
    Set flist = Range(rangevalue) 
Dim nlist As Range 
    rangevalue = ("S2:S" & flastrow) 
    Set nlist = Range(rangevalue) 
Dim Search As String 
Dim codenum As Integer 
Dim seriesnum As Integer 
Dim found As Range 
Dim current As Integer 
Dim high As Range 
Dim blastcell As Integer 
Dim bemptycell As Integer 
Dim findrng As Range 
    rangevalue = ("O1:O" & rlastrow) 
    Set findrng = Range(rangevalue) 

For codenum = 1 To flist.Count 
    Search = flist(codenum, 1) 
    seriesnum = nlist(codenum, 1) 

     For current = 1 To seriesnum 

      If current = 1 Then 
       Set found = findrng.Find(What:=Search, LookAt:=xlWhole, searchformat:=True) 
       wrrow = found.Row 
       wdrow = (wrrow + 1) 
       wd.Activate 
       rangevalue = ("V" & wdrow & ", AA" & wdrow & ", D" & wdrow & ", E" & wdrow & ", L" & wdrow & ", M" & wdrow & ", U" & wdrow) 
       Set high = Range(rangevalue) 
       high.Select 
       Selection.Copy 
       wr.Activate 
       blastcell = wr.Cells(wr.Rows.Count, "B").End(xlUp).Row 
       bemptycell = (blastcell + 1) 
       wr.Range("B" & bemptycell).Select 
       ActiveSheet.Paste 
       wr.Range("A" & bemptycell).Value = codenum 
       GoTo Next_item 
      End If 
       Set found = mfrng.FindNext(found) 
       wrrow = found.Row 
       wdrow = (wrrow + 1) 
       wd.Activate 
       rangevalue = ("V" & wdrow & ",AA" & wdrow & ",D" & wdrow & ",E" & wdrow & ",L" & wdrow & ",M" & wdrow & ",U" & wdrow) 
       Set high = Range(rangevalue) 
       high.Select 
       Selection.Copy 
       wr.Activate 
       blastcell = wr.Cells(wr.Rows.Count, "B").End(xlUp).Row 
       bemptycell = (blastcell + 1) 
       wr.Range("B" & bemptycell).Select 
       ActiveSheet.Paste 
       wr.Range("A" & bemptycell).Value = codenum 
Next_item: 
    Next current 
    Next codenum 

これは私が望んでいたもので、コードナンバーと完全に一致するコードを返します。

関連する問題