
すみません、教えてください。
例) Range("XX" & YY).Find(what:=文字A, lookAt:=xlWhole)
↑のような感じで完全一致で検索したいのですが、
実行するとエラーコード13のエラーが出てしまいました。
実行時エラー'13' 型が一致しません。
調べてみたのですが、VBAの本にはfindのwhatはVariant型と書いてあり、
Variant型が16バイトという記載がありました。
例文の“=文字A”には30バイトの文字列が入っている事がわかりました。
文字数を減らした所うまく通ったのでこれが原因と考えているのですが、
もし、対処方法があれば教えていただきたいです。
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
>セルの中は以下のように改行コード付で文字列が並んでいます。
例)
AAAAA
BBBBB
CCCCC
セルの値は
”AAAAA" & Chr(10) & "BBBBB" & Chr(10) & "CCCCC"
のようになっているのではないですか。
それを "AAAAABBBBBCCCCC"で検索している不都合では。
Whatに書くもの《検索文字列)がつくりにくくて、プログラムが缶単位はいかず絶望かな。
セル内改行のコード文字を取り除いた列を作業列で作る必要があるのでは。
>Variant型が16バイトという記載がありました
こんなのは変数のメモリ領域の長さと、その指し示すデータの桁数・文字数との区別が付かない、誤りだと思う。
No.4
- 回答日時:
>※例なので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することができないのですが、
>同じ事象が再現できるか検証してみます。
『文字数を減らした所うまく通った』のなら、文字数を元に戻してみてどうなのか、
エラーなら、その時の文字数が何文字か、確認してみると良いのでは。
No.3
- 回答日時:
>例文の“=文字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
回答ありがとうございます。
サンプルはありがたいです。
実は昨日初めてVBAを触って他人が作ったコードのデバックをやっていたのです。。。
頂たサンプルとの違いを思い出しながらもう少し試して見ます。
No.2
- 回答日時:
ExcelのFindメソッドで、完全一致検索に制限があるのは確かですが、
それは「検索する文字列が255文字まで」というものです。
>例文の“=文字A”には30バイトの文字列が入っている事がわかりました。
これが15文字~30文字の文字列の長さの事でしたら、
制限内ですので型不一致エラーは別の要因です。
>↑のような感じで完全一致で検索したいのですが、
感じではなくて実際にエラーが出るコードの提示があれば
他の方からも追加アドバイスがあるかもしれません。
ちなみに
>Variant型が16バイトという記載がありました。
ヘルプの『データ型の概要』を参照してみてください。
>データ型 記憶領域のサイズ 範囲
>:
>バリアント型 (Variant) (数値) 16 バイト 倍精度浮動小数点数型の範囲と同じ。
Variant型変数の中に数値を格納した時の
Variant型の記憶領域のサイズが16バイトである、という意味です。
回答ありがとうございます。
>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することができないのですが、
同じ事象が再現できるか検証してみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
String""から型'Double'への変...
-
お助けください!VBAのファイル...
-
エクセルVBAで埋め込みグラフ(C...
-
【VBA】ワークブックを開く時に...
-
LaTeXのエラーについて(コンパ...
-
HTMLソースが表示のページのも...
-
mailstorehomeのエクスポートで...
-
VBAでfunctionを利用しようとし...
-
ApplicationとWorksheetFunctio...
-
オートシェイプの削除時のエラ...
-
Excel vbaについての質問
-
COMExceptionはハンドルされま...
-
CreateFontが文法エラーに
-
unityの教科書のゲームを作って...
-
フランスの生年月日(jj/mm/aaaa)
-
データベース操作時エラーについて
-
ISAMドライバー
-
VC++で作成したソフトを実行す...
-
ADO 「認証に失敗しました」
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
お助けください!VBAのファイル...
-
VBAでfunctionを利用しようとし...
-
【VBA】ワークブックを開く時に...
-
マクロで"#N/A"のエラー行を削...
-
文字列内で括弧を使うには
-
String""から型'Double'への変...
-
【Access】Excelインポート時に...
-
VBA データ(特定値)のある最...
-
On ErrorでエラーNoが0
-
インポート時のエラー「データ...
-
ACCESSで値を代入できないとは?
-
VBA エクセル で FIND でのエラ...
-
Filter関数を用いた結果、何も...
-
レコード登録時に「演算子があ...
-
ApplicationとWorksheetFunctio...
-
Excel vbaについての質問
-
【VBAエラー】Nextに対するFor...
-
実行時エラー 438 の解決策をお...
-
「実行時エラー '3167' レコー...
おすすめ情報