Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


269 / 3841 ページ ←次へ | 前へ→

【77057】Re:エクセル マクロ ワークシート間の...
回答  ろん  - 15/5/10(日) 18:45 -

引用なし
パスワード
   ▼β さん:

大変ありがとうございます。
参考にさせていただきます。
助かりました。


>▼ろん さん:
>
>モジュールには
>標準モジュール、ThisWorkbookモジュール、Sheetモジュール、ユーザーフォームモジュール
>そして特別な存在としてクラスモジュールがあります。
>VBAをこれから勉強ということであれば、まず標準モジュールを基本にすればよろしいかと思います。
>その他のモジュールは、オブジェクトモジュールと総称。特殊なイベント処理に使用するのが主目的。
>今回、ユーザーフォームも使っておられるようですが、もし、別マクロブックを開くことのみがその目的であれば
>これも標準モジュールで処理したほうが、わかりやすいと思います。
>それぞれのモジュールをどう使い分けるか、それは、やりながら、おいおいにわかってくると思いますが
>以下のページで、わかりやすく説明されていますので一読されたらよろしいですね。
>
>ht p://officetanaka.net/excel/vba/beginner/10.htm
>ht p://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_200_040.html
>ht p://www.happy2-island.com/excelsmile/smile01/capter00400.shtml
>
>で、サンプル的に。
>
>1.ワークブック1に標準モジュールを準備。
>2.その標準モジュールに以下のマクロを書きます。
>
>Sub Test1()
>
>  '★ワークブック2 を開くコードをここに記述
>  
>  'ワークブック2 の Test2 を実行
>  Application.Run "ワークブック2.xlsm!Test2"
>  
>  '★後続の処理コードをここに記述
>
>  '★必要なら、ここでワークブック2を閉じるコードを書きます
>  
>End Sub
>
>3.ワークブック1のシート(どのシートでもいいですが、最初のシートにしましょう)に
>  開発タブ->挿入 から、フォーム今tロールのボタンを配置します。
>4.マクロ登録ダイアログが表示されますから、Test1 を選択します。
>  これで、このボタンがクリックされたら、Test1が起動するようになります。
>5.デザインモードになっていますので、デザインモードをクリックして解除します。
>
>で、次に ワークブック2 側。
>
>6.標準モジュールを準備します。
>7.ここに、Test2 プロシジャを書きます。
>
>Sub Test2()
>
>  '★このプロシジャで実行すべきコードを記述。
>  
>  '以下はテスト用です
>  MsgBox "Hello!"
>  
>End Sub
>
>こうして、ワークブック1側のボタンをクリックしてください。
>ワークブック2側のプロシジャ、Test2 が実行されます。
・ツリー全体表示

【77056】Re:コンボボックスとチェックボックスの...
お礼  mohimohi  - 15/5/10(日) 18:04 -

引用なし
パスワード
   ▼β さん:
 本当にありがとうございます!非常に助かりました・・・・

これらのソースコードの意味をこれから日本文で追加してみます!!!
改めて聞くことがあるかと思いますが、(きっとすぐに。。。;;)
その際はどうかよろしくお願い致します。
・ツリー全体表示

【77055】Re:コンボボックスとチェックボックスの...
発言  β  - 15/5/10(日) 17:33 -

引用なし
パスワード
   ▼mohimohi さん:

よかったです。

>CommboBox4を選んだ際に連動でチェックボックスにチェックがされますが、チェックがされない状態で表示することは可能でしょうか?
>Falseにしてしまうと、チェックボックス全体が押下不可になってしまいますよね?
>チェックがされないで連動は可能なんでしょか。

ComboBox4_Change の最後のほうにある  .Value = True を消せばOKだと思います。
・ツリー全体表示

【77054】Re:コンボボックスとチェックボックスの...
お礼  mohimohi  - 15/5/10(日) 17:07 -

引用なし
パスワード
   ▼β さん:

とんでもないです!
βさんには本当に本当に感謝しております。
いつも丁寧にご指導してくださって本当にありがとうございます。。。。><

そして、見事に希望通り動きました!!!涙

 また質問で申し訳ないのですが、CommboBox4を選んだ際に連動でチェックボックスにチェックがされますが、チェックがされない状態で表示することは可能でしょうか?
Falseにしてしまうと、チェックボックス全体が押下不可になってしまいますよね?
チェックがされないで連動は可能なんでしょか。
・ツリー全体表示

【77053】Re:コンボボックスとチェックボックスの...
発言  β  - 15/5/10(日) 15:25 -

引用なし
パスワード
   ▼mohimohi さん:

申し訳ありません。ミスでした。
該当のものが1件の時、エラーになります。
なお、エラーでとまった時点ではComboBox2以下にはセットできていませんので
そこは空白になっています。これは忘れていただいてOKです。

ComboBox1_Change、ComboBox2_Change、ComboBox3_Change を入れ替えてください。
他はそのままでOKです。

Private Sub ComboBox1_Change()

  If ComboBox1.ListIndex < 0 Then Exit Sub
  
  ComboBox2.Clear
  ComboBox3.Clear
  ComboBox4.Clear
  ComboBox2.Value = ""
  ComboBox3.Value = ""
  ComboBox4.Value = ""
  
  rfA.AutoFilter Field:=1, Criteria1:=ComboBox1.Value
  If rfA.Columns(1).SpecialCells(xlCellTypeVisible).Cells.Count = 1 Then Exit Sub
  rfX.CurrentRegion.Clear
  Intersect(rfA, rfA.Offset(1)).Copy rfX
  rfX.CurrentRegion.RemoveDuplicates Columns:=2, Header:=xlNo
  With rfX.CurrentRegion.Columns("B")
    If .Rows.Count = 1 Then
      ComboBox2.AddItem .Value
    Else
      ComboBox2.List = .Value
    End If
  End With
  
End Sub

Private Sub ComboBox2_Change()

  If ComboBox2.ListIndex < 0 Then Exit Sub
  
  ComboBox3.Clear
  ComboBox4.Clear
  ComboBox3.Value = ""
  ComboBox4.Value = ""
  
  rfA.AutoFilter Field:=1, Criteria1:=ComboBox1.Value
  rfA.AutoFilter Field:=2, Criteria1:=ComboBox2.Value
  If rfA.Columns(1).SpecialCells(xlCellTypeVisible).Cells.Count = 1 Then Exit Sub
  rfX.CurrentRegion.Clear
  Intersect(rfA, rfA.Offset(1)).Copy rfX
  rfX.CurrentRegion.RemoveDuplicates Columns:=3, Header:=xlNo
  With rfX.CurrentRegion.Columns("C")
    If .Rows.Count = 1 Then
      ComboBox3.AddItem .Value
    Else
      ComboBox3.List = .Value
    End If
  End With
  
End Sub

Private Sub ComboBox3_Change()

  If ComboBox3.ListIndex < 0 Then Exit Sub
  
  ComboBox4.Clear
  ComboBox4.Value = ""
  
  rfA.AutoFilter Field:=1, Criteria1:=ComboBox1.Value
  rfA.AutoFilter Field:=2, Criteria1:=ComboBox2.Value
  rfA.AutoFilter Field:=3, Criteria1:=ComboBox3.Value
  If rfA.Columns(1).SpecialCells(xlCellTypeVisible).Cells.Count = 1 Then Exit Sub
  rfX.CurrentRegion.Clear
  Intersect(rfA, rfA.Offset(1)).Copy rfX
  With rfX.CurrentRegion.Columns("D:E")
    ComboBox4.List = .Value
  End With
  
End Sub
>▼β さん:
>
>>何も表示されないというのは、ComboBox1 で選択しても ComboBox2 のリストが空白だということですか?
>⇒はい。その通りです。ComboBox1で氏名を選択すると、
>★ComboBox2.List = .Valueの部分でエラーになり、「実行時エラー381 Listプロパティを設定できません。プロパティの配列のインデックスが無効です」とメッセージが出ます。
>ComboBox2、3、4は、プルダウンで選択項目も表示されません。。。
>
>>こうするためには、そのComboBox の ListFillRage には、なにも設定していないことが条件ですが
>>そこはいかがですか?もし、プロパティで設定があるなら、消してください。
>⇒各ComboBoxのプロパティのListFillRageには何も設定されていませんでした。;; 空白でした。。。。
>
>>エラーになった時、SHeet2 の状態はどうなっていましたか?
>⇒
>
>■CommandButton押下時のSheet2
>(1行目はF1,G1を除いて全てフィルタ付)
> A   B   C   D    E   F   G
>1氏名 性別  年齢  住み         氏名
>2田中 女   12   東京   2      田中
>3山田 男    6  神奈川  3       山田
>4山田 男   29   東京   4      鈴木
>5鈴木 女   14   群馬   5
>
>
>■ComboBox1選択時のSheet2(田中の場合)
>
> A   B   C   D    E   F   G
>1氏名 性別  年齢  住み        氏名
>2田中 女   12   東京   2     田中
>6     
>7田中 女   12   東京   2     
>
>
>■ComboBox1選択時のSheet2(山田の場合)
>
> A   B   C   D    E   F   G
>1氏名 性別  年齢  住み        氏名
>3山田 男    6  神奈川  3       山田
>4山田 男   29   東京   4      鈴木←このように表示されます
>6
>7山田 男    6  神奈川  3
>
>
>■ComboBox1選択時のSheet2(鈴木の場合)
>
> A   B   C   D    E   F   G
>1氏名 性別  年齢  住み         氏名
>5鈴木 女   14   群馬   5        ←何も表示されませんでした
>6
>7鈴木 女   14   群馬   5
>
>どの氏名を選んでも、同じエラーが表示されます。
>何度も申し訳ございませんが、よろしくお願い致します。
・ツリー全体表示

【77052】Re:コンボボックスとチェックボックスの...
発言  mohimohi  - 15/5/10(日) 14:54 -

引用なし
パスワード
   ▼β さん:

>何も表示されないというのは、ComboBox1 で選択しても ComboBox2 のリストが空白だということですか?
⇒はい。その通りです。ComboBox1で氏名を選択すると、
★ComboBox2.List = .Valueの部分でエラーになり、「実行時エラー381 Listプロパティを設定できません。プロパティの配列のインデックスが無効です」とメッセージが出ます。
ComboBox2、3、4は、プルダウンで選択項目も表示されません。。。

>こうするためには、そのComboBox の ListFillRage には、なにも設定していないことが条件ですが
>そこはいかがですか?もし、プロパティで設定があるなら、消してください。
⇒各ComboBoxのプロパティのListFillRageには何も設定されていませんでした。;; 空白でした。。。。

>エラーになった時、SHeet2 の状態はどうなっていましたか?


■CommandButton押下時のSheet2
(1行目はF1,G1を除いて全てフィルタ付)
 A   B   C   D    E   F   G
1氏名 性別  年齢  住み         氏名
2田中 女   12   東京   2      田中
3山田 男    6  神奈川  3       山田
4山田 男   29   東京   4      鈴木
5鈴木 女   14   群馬   5


■ComboBox1選択時のSheet2(田中の場合)

 A   B   C   D    E   F   G
1氏名 性別  年齢  住み        氏名
2田中 女   12   東京   2     田中
6     
7田中 女   12   東京   2     


■ComboBox1選択時のSheet2(山田の場合)

 A   B   C   D    E   F   G
1氏名 性別  年齢  住み        氏名
3山田 男    6  神奈川  3       山田
4山田 男   29   東京   4      鈴木←このように表示されます
6
7山田 男    6  神奈川  3


■ComboBox1選択時のSheet2(鈴木の場合)

 A   B   C   D    E   F   G
1氏名 性別  年齢  住み         氏名
5鈴木 女   14   群馬   5        ←何も表示されませんでした
6
7鈴木 女   14   群馬   5

どの氏名を選んでも、同じエラーが表示されます。
何度も申し訳ございませんが、よろしくお願い致します。
・ツリー全体表示

【77051】Re:コンボボックスとチェックボックスの...
発言  β  - 15/5/10(日) 14:10 -

引用なし
パスワード
   ▼mohimohi さん:

>しかし、性別、年齢、住については何も表示されません。

もともとのそちらのコードもそうなっていたと思いますが、私がアップしたコードは

・CommandButton1 クリックでは ComboBox1 のリストのみをセット。
 ComboBox2〜ComboBox4 は空白
・ComboBox1 で何かを選択すれば、それに紐付くリストを ComboBox2 にセット
・ComboBox2 で何かを選択すれば、それに紐付くリストを ComboBox3 にセット
・ComboBox3 で何かを選択すれば、それに紐付くリストを ComboBox4 にセット
・ComboBox4 で何かを選択すれば、そのデータに基づいて、CheckBox に反映

このようになっています。つまり、どんどん絞り込んでいくというものです。

何も表示されないというのは、ComboBox1 で選択しても ComboBox2 のリストが空白だということですか?

>★ComboBox2.List = .Valueの部分でエラーになり、「実行時エラー381
>Listプロパティを設定できません。プロパティの配列のインデックスが無効です」とメッセージが出ます。

各ComboBox へは配列から直接リストをセットしています。(もともとの、そちらのコードもそうでした)
こうするためには、そのComboBox の ListFillRage には、なにも設定していないことが条件ですが
そこはいかがですか?もし、プロパティで設定があるなら、消してください。

もし、ListFillRage には何も設定していないということであれば・・・悩みます。
エラーになった時、SHeet2 の状態はどうなっていましたか?
・ツリー全体表示

【77050】Re:エクセル マクロ ワークシート間の...
発言  β  - 15/5/10(日) 13:49 -

引用なし
パスワード
   ▼ろん さん:

モジュールには
標準モジュール、ThisWorkbookモジュール、Sheetモジュール、ユーザーフォームモジュール
そして特別な存在としてクラスモジュールがあります。
VBAをこれから勉強ということであれば、まず標準モジュールを基本にすればよろしいかと思います。
その他のモジュールは、オブジェクトモジュールと総称。特殊なイベント処理に使用するのが主目的。
今回、ユーザーフォームも使っておられるようですが、もし、別マクロブックを開くことのみがその目的であれば
これも標準モジュールで処理したほうが、わかりやすいと思います。
それぞれのモジュールをどう使い分けるか、それは、やりながら、おいおいにわかってくると思いますが
以下のページで、わかりやすく説明されていますので一読されたらよろしいですね。

ht p://officetanaka.net/excel/vba/beginner/10.htm
ht p://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_200_040.html
ht p://www.happy2-island.com/excelsmile/smile01/capter00400.shtml

で、サンプル的に。

1.ワークブック1に標準モジュールを準備。
2.その標準モジュールに以下のマクロを書きます。

Sub Test1()

  '★ワークブック2 を開くコードをここに記述
  
  'ワークブック2 の Test2 を実行
  Application.Run "ワークブック2.xlsm!Test2"
  
  '★後続の処理コードをここに記述

  '★必要なら、ここでワークブック2を閉じるコードを書きます
  
End Sub

3.ワークブック1のシート(どのシートでもいいですが、最初のシートにしましょう)に
  開発タブ->挿入 から、フォーム今tロールのボタンを配置します。
4.マクロ登録ダイアログが表示されますから、Test1 を選択します。
  これで、このボタンがクリックされたら、Test1が起動するようになります。
5.デザインモードになっていますので、デザインモードをクリックして解除します。

で、次に ワークブック2 側。

6.標準モジュールを準備します。
7.ここに、Test2 プロシジャを書きます。

Sub Test2()

  '★このプロシジャで実行すべきコードを記述。
  
  '以下はテスト用です
  MsgBox "Hello!"
  
End Sub

こうして、ワークブック1側のボタンをクリックしてください。
ワークブック2側のプロシジャ、Test2 が実行されます。
・ツリー全体表示

【77049】Re:エクセル マクロ ワークシート間の...
回答  ろん  - 15/5/10(日) 13:07 -

引用なし
パスワード
   ▼β さん:
返信ありがとうございます。
説明が不足しており申し訳ありません。

当方がやりたいことは以下です。

1)ワークブック1>ワークシート1 でボタンをクリック。フォームに記述したサブルーチン1.で、ワークブック2>ワークシート2を開く。
2)ワークブック2>ワークシート2を開くとともに、ワークシート2.のシートモジュールのサブルーチン2.を実行。
3)サブルーチン2.完了後、サブルーチン1.の処理を再開。

因みに、標準モジュール、シートモジュール、フォームの使い分けに関してもよく理解ができていないので、その点を含めてアドバイスをいただければ助かります。


>▼ろん さん:
>
>教えてください。
>
>>エクセルで複数のワークシートを開いた状態で
>
>複数のワークシートですか?
>それとも、複数のマクロブックですか?
>
>>あるワークシートで起動したマクロ実行中に、他のワークシートに設定したマクロを
>
>ワークシートなのかマクロブックなのかにもよりますが、そもそも、マクロはどこに書かれていますか?
>シートモジュールですか?標準モジュールですか?
>
>いずれにしても、お望みのことはできますが、それが、ブックを言っておられるのかシートのことなのか。
>そのマクロはどこに書かれているのかによって方法が異なりますので。
・ツリー全体表示

【77048】Re:コンボボックスとチェックボックスの...
発言  mohimohi  - 15/5/10(日) 11:35 -

引用なし
パスワード
   ▼β さん:

>もともとのシートは、変更しません。
>そこにリストがあって、チェックボックスやコマンドボタンもあるんですよね。
>作業で使う Sheet2 は、からっぽでよろしいですよ。
>目障りなら非表示シートにしておいてもOK(というより非表示シートにしておいたほうがいいです)
⇒そうなんですね!
すぐに直して実行したところ、8つのチェックボックスは押下不可になり、コンボボックス1には氏名が表示されました!(非表示シートも動いていました)希望のものに近づけた感じがして、感動しております!!!
しかし、性別、年齢、住については何も表示されません。

また、
Private Sub ComboBox1_Change()

  If ComboBox1.ListIndex < 0 Then Exit Sub
 
   ComboBox2.Clear
  ComboBox3.Clear
  ComboBox4.Clear
  ComboBox2.Value = ""
  ComboBox3.Value = ""
  ComboBox4.Value = ""
 
   rfA.AutoFilter Field:=1, Criteria1:=ComboBox1.Value
  If rfA.Columns(1).SpecialCells(xlCellTypeVisible).Cells.Count = 1 Then Exit Sub
  rfX.CurrentRegion.Clear
  Intersect(rfA, rfA.Offset(1)).Copy rfX
  rfX.CurrentRegion.RemoveDuplicates Columns:=2, Header:=xlNo
  With rfX.CurrentRegion.Columns("B")
    ★ComboBox2.List = .Value
  End With
 
End Sub

★ComboBox2.List = .Valueの部分でエラーになり、「実行時エラー381
Listプロパティを設定できません。プロパティの配列のインデックスが無効です」とメッセージが出ます。

ComboBox1.Value="田中"のとき、ComboBox1.ListIndex=0
ComboBox1.Value="山田"のとき、ComboBox1.ListIndex=1
ComboBox1.Value="鈴木"のとき、ComboBox1.ListIndex=2
でした。何か関係はありますか?よろしくお願いいたします。
・ツリー全体表示

【77047】Re:エクセル マクロ ワークシート間の...
発言  β  - 15/5/10(日) 9:37 -

引用なし
パスワード
   ▼ろん さん:

教えてください。

>エクセルで複数のワークシートを開いた状態で

複数のワークシートですか?
それとも、複数のマクロブックですか?

>あるワークシートで起動したマクロ実行中に、他のワークシートに設定したマクロを

ワークシートなのかマクロブックなのかにもよりますが、そもそも、マクロはどこに書かれていますか?
シートモジュールですか?標準モジュールですか?

いずれにしても、お望みのことはできますが、それが、ブックを言っておられるのかシートのことなのか。
そのマクロはどこに書かれているのかによって方法が異なりますので。
・ツリー全体表示

【77046】エクセル マクロ ワークシート間の連動
質問  ろん  - 15/5/10(日) 8:52 -

引用なし
パスワード
   エクセルで複数のワークシートを開いた状態で、あるワークシートで起動したマクロ実行中に、他のワークシートに設定したマクロを実行することはできますか?
可能であれば、プログラムのやり方について教えてください。
(数日前にVBAに関する本を購入し、プログラムを勉強し始めた者です。)
・ツリー全体表示

【77045】Re:コンボボックスとチェックボックスの...
発言  β  - 15/5/10(日) 6:21 -

引用なし
パスワード
   ▼mohimohi さん:

誤解を与えたかもしれません。
もともとのシートは、変更しません。
そこにリストがあって、チェックボックスやコマンドボタンもあるんですよね。
作業で使う Sheet2 は、からっぽでよろしいですよ。
目障りなら非表示シートにしておいてもOK(というより非表示シートにしておいたほうがいいです)
・ツリー全体表示

【77044】Re:初期値設定の仕方
発言  β  - 15/5/10(日) 5:40 -

引用なし
パスワード
   ▼ネイル さん:

まず、このコンボボックスは シート上のActiveX ですか?
ユーザーフォームのコンボボックスですか?
それともシート上のフォームコントロールのドロップダウンですか?

で、そのリストはどのように登録されていますか?
ListFillRangeやRowSource? それとも Listプロパティ(含む AddItem)?

次に、

> ツールを開いたときに、

この意味は? いつのことですか?

それと、

> また、クリアボタンを押すと、「選択して下さい」が表示されるようにしたいです。

最初に 「選択して下さい」とでていて、そこで、「クリアボタン」をおすと
また、「選択して下さい」をだすのですか?

その「クリアボタン」というのは、どのボタンですか?
・ツリー全体表示

【77043】初期値設定の仕方
質問  ネイル  - 15/5/9(土) 23:48 -

引用なし
パスワード
   コンボボックスの初期値の設定ができなくて困ってます!

 ツールを開いたときに、コンボボックスに「選択して下さい」と表示したいのですが、ソースコードがわかりません!!!!
 また、クリアボタンを押すと、「選択して下さい」が表示されるようにしたいです。

 どなたかソースコードを教えていただけませんでしょうか。
どうぞよろしくお願い致します。
・ツリー全体表示

【77042】Re:条件を満たす値の検索
発言  kanabun  - 15/5/9(土) 21:19 -

引用なし
パスワード
   ▼さくら さん:

>ご提案頂いたフィルタ案でトライしてみたのですが私にはむりでした。

ぼくの提示した Sub tryA() に 「B列だけ転記する」ための◆の一行を
付け加えれば、御所望のことはできます。
(フィルタは一般機能ですから、まず手動でやってフィルタ操作を理解
するのが 近道かもしれません)

Sub tryB()
  With Sheets("Sheet2")
    .UsedRange.ClearContents
    '条件をシートに書き出す
    .Range("Z1:AA1").Formula = "=Sheet1!$A$1"
    .Range("Z2").Formula = ">=10.01"
    .Range("AA2").Formula = "<=10.05"

    '◆ Sheet1の表よりB列だけ Sheet2のA列へ転記(見出しのコピー)
    .Range("A1").Value = Sheets("Sheet1").Range("B1").Value
    
    'フィルターAdvancedFilter 実行
    Sheets("Sheet1").Range("A1").CurrentRegion.AdvancedFilter _
      Action:=xlFilterCopy, _
      CriteriaRange:=.Range("Z1:AA2"), _
      CopyToRange:=.Range("A1")
    .Activate
  End With
End Sub
・ツリー全体表示

【77041】Re:条件を満たす値の検索
発言  kanabun  - 15/5/9(土) 21:06 -

引用なし
パスワード
   ▼さくら さん:

> 下表の例で言いますと、A列の中から10.1以上10.5以下の値を検索
> →その右横セルの値B1〜B3をsheet2 A1から下方向へ順に貼り付けるイメージです。
> 下表の例ではsheet2 A1〜A6にB1,B2,B3,B5,B6,B7が張り付くことになります。

>
>A   B
>10.3  B1
>・   B2
>・   B3
>・   ・
>10.3  B5  
>・   B6
>・   B7
>・   ・

● ↑の図で気になるのは、
>10.3  B1
>・   B2
>・   B3

>・ 
>・ 
の部分です。ここには 10.3 と書いてあるんですか? 空白なんですか?
10.3 と書いてあれば、問題ないのですが。

●あと、βさんもコメントされていますが、一行目が列見出しになってないと
フィルタ(とくに、AdvancedFilter にとって)は 致命的です。
表なのだから、
 「実際には」一行目には 列見出しが書いてあるのですよね?!

書いてあれば、AdvancedFilterを使えば 表の1列目の数値を条件に抽出し、
表の「全列」でなく、必要な列だけ 抽出転記することは(AdvancedFilter は
それが目的の一般機能ですから)とても簡単なことです。
・ツリー全体表示

【77040】Re:コンボボックスとチェックボックスの...
質問  mohimohi  - 15/5/9(土) 20:40 -

引用なし
パスワード
   ▼β さん:

お世話になっております。
初歩的な質問かと思いますが、ご教授のほど宜しくお願い致します。

βさんのソースコードを使用して、ツールを作成しております。
>作業シートとして "Sheet2" を使います。
>抽出そのものは、オートフィルターや重複の削除といったエクセル標準機能を使っています。
⇒Sheet2に表を示して、コンボボックスやチェックボックスはSheet1に示しました。そして、コマンドボタンを押下したところ、sheet2の表は全て消え、A1にフィルターが表示され(中身は空白)、E1に1のみが表示されました。

また、

Private Sub CommandButton1_Click()
  Dim WS As Worksheet
  Dim x As Long
  Dim ckb As OLEObject
 
   Set WS = Sheets("Sheet2")
  ComboBox2.Clear
  ComboBox3.Clear
  ComboBox4.Clear
  ComboBox1.Value = ""
  ComboBox2.Value = ""
  ComboBox3.Value = ""
  ComboBox4.Value = ""
 
   WS.UsedRange.Clear
  WS.AutoFilterMode = False
  Range("A1").CurrentRegion.Columns("A:D").Copy WS.Range("A1")
  WS.Range("E1").Value = 1
  WS.Range("A1").CurrentRegion.Columns("E").DataSeries Rowcol:=xlColumns, Type:=xlLinear, Date:=xlDay, Step:=1, Trend:=False
  WS.Range("A1").EntireColumn.AutoFilter
  Set rfA = WS.AutoFilter.Range
  Set rfX = WS.Cells(rfA.Rows.Count + 2, "A")
  WS.Range("A1").CurrentRegion.Columns("A").Copy WS.Range("G1")
 ★ WS.Range("G1").CurrentRegion.RemoveDuplicates Columns:=1,Header:=xlYes

★の部分で、エラーが表示され、デバックしたところ「アプリケーション定義またはオブジェクト定義のエラーです」と表示されました。
どこが悪いのでしょうか。。。インターネット、参考書と並行して調べておりますがわかりません><

ご教授の程、宜しくお願い致します
・ツリー全体表示

【77039】Re:条件を満たす値の検索
発言  β  - 15/5/9(土) 19:39 -

引用なし
パスワード
   ▼さくら さん:

アップしたものは、A列を絞り込み、それをSheet2に転記するものですが、
絞り込んだ結果のB列を転記ということなら以下。

ただし、フィルター詳細設定にしろ、オートフィルターにしろ
【1行目】がタイトル行でなければいけません。
いやいや、それはいやだということなら、マクロ内でダミータイトル行を挿入し
あとで削除する方法も愛rますが、とりあえずは1行目をタイトル行にした上で
以下を試してみてください。

Sub Test2()
  ActiveSheet.AutoFilterMode = False
  Range("A1").AutoFilter Field:=1, Criteria1:=">=10.1", _
              Operator:=xlAnd, Criteria2:="<=10.5"
  With ActiveSheet.AutoFilter.Range
    If .SpecialCells(xlCellTypeVisible).Count > 0 Then
      .Columns("B").Copy Sheets("Sheet2").Range("A1")
    End If
  End With
  ActiveSheet.AutoFilterMode = False
End Sub
・ツリー全体表示

【77038】Re:条件を満たす値の検索
質問  さくら  - 15/5/9(土) 18:31 -

引用なし
パスワード
   kanabunさん βさん

ありがとうございました。お礼が遅くなりましてたいへん失礼いたしました。
当初の説明が言葉足らずで申し訳なかったのですが、正確には以下のような動作を望んでいます。下表の例で言いますと、A列の中から10.1以上10.5以下の値を検索→その右横セルの値B1〜B3をsheet2 A1から下方向へ順に貼り付けるイメージです。下表の例ではsheet2 A1〜A6にB1,B2,B3,B5,B6,B7が張り付くことになります。
ご提案頂いたフィルタ案でトライしてみたのですが私にはむりでした。
ご教授頂けますと幸いです。

A   B
10.3  B1
・   B2
・   B3
・   ・
10.3  B5  
・   B6
・   B7
・   ・
・ツリー全体表示

269 / 3841 ページ ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free