
すみません、教えてください。
例) 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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA初心者です 検索した数字の行に色をつける 5 2023/02/13 14:22
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Visual Basic(VBA) Excle VBA Findメソッドについて 3 2022/07/15 13:56
- Visual Basic(VBA) シフト表のコマで「ブロック」されている前の時間の「出」を同一列の「休」と入れ替えたいがふぇきません。 2 2023/08/02 18:49
- Excel(エクセル) Excelシートのある番地の文字が一致したすべての行を別シートに転記する方法 11 2022/10/25 08:43
- Excel(エクセル) マクロで特定日より1日前の日を求めたい 6 2022/05/08 09:23
- Visual Basic(VBA) エクセルVBAのコードで質問です。 下のコードはJ16の文字列をB3を起点とする範囲から探して、見つ 5 2023/04/07 11:07
- Excel(エクセル) 製品番号での整列と、検索に関して 3 2023/06/28 19:20
- Visual Basic(VBA) findメソッドの変数について 6 2023/06/23 08:01
- Excel(エクセル) 関数で複数ある→以降の文字の抽出したい 4 2022/08/07 09:47
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
お助けください!VBAのファイル...
-
インポート時のエラー「データ...
-
【VBA】ワークブックを開く時に...
-
マクロで"#N/A"のエラー行を削...
-
VBAでfunctionを利用しようとし...
-
「実行時エラー '3167' レコー...
-
マクロOn Error GoTo ErrLabel...
-
実行時エラー'-2147467259(8000...
-
Findプロパティを取得できません
-
VB.net 重複チェックがしたいです
-
クラスモジュールからのErr.Rai...
-
文字列内で括弧を使うには
-
VB2008 comboboxを連動させた...
-
オブジェクト型の変数にフォー...
-
String""から型'Double'への変...
-
VBA エクセル で FIND でのエラ...
-
Excel実行時エラー[80004005]に...
-
SQLでエラーです。
-
JAVA Jasper Report でのQRコー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
マクロOn Error GoTo ErrLabel...
-
UserForm1.Showでエラーになり...
-
お助けください!VBAのファイル...
-
VBAでfunctionを利用しようとし...
-
【VBA】ワークブックを開く時に...
-
String""から型'Double'への変...
-
文字列内で括弧を使うには
-
マクロで"#N/A"のエラー行を削...
-
Excel vbaについての質問
-
VBA データ(特定値)のある最...
-
On ErrorでエラーNoが0
-
インポート時のエラー「データ...
-
【VBAエラー】Nextに対するFor...
-
ACCESSで値を代入できないとは?
-
【Access】Excelインポート時に...
-
VBでSQL文のUPDATE構文を使った...
-
【VB.NET】 パワポ操作を非表示で
-
「実行時エラー '3167' レコー...
-
実行時エラー 438 の解決策をお...
-
実行時エラー'-2147467259(8000...
おすすめ情報