天使と悪魔選手権

自分なりに調べてみたのですが、分からず…
お分かりになる方がいらっしゃいましたら、教えていただけますでしょうか。

Sheet1に、元となるデータを入力しています。この入力は案件が増えるごとに行が増えていきます。
A B  C   D   E
1 ○  魚   500  野村
2 ×  肉   600  中村
3 ○  野菜  700  富田
4 ×  その他 900  小林

A列が○の案件のみ、Sheet2に列ごとコピーを自動で行うようにしたいです。

調べたところIF関数で出来るかもしれないと思っているのですが、
「=IF(B1:B5="○",=Sheet1!A1,""」
では出来ませんでした。
そもそも、IF関数を使うのが間違いでしょうか?
また、もしIF関数の場合、「条件に見合わなかった時は何もしない」という組み方はどのようにすればいいのでしょうか?

調べ方が悪いのかもしれないのですが、これ以上調べられなかったので…
お分かりになる方、どうぞ宜しくお願い致します。

A 回答 (3件)

IF関数を使ってできるのは、Sheet1と少なくとも同じ行数・列数のSheet2の表に、○行はデータが表示され、×行は空白という程度の抽出です。



B列の何行目に○が現れるのか分からない状態でSheet2に○の行だけを自動抽出することはできません。

一番簡単なのは、オートフィルタでSheet1 B列の○のみ表示させてコピーし、Sheet2にペーストする方法だと思います。
    • good
    • 0
この回答へのお礼

ご回答をいただき、有難うございます。

>一番簡単なのは、オートフィルタでSheet1 B列の○のみ表示させてコピーし、Sheet2にペーストする方法だと思います。

確かにその通りなのですが、実際にこのExcelを見るのは全くPCに詳しくない方(コピー&ペーストでも無理!)ばかりなので、自動的に表示されるように組み込んでおきたい、という意図があります。
説明が不足しており申し訳ないです。

やはり難しいでしょうか・・・?
何かよい方法があれば良いのですが・・・

お礼日時:2010/04/09 18:56

今説明されている文だけでは、satonaka55さんがどんな目的のためにExcelを加工しようとしているのか、分からないです。



1つのExcelファイルをたくさんのPCアレルギーな人々が見るのか?
その場合、ファイルは共有サーバに上げるのか、メール配信でもするのか、PC自体が共有なのか!?
ファイルを見る人たちは一切Excelを編集できないのに、案件が増えるごとに行が増えていくのはナゼ?
○の行だけになっていれば、過去の案件も全部表示されていていいのか?

コピーもしないで、Sheet1にいつもオートフィルタをかけて保存しといてやればいいじゃん、という気もしますけど。
    • good
    • 0
この回答へのお礼

maruikamodさん
ご回答、どうも有難うございます。

説明が不足しており、申し訳ないです。
目的に関してですが、「PCにアレルギーはないが、Excelについての知識がない(見ることは出来るが、足し算引き算も出来ず「フィルタって何?」という方々)向けに、必要な情報だけを見れるようにしたい」です。

>1つのExcelファイルをたくさんのPCアレルギーな人々が見るのか?
 →10人程度の人が見ます。
  見るのは上記に記載したような、Excelに詳しくない方々です。
>その場合、ファイルは共有サーバに上げるのか、メール配信でもするのか、PC自体が共有なのか!?
 →共有サーバに上げます。メール配信はしません
>ファイルを見る人たちは一切Excelを編集できないのに、案件が増えるごとに行が増えていくのはナゼ?
 >案件が増えるごとに行が増えるのは、見るだけの人とは別に、案件を書き込む係りが私を含め合計3名いるからです。
>○の行だけになっていれば、過去の案件も全部表示されていていいのか?
 →はい。○であれば、過去のものも見れて構いません。

回答になっていますでしょうか?

お礼日時:2010/04/12 10:29

こんにちは。



Excelで自動処理を行う場合は、マクロ(VBA)を使用する方法もあります。
マクロの使用方法、作成手順等については、下記サイトをご参照下さい。

■参考サイト
Excelでお仕事!「VBA基本」
http://www.asahi-net.or.jp/~ef2o-inue/menu/menu0 …
Excel(エクセル)VBA入門
http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/i …

以下は、今回の処理を行うマクロの一例です。
このマクロは、シート2に作成した[コマンドボタン]が押された時に実行され、
シート1のデータから、"○"のデータを抽出して、シート2にコピーします。

■マクロの作成手順
1)シート2にマクロ実行用の[コマンドボタン]を作成します。
 ・「コントロールツールボックス」のコマンドボタンを貼り付けます。
