過去ログ

                                Page     582
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 ▼列ごとのデータ抽出  コタツみかん 03/1/20(月) 15:13
   ┗Re:列ごとのデータ抽出  Jaka 03/1/20(月) 16:39
      ┗Re:列ごとのデータ抽出  コタツみかん 03/1/20(月) 17:30
         ┗Re:列ごとのデータ抽出  Jaka 03/1/21(火) 11:10
            ┗Re:列ごとのデータ抽出  コタツみかん 03/1/22(水) 10:05

 ───────────────────────────────────────
 ■題名 : 列ごとのデータ抽出
 ■名前 : コタツみかん
 ■日付 : 03/1/20(月) 15:13
 -------------------------------------------------------------------------
   VBA初心者です。

今回、列ごとのデータの中から、条件にあうデータを抽出して、(同じシート内の)
別の場所へ表示するマクロを作りたかったのですが、このままだと、列の数分マクロを
作成しており、とても不便です。
どのように改良すれば、よろしいでしょうか?


現在は、条件に一致するデータの個数をまずcountifで求めて、マクロでその個数分を
コピーするという手法をとっています。


 【元のデータ】 B列    C列    D列  E列 
   項目名   3001   3002   3003  3004
   データ    A    B    A   A
          A    A    A   C
          A    S    D   F
         

 【抽出の条件】
  
   項目名   3001   3002   3003   3004   
   条件     A    A    D    G 
   数式      3    1     2     
  

 【取得したい結果】  
   項目名   3001   3002   3003   3004   
          A    A    D      
          A         D    
          A


作成したマクロ

Sub B列値のコピー()

Dim X As Integer         'Xはコピーする回数
X = 0
Range("B26:K30").ClearContents  '以前の値を消す
Range("B18").Select 
If Range("B19").Value <> "" Then 
  ActiveCell.Select       
  Selection.Copy
  Range("B26").Select
   ActiveSheet.Paste
  Do Until X = Range("B19").Value 
  ActiveSheet.Paste
  ActiveCell.Offset(1, 0).Select
  X = X + 1
  Loop  
  Application.CutCopyMode = False  
End If
End Sub

この中で、B18が【抽出の条件】の3001の条件「A」です。
これをB26からX回分コピーさせています。
よろしくお願いします。
 ───────────────────────────────────────  ■題名 : Re:列ごとのデータ抽出  ■名前 : Jaka  ■日付 : 03/1/20(月) 16:39  -------------------------------------------------------------------------
   こんにちは。
シート関係と行等が良くわかんないんですけど。
例えばSheet1のB18の「A」という文字を、B2〜B17に何個入っているか数えて、あった分だけSheet2のB2からBnまで繰り返す手書き出す。と言う事でしょうか?
C18、D18、E18も同じように(Sheet2に項目名は、当然入れて)


Sheet1
 【元のデータ】 B列    C列    D列  E列 
1   項目名   3001   3002   3003  3004
2   データ    A    B    A   A
3          A    A    A   C
4          A    S    D   F
5         

・【抽出の条件】
・  
・   項目名   3001   3002   3003   3004   
18   条件     A    A    D    G 
19   数式      3    1     2     
  

Sheet2
 【取得したい結果】  
1   項目名   3001   3002   3003   3004   
2          A    A    D      
3          A         D    
4          A
 ───────────────────────────────────────  ■題名 : Re:列ごとのデータ抽出  ■名前 : コタツみかん  ■日付 : 03/1/20(月) 17:30  -------------------------------------------------------------------------
   Jaka さん、さっそくのお返事ありがとうございます。
まさに、ご指摘の通りです。
よろしくお願いします。

>こんにちは。
>シート関係と行等が良くわかんないんですけど。
>例えばSheet1のB18の「A」という文字を、B2〜B17に何個入っているか数えて、あった分だけSheet2のB2からBnまで繰り返す手書き出す。と言う事でしょうか?
>C18、D18、E18も同じように(Sheet2に項目名は、当然入れて)
 ───────────────────────────────────────  ■題名 : Re:列ごとのデータ抽出  ■名前 : Jaka  ■日付 : 03/1/21(火) 11:10  -------------------------------------------------------------------------
   こんにちは。
私の言った通りだと、提示されたデータのDの個数が違うみたいですけど...。今気づいた。
取りあえず私の言った通りだと、こんな感じです。

Sub wowo()
  Dim DCnt As Long, i As Long, ii As Long
  Sheets("Sheet2").Range("A1:E1").Value = Range("A1:E1").Value
  For i = 2 To 5
    DCnt = Application.CountIf(Range(Cells(2, i), Cells(17, i)), Cells(18, i).Value)
    If DCnt > 0 Then
      For ii = 1 To DCnt
        Sheets("Sheet2").Cells(ii + 1, i).Value = Cells(18, i).Value
      Next
    End If
  Next
End Sub
 ───────────────────────────────────────  ■題名 : Re:列ごとのデータ抽出  ■名前 : コタツみかん  ■日付 : 03/1/22(水) 10:05  -------------------------------------------------------------------------
   Jaka さん、早速の解答ありがとうございます。
>こんにちは。
>私の言った通りだと、提示されたデータのDの個数が違うみたいですけど

大変失礼しました。違っておりました。 (>_<)
また、お伺いすることもあるかと思います。
その時にはよろしくお願いします。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 582