電子書籍の厳選無料作品が豊富!

すみません、教えてください。

例) Range("XX" & YY).Find(what:=文字A, lookAt:=xlWhole)
↑のような感じで完全一致で検索したいのですが、
実行するとエラーコード13のエラーが出てしまいました。
   実行時エラー'13' 型が一致しません。

調べてみたのですが、VBAの本にはfindのwhatはVariant型と書いてあり、
Variant型が16バイトという記載がありました。
例文の“=文字A”には30バイトの文字列が入っている事がわかりました。
文字数を減らした所うまく通ったのでこれが原因と考えているのですが、
もし、対処方法があれば教えていただきたいです。

A 回答 (5件)

>セルの中は以下のように改行コード付で文字列が並んでいます。


例)
   AAAAA
   BBBBB
   CCCCC
セルの値は
”AAAAA" & Chr(10) & "BBBBB" & Chr(10) & "CCCCC"
のようになっているのではないですか。
それを "AAAAABBBBBCCCCC"で検索している不都合では。
Whatに書くもの《検索文字列)がつくりにくくて、プログラムが缶単位はいかず絶望かな。
セル内改行のコード文字を取り除いた列を作業列で作る必要があるのでは。
>Variant型が16バイトという記載がありました
こんなのは変数のメモリ領域の長さと、その指し示すデータの桁数・文字数との区別が付かない、誤りだと思う。
    • good
    • 0

>※例なので3行にしましたがエラーが出た時は10行前後ありました


>この場合も同様なのでしょうか?
『同様』に255文字制限か?..という意味だったら同様です。

>Set BBB = Range("XX" & YY).Find(what:=AAA, lookAt:=xlWhole)
実際のコードですか?
"XX"とはXX列の事で、変数YYで行を指定してる?
その場合は検索範囲が単独セルなのですが?
#仮にそうだとしても、その行でエラーが出るわけではない。

他に、型不一致エラーが出る例としては
Range("B1").Activate '適当
Set AAA = Range("A1")
Set BBB = Range("XX" & YY).Find(what:=AAA, after:=ActiveCell, lookAt:=xlWhole)
引数afterに検索範囲外を指定してしまった場合。
それ以外、Range("A1")がエラー値の場合、など考えられます。

>エラーが出た時のコードをそのままUPすることができないのですが、
>同じ事象が再現できるか検証してみます。
『文字数を減らした所うまく通った』のなら、文字数を元に戻してみてどうなのか、
エラーなら、その時の文字数が何文字か、確認してみると良いのでは。
    • good
    • 0

>例文の“=文字A”には30バイトの文字列が入っている


VBAのString 型のバイト数は数え方が特殊ですから、VB.Net のようには行かないです。
確かに、VBAでは、Unicodeですから、一文字、2byte にはなりますが、String型は、予めメモリを使っています。

 MatchCase '大文字・小文字の区別
 MatchByte '半角と全角を区別

今回、全体的なコードをみないわけには、何とも言えませんね。たふん、見つからなかった場合の処理の仕方とかの問題があるのだと思います。言葉で言っても通じないかもしれませんから、サンプルコードを出しておきます。

'//
Sub TestFind()
 Dim strTxt As Variant
 Dim c As Range
 Const sCOL As String = "A"
  strTxt = "あいうえおかきくけこさしすせそ*"
 Set c = Range(sCOL & "1").EntireColumn.Find( _
 What:=strTxt, _
 LookIn:=xlValues, _
 LookAt:=xlWhole)
 If c Is Nothing Then
   MsgBox "Not Found", vbExclamation
 Else
  c.Select
  Beep
 End If
End Sub
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

サンプルはありがたいです。
実は昨日初めてVBAを触って他人が作ったコードのデバックをやっていたのです。。。
頂たサンプルとの違いを思い出しながらもう少し試して見ます。

お礼日時:2011/02/16 00:03

ExcelのFindメソッドで、完全一致検索に制限があるのは確かですが、


それは「検索する文字列が255文字まで」というものです。

>例文の“=文字A”には30バイトの文字列が入っている事がわかりました。
これが15文字~30文字の文字列の長さの事でしたら、
制限内ですので型不一致エラーは別の要因です。

>↑のような感じで完全一致で検索したいのですが、
感じではなくて実際にエラーが出るコードの提示があれば
他の方からも追加アドバイスがあるかもしれません。



ちなみに
>Variant型が16バイトという記載がありました。
ヘルプの『データ型の概要』を参照してみてください。
>データ型            記憶領域のサイズ 範囲
>:
>バリアント型 (Variant) (数値) 16 バイト     倍精度浮動小数点数型の範囲と同じ。

Variant型変数の中に数値を格納した時の
Variant型の記憶領域のサイズが16バイトである、という意味です。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

>ExcelのFindメソッドで、完全一致検索に制限があるのは確かですが、
>それは「検索する文字列が255文字まで」というものです。
>
>>例文の“=文字A”には30バイトの文字列が入っている事がわかりました。
>これが15文字~30文字の文字列の長さの事でしたら、
>制限内ですので型不一致エラーは別の要因です。
なるほど16バイトというわけでなく255文字まで可能なのですね

最初に書くべきでしたが、エラーが出た時はセルの中身を変数に格納して
Set AAA = Range("A1")
Set BBB = Range("XX" & YY).Find(what:=AAA, lookAt:=xlWhole)
で一致したセルを別の変数に入れる処理をやっていました。
セルの中は以下のように改行コード付で文字列が並んでいます。
例)
   AAAAA
   BBBBB
   CCCCC
※例なので3行にしましたがエラーが出た時は10行前後ありました
この場合も同様なのでしょうか?

>>Variant型が16バイトという記載がありました。
>ヘルプの『データ型の概要』を参照してみてください。
ありがとうございます。確認してみます。


>Variant型変数の中に数値を格納した時の
>Variant型の記憶領域のサイズが16バイトである、という意味です。
ありがとうございます。数値の場合という事だったのですね。

>>↑のような感じで完全一致で検索したいのですが、
>感じではなくて実際にエラーが出るコードの提示があれば
>他の方からも追加アドバイスがあるかもしれません。
そうですね、すこし情報が少なかったです。
エラーが出た時のコードをそのままUPすることができないのですが、
同じ事象が再現できるか検証してみます。

お礼日時:2011/02/15 23:49

参考。



とあるセルの1つ下は何?
2つ下は何?、

3つ下は何?、

と移動させながら確認ならOFFSETを学習。

とあるセルに"ABC"があるかないかはINSTR関数も使えるので学習。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
INSTR関数というのもあるのですね。
もう少しいろいろと試してみます。

お礼日時:2011/02/15 22:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A