Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(指定なし : 指定なし)
配列の Worksheet への貼り付け
投稿日時: 21/11/08 07:05:27
投稿者: manatsu

配列に格納した AdvancedFilterの Criteria を Worksheet に貼り付けようとすると、[1a](↓参照) は OK ですが、[1b] は
  Run time error '1004
  Application - difined or object - defind error
と、うまくいきません。
 
[2a] も問題ありません。
[2b] はエラーにはなりませんが、「'123」が Range("C2") に数値として貼り付けられます。
 
どうやら「'」がいけないようですが、理由と対処法がわかりません。
 
意図していることは Criteria を配列に格納し履歴をつくり、Redo できるようにしたいということです。
 
どなたかよろしくご指導下さい。
 
[1-a]
       A
1 Column1
2 abc
 
[1-b]
       A
1 Column1
2 '=*abc*
 
[2-a]
       A
1 Column1
2 123
 
[2-b]
       A
1 Column1
2 '123
 
Sub Test()
  Dim arr As Variant
  arr = ActiveSheet.Range("A1").CurrentRegion
  ActiveSheet.Range("C1").Resize(UBound(arr, 1), UBound(arr, 2)) = arr
End Sub

回答
投稿日時: 21/11/08 07:59:34
投稿者: simple

ケース1bについては、
文字列 =*abc* が数式と理解され、
しかしそれは数式として誤っているために
結果としてエラーになっているものと思います。
 
検索条件(A2セル)の書き方ですが、
(1)
abcを含むものであれば、A2セルには
*abc*
または
*abc
でよいと思います。
(2)
単に
abc
と書くと、abcから始まる文字列にヒットします。
(3)
なお、abcに完全一致なら
="=abc"
ですね。
 
フィルタオプションについては例えば下記を参考にしてください。
http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_advancedfilter.html
 
「データ抽出の条件設定がバージョンによって異なる」
http://www.eurus.dti.ne.jp/~yoneyama/Excel/filter3.htm#jyouken

投稿日時: 21/11/08 11:13:53
投稿者: manatsu

simple さん
ありがとうございます。
 
『文字列 =*abc* が数式と理解され、しかしそれは数式として誤っているために結果としてエラーになっている』
これで理由がよくわかりました。
「'」メタキャラクタ(でいいのでしょうか?)は配列では無視されるという理解でよろしいですか?
実際のプロシージャでは、キーワードを「含む」で考えていたので、「'=*abc*」を回答でご指摘の「*abc*」にしたら問題なくなりました。私は「含む」は「'=*abc*」と記述するものだとばかり思い込んでいました。

回答
投稿日時: 21/11/08 12:29:26
投稿者: simple

引用:
「'」メタキャラクタ(でいいのでしょうか?)は配列では無視されるという理解でよろしいですか?
結果からするとそういうことになるのでしょうね。
ワークシート上でのみ有効な機能です。
セル間でそうした情報を含めて受け渡すなら、
配列を経由せず、コピーペイストすることになるでしょう。

投稿日時: 21/11/08 18:00:37
投稿者: manatsu

simple さん
ありがとうございました。
今後ともよろしくお願いします。