Excel VBA質問箱 IV

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

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


2342 / 13644 ツリー ←次へ | 前へ→

【68604】抽出について ぷう 11/3/28(月) 23:26 質問[未読]
【68605】Re:抽出について kanabun 11/3/28(月) 23:38 発言[未読]
【68606】Re:抽出について kanabun 11/3/28(月) 23:53 発言[未読]
【68607】Re:抽出について kanabun 11/3/29(火) 0:05 発言[未読]
【68608】Re:抽出について ぷう 11/3/29(火) 0:26 お礼[未読]

【68604】抽出について
質問  ぷう  - 11/3/28(月) 23:26 -

引用なし
パスワード
   はじめまして、最近エクセルVBA・関数を使う仕事が多くなり
教えて頂きたいことがあります。

1.下記sheet1 C1の「国語」という文字を選んで
その「国語」の文字が入っている行すべてをコピーして
sheet2の3行目以降に行を詰めて貼り付ける。
(「国語」の行はランダムに変わり、「国語」行の数なども
日々違います)といことをしたいのですが、どうしたらよいでしょうか?
ご教授宜しくお願いします。

sheet1

  A B  C  D   E F
1     国語 Aさん 
2     算数 Bさん
3     理科 Cさん
4     算数 Bさん
5     国語 Aさん
6
7
      ↓「国語」をコピー抽出↓
sheet2

  A B  C   D   E F
1
2     学科 担当
3      国語 Aさん 
4      国語 Aさん

【68605】Re:抽出について
発言  kanabun  - 11/3/28(月) 23:38 -

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

>その「国語」の文字が入っている行すべてをコピーして
>sheet2の3行目以降に行を詰めて貼り付ける。

>sheet1
>
>  A B  C  D   E F
>1     国語 Aさん 
>2     算数 Bさん
>3     理科 Cさん
>4     算数 Bさん
>5     国語 Aさん
>6
>7

1行目を挿入して、そこにタイトル(項目見出し)を入れ
> sheet1
>   A B  C  D   E F
1     学科 担当
2     国語 Aさん 
3     算数 Bさん
4     理科 Cさん
5     算数 Bさん
6     国語 Aさん
7
8
C列にフィルタをかけ抽出でしょうか?
オートフィルタでもいいですし、
抽出コピーだからフィルタオプションがより速いでしょうね
どちらも操作のマクロ記録をとれば、コードの元が得られます。

注意:フィルタ範囲はタイトル行からデータの最後の行まで
範囲指定してください。

【68606】Re:抽出について
発言  kanabun  - 11/3/28(月) 23:53 -

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

AutoFilterのマクロ記録で得られたコードを編集すると、
こんな風です。

Sub AutoFilterTest()
  With Worksheets(1)
    .AutoFilterMode = False
    '一行目にタイトル行がなかったら、挿入する
    If .Range("B1").Value <> "学科" Then
      .Rows(1).Insert
      .Range("B1:C1").Value = Array("学科", "担当")
    End If
    'B列にフィルタをかける→B,C列を Sheets(2)へコピー
    With .Range("B1", .Range("B1").End(xlDown))
      .AutoFilter Field:=1, Criteria1:="国語"
      .Resize(, 2).Copy Worksheets(2).Range("C2")
    End With
    .AutoFilterMode = False
  End With
End Sub

【68607】Re:抽出について
発言  kanabun  - 11/3/29(火) 0:05 -

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

フィルタオプションのばあいは シートのどこかに
抽出条件を書き込みます。
下の例では [F1:F2]にかいています。

Sub AdvFilterTest() '一行目に列見出しが書き込んであると仮定
 With Worksheets(1)
   '抽出条件を [F1:F2]に書き込む [F1]はB列タイトル
   .Range("F1").Formula = "=B1"
   .Range("F2").Value = "国語"

   'フィルタオプション実行
   .Range("B1", .Range("B1").End(xlDown)).Resize(,2) _
     .AdvancedFilter xlFilterCopy, _
     CriteriaRange:=.Range("F1:F2"), _
     CopyToRange:=Worksheets(2).Range("C2")
 End With
End Sub

【68608】Re:抽出について
お礼  ぷう  - 11/3/29(火) 0:26 -

引用なし
パスワード
   ご丁寧にありがとうございます。
さっそく試してみます。☆

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