2017-03-29 9 views
0

TextBoxには15桁を超える数字が含まれています。エクセルセルにテキストボックスの値をコピーすると、15桁目からExcelはゼロに変更されます。これはExcelの方法で、セルの書式が数字の場合です。セルの書式を数値からテキストに変更し、手動で数値とその作業を入力します。インデックス、一致機能がテキスト形式のセルを認識しません

しかし、私はマクロにIndexMatch機能を使用する場合、それは動作しませんし、私は、実行時エラー1004

を得る「 WorksheetFunctionクラスの一致プロパティを取得できません

これは私がインデックスに使用するコード、マッチ機能

Dim b As Double 

b = TxtCvNo.Text 

With Application.WorksheetFunction  
    If .CountIf(Sheet2.Range("G:G"), b) = 1 Then  
     TxtCVId.Text = .Index(Sheet2.Range("A:A"), .Match((b), Sheet2.Range("G:G"), 0))  
    Else 

ですはTextBoxの値です。 Excelのセルで「テキスト」

がどのように私はゼロに変更上の桁の15日、16日などを避けるために、テキストとしてセルにテキストボックスの値をコピーすることができ、この値が入力されたとして

Match機能はbを認識しません。 。どのように私はインデックスを修正することができます後に一致機能。

このスクリーンショットは私のデータです。私は、IndexMatchを使って、クーポン1,2,3がクーポンの参照として使用されているかどうかを識別し、IDの回答者がそのクーポンを使用していることを教えてください。 screen shot data

+0

をあなたが私の答えと以下のコードを読んで持っていますか?どんなフィードバック? –

+0

はい、今動作します。しかし、あなたのコードにあるように私はresを使用しませんでした。どうもありがとう。 – Hepk1211

+0

次に、私の答えの横にあるチェックマークをクリックすることで "回答"とマークしてください、それは緑色に変わります –

答えて

0

次のコード(コードのコメント内の説明)してみてください。

Option Explicit 

Sub IndexMatchConv() 

Dim b As String 
Dim Res As Variant 

' for my test format and set a value with 21 digits as Text in cell "G2" 
Sheet2.Range("G2").NumberFormat = "@" ' format as Text 
Sheet2.Range("G2").Value = "123456789112233445566" 
b = Sheet2.Range("G2").Value 
MsgBox Len(b) ' <-- result 21 

With Application.WorksheetFunction 
    Res = .CountIf(Sheet2.Range("G:G"), b) 
    If .CountIf(Sheet2.Range("G:G"), b) = 1 Then 
     Res = .Match((b), Sheet2.Range("G:G"), 0) < --Res = 2 
     'TxtCVId.Text = .Index(Sheet2.Range("A:A"), .Match((b), Sheet2.Range("G:G"), 0)) 
    Else 
     ' do something 
    End If 
End With 

End Sub 
+0

この解決策は私の問題に答えることができますが、時には 'match'関数でエラーが発生することがあります。 – Hepk1211

+0

問題を実際には15文字しか読み込まない 'countif'関数で見つけました。その関数を使ってH塊のデータを見つけると、 'countif'は' match'関数がエラーになるところのG列で見つけます。それを修正するための任意の提案? – Hepk1211

+0

@ Hepk1211これをやり、新しい投稿を開き、データのスクリーンショットを入れ、修正したコードを追加し、問題点を説明しましょう。これにより、他のユーザー(私以外のユーザー)があなたを支援することができます。 –

関連する問題