2017-01-11 3 views
0

Excel 2010を使用しています.4桁のシーケンスを含むデータ列があります。これらのシーケンスは、アルファベットの後に100-999の数字を続けて繰り返します。だからA100、A101、A102 ... A999、そしてB100、B101 ... Z999まで。これらのシーケンス(すなわち、行)は24,000個あります。文字列シーケンスで不足している値を強調表示する方法

私が最初に以下のVBAスクリプトを試してみました:関数は、アルファベット文字を解析できないため

Function MissingNumbers(Rng As Range) As String 
Dim X As Long, MaxNum As Long 
MaxNum = WorksheetFunction.Max(Rng) 
ReDim Nums(1 To MaxNum) 
For X = 1 To MaxNum 
    If Rng.Find(X, LookAt:=xlWhole) Is Nothing Then 
     MissingNumbers = MissingNumbers & ", " & X 
    End If 
    Next 
    MissingNumbers = Mid(MissingNumbers, 3) 
End Function 

...しかし=MissingNumbers(A1:A23400)とそれを呼び出すときに、私はエラーに走った、私は推測しているこれは、シーケンスの始めに。

私の質問:にはどのような公式を使用して強調表示し、別にリストするのですか私の最初の列に値がありませんか?余分明確にするため

、範囲内の欠損値

C996 
C998 
C999 
D101 

は... ...事前に

C996 
*C997* 
C998 
C999 
*D100* 
D101 

おかげだろう。

答えて

1

これを行うにはもっと速い方法がありますが、これは小さなサンプルでテストされ、結果が得られます。

Function MissingSequence(Rng As Range) As String 

Dim iCnt As Integer 
For iCnt = 65 To 90 'ASCI characters for alphabet A-Z 

    Dim iNum As Integer 
    For iNum = 100 To 999 

     Dim sCheck As String 
     sCheck = Chr(iCnt) & iNum    

     If Rng.Find(sCheck, lookat:=xlWhole) Is Nothing Then 

      Dim sMissingNumbers As String 
      sMissingNumbers = sMissingNumbers & "," & sCheck 

     End If 

    Next 

Next 

    MissingSequence = Mid(sMissingNumbers, 2) 

End Function 
+0

私はこれをどのように呼びますか?申し訳ありませんが、今日は初めてExcelを使用して、私が進んでいくうちにそれを取り上げました。 :-) – Hashim

+0

さて、エラーで失敗した 'MissingSequence(A1:A23400)'で初めて呼び出そうとしました。それから、「関数」の前に 'Public'を追加しました。それはトリックを行うように見えました - ウィンドウを最小化し最大化する間に何かが確実に実行されていました。私は本当にそれが正常に実行されたことを確認するいくつかの並べ替えに本当に感謝しています。特に、このデータセットに欠落している数字があるかどうかは不明です。 – Hashim

+1

@Hashim - VBEのイミディエイトウィンドウに結果を出力するための 'debug.print MissingSequence'を確認用に使用します。また、実際の範囲 'A1:A23400'が文字列リテラルであることを確認してください。私はあなたが 'Range(A1:A23400)'を必要とすると思います。 –

関連する問題