OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

EXCELでの行の抽出

  • すぐに回答を!
  • 質問No.247560
  • 閲覧数6274
  • ありがとう数5
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 95% (88/92)

sheet1に

  A    B    C    D
1 日付 金額  備考  コード
2 01  1000 あいう    1
3 10  2000 えおか    3
4 20  3000 きくけ    4
5 30  4000 こさし    1
.
.
.
という感じで元データ(100行ほど)が入っています。
これを元にしてsheet2に

  A    B    C    D
1  1
2 日付 金額  備考  コード
3 01  1000 あいう    1
4 30  4000 こさし    1
.
.
.
というふうに表示したいのです。
sheet2のセルA1に入っているコードと一致するコードが入っているsheet1の行を抽出してsheet2に行の隙間なく表示させたいのです。
こんなことはできるのでしょうか?
メニューからコマンドを選択して・・・という方法ではなく、計算式かマクロで実現したいのです。
エクセル2000、Win98です。よろしくお願いします。
通報する
  • 回答数3
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.3

マクロでの回答が出ている様ですので、関数のみで行う方法を紹介します

【考え方】
1)Sheet1の最左端に作業用の列を1つ設けます
2)作業用列に、Sheet2のA1と同じ値がE列(質問例示のD列:コード)が
  同じであれば、E列にその行まで出てきたコードの数をセットします
  ==>Sheet2A1と同じコードのデータのみ
    1・2・3・4・・と連番がセットされます
3)あとは、Sheet1上で連番を元にVLOOKUP関数で参照します

【設定手順】
1)Sheet1のA列名を右クリックして"挿入"を選択し、作業列を挿入
2)Sheet1のA2セルに以下の式を入力してA3~Anにコピーします
   =IF(E2="","",IF(E2=Sheet2!$A$1,COUNTIF($E$2:E2,E2),""))

     ・E2(コード)が空白の時は空白をセット
     ・E2がSheet1のA1と同じであれば、E2から現在行のE列までの
      E2と同じコードの数をセットします
     ・コードが異なる場合は空白をセットします

3)Sheet2のA3セルに以下の式を入力してA3~Dnにコピーします
   =IF(ISNA(VLOOKUP(ROW()-2,Sheet1!$A:$E,COLUMN()+1,FALSE)),"",VLOOKUP(ROW()-2,Sheet1!$A:$E,COLUMN()+1,FALSE))

     ・VLOOKUPで検索がエラーになった場合空白をセットする為に
      ISNA関数でVLOOKUPを試行してチェックします
     ・エラーでない時改めてVLOOKUPで検索し値をセットします
       VLOOKUP(検索値,検索範囲,参照列,検索の型)
        ●検索値:ROW()-2 現在行番号から表示行まで行数を減算し
                  1・2・3・・・と変化させます
        ●検索範囲:Sheet1!$A:$E (絶対参照でA~E列とします)
        ●参照列:COLUMN()+1
             Sheet2のA列に検索範囲の2列目
             Sheet2のB列に検索範囲の3列目・・と表示するので
             現在列番号-1とする事で列に対応した値を参照します
        ●検索の型:FALSE 同一検索値のみとします

*****以上でご質問の表示が可能になります******

AnやDnとあるセルは、入力が予想される行数より多めにセットしても
式内でデータの有無を判断していますので、問題有りません。
お礼コメント
MSZ006

お礼率 95% (88/92)

ご回答ありがとうございました。
マクロを使わなくてもできるんですね!(正直なところマクロを使わないと無理かな・・・と思っていましたので)
わたしにはこのような方法は思いもつきませんでした。
この方法を採用させて頂こうと思います。本当にありがとうございました。
投稿日時 - 2002-04-06 14:17:38
-PR-
-PR-

その他の回答 (全2件)

  • 回答No.1
レベル13

ベストアンサー率 68% (791/1163)

Sheet2のA1に数値を入力してマクロ『抽出』を実行します。 ツール→マクロ→Visual Basic Editor でVBE画面に移り、挿入→標準モジュールで標準モジュールを挿入し下記コードを貼り付けます。 シートは、Sheet1、Sheet2として、転記する範囲も質問通りです。 また、マクロを実行する前に、シート2は初期化しています。(前の出力を消去) ご参考に。 Sub ...続きを読む
Sheet2のA1に数値を入力してマクロ『抽出』を実行します。

ツール→マクロ→Visual Basic Editor でVBE画面に移り、挿入→標準モジュールで標準モジュールを挿入し下記コードを貼り付けます。

シートは、Sheet1、Sheet2として、転記する範囲も質問通りです。
また、マクロを実行する前に、シート2は初期化しています。(前の出力を消去)

ご参考に。

Sub 抽出()
  Dim ws1 As Worksheet 'シート1
  Dim ws2 As Worksheet 'シート2
    Set ws1 = Worksheets("Sheet1")
    Set ws2 = Worksheets("Sheet2")
  Dim kijyun As Long 'シート2のA1の値
    kijyun = ws2.Range("A1").Value

  'シート2をきれいにする
  With ws2
    .Cells.ClearContents 'シート2をクリアする
    .Range("A1") = kijyun 'A1を書き直し
    .Range("A2:D2").Value = ws1.Range("A1:D1").Value '表題を転記
  End With

  Dim rw1 As Long 'シート1の行カウンタ
  Dim rw2 As Long 'シート2の行カウンタ
  rw1 = 2: rw2 = 3
  With ws1
    '照合しながら転記する
    While .Cells(rw1, 4) <> ""
      If .Cells(rw1, 4).Value = kijyun Then
        ws2.Range("A" & rw2 & ":D" & rw2).Value = .Range("A" & rw1 & ":D" & rw1).Value '値を転記
        rw2 = rw2 + 1
      End If

      rw1 = rw1 + 1
    Wend
  End With
End Sub
お礼コメント
MSZ006

お礼率 95% (88/92)

ご回答ありがとうございました。
とても勉強になりました。マクロが使いこなせるとエクセルでもいろんなことができそうですね。
投稿日時 - 2002-04-06 14:08:22

  • 回答No.2
レベル14

ベストアンサー率 28% (4323/15250)

エクセルのシートに下記Aのデータをテスト的に作りました。 そして下記VBAをModule1に入力し、実行しました。 するとBのように抽出できました。 ------------ Sub Test01() Range("A1:C10").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:= Range("A12:C1 ...続きを読む
エクセルのシートに下記Aのデータをテスト的に作りました。
そして下記VBAをModule1に入力し、実行しました。
するとBのように抽出できました。
------------
Sub Test01()
Range("A1:C10").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:= Range("A12:C13"), Unique:=False, copytorange:=Range("a15")
End Sub
(1行の文字数制限で、改行が無理に行われている部分が
発生すると思いますが、ご注意下さい。)
見だしのコード1コード2コード3も含めてRange
指定してください。CriteriaRangeも同じように、
見だしのコード1コード2コード3も含めてRange
指定してください。
-----A-----
コード1コード2コード3
acc1
svv2
dbb3
ggg1
hhh1
jee4
urr5
It4
ouu1

コード1コード2コード3
1
-----B------
コード1コード2コード3
acc1
ggg1
hhh1
ouu1
お礼コメント
MSZ006

お礼率 95% (88/92)

ご回答ありがとうございました。
同じ結果を得るにも色々な方法があるんですね。とても勉強になります。
投稿日時 - 2002-04-06 14:12:44
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
このやり方知ってる!同じこと困ったことある。経験を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