2)VBE(Visual Basic Editor)を起動します。
3)VBE上で、シート2のコード画面に下記マクロを貼り付けます。
4)VBEを閉じて、一旦、Excelブックを保存します。

■マクロ例
注)下記のマクロは、シート2のコードモジュールに実装して下さい。

===↓ここから===========
'== [データ抽出]ボタンのクリック時処理 ==
Private Sub CommandButton1_Click()

  Dim sh1 As Worksheet
  Dim sh2 As Worksheet
  Dim rng As Range
  Dim nRowSta1 As Long
  Dim nRowEnd1 As Long
  Dim nRowSta2 As Long
  Dim nRowCnt As Long
  Dim nRowNum As Long
  Dim nClmNum As Long

  'シートの取得
  Set sh1 = ThisWorkbook.Worksheets("Sheet1")
  Set sh2 = ThisWorkbook.Worksheets("Sheet2")

  'シート1のデータ有無チェック
  nRowSta1 = 2
  nRowEnd1 = sh1.Range("B" & sh1.Rows.Count).End(xlUp).Row
  If nRowEnd1 < nRowSta1 Then
    MsgBox "抽出元のデータがありません。"
    Exit Sub
  End If

  'シート2の既存データをクリア
  nRowSta2 = 2
  nRowNum = sh2.Rows.Count - nRowSta2 + 1
  nClmNum = 5
  sh2.Range("A" & nRowSta2).Resize(nRowNum, nClmNum).ClearContents

  'データ抽出
  nRowCnt = 0
  For Each rng In sh1.Range("B" & nRowSta1 & ":B" & nRowEnd1)
    'データの可否マークが"○"のものを抽出してシート2に転送
    If rng.Text = "○" Then
      sh2.Cells(nRowSta2 + nRowCnt, 1).Value = nRowCnt + 1
      sh2.Cells(nRowSta2 + nRowCnt, 2).Value = rng.Offset(0, 0).Value
      sh2.Cells(nRowSta2 + nRowCnt, 3).Value = rng.Offset(0, 1).Value
      sh2.Cells(nRowSta2 + nRowCnt, 4).Value = rng.Offset(0, 2).Value
      sh2.Cells(nRowSta2 + nRowCnt, 5).Value = rng.Offset(0, 3).Value
      nRowCnt = nRowCnt + 1
    End If
  Next

  'オブジェクトの解放
  Set sh1 = Nothing
  Set sh2 = Nothing

  '確認メッセージ表示
  If nRowCnt > 0 Then
    MsgBox nRowCnt & "件のデータを抽出しました。"
  Else
    MsgBox "該当するデータがありませんでした。"
  End If

End Sub
===↑ここまで===========
「Excel 条件に当てはまった行を他のシ」の回答画像3
    • good
    • 0
この回答へのお礼

FarEyesさん

ご回答をいただき、有難うございます。
マクロですか!
全くマクロを触った事がないので…
ただ、とても丁寧に回答していただいているので、チャレンジしてみようと思います。
こんな丁寧に教えていただいて感激です。
頑張って挑戦してみます。
どうも有難うございました。

お礼日時:2010/04/12 10:31

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!