- ベストアンサー
Excelで他のシートからデータを引用する方法
- Excelで他のシートからデータを引用する方法について教えてください。
- Sheet1の特定の条件に当てはまる行をSheet2に自動的にコピーする方法についても教えてください。
- 分からない部分があり、調べても解決策が見つからなかったので、お助けいただけると嬉しいです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
こんにちは。 Excelで自動処理を行う場合は、マクロ(VBA)を使用する方法もあります。 マクロの使用方法、作成手順等については、下記サイトをご参照下さい。 ■参考サイト Excelでお仕事!「VBA基本」 http://www.asahi-net.or.jp/~ef2o-inue/menu/menu04.html Excel(エクセル)VBA入門 http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/index.html 以下は、今回の処理を行うマクロの一例です。 このマクロは、シート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 ===↑ここまで===========
その他の回答 (2)
- maruikamo
- ベストアンサー率11% (1/9)
今説明されている文だけでは、satonaka55さんがどんな目的のためにExcelを加工しようとしているのか、分からないです。 1つのExcelファイルをたくさんのPCアレルギーな人々が見るのか? その場合、ファイルは共有サーバに上げるのか、メール配信でもするのか、PC自体が共有なのか!? ファイルを見る人たちは一切Excelを編集できないのに、案件が増えるごとに行が増えていくのはナゼ? ○の行だけになっていれば、過去の案件も全部表示されていていいのか? コピーもしないで、Sheet1にいつもオートフィルタをかけて保存しといてやればいいじゃん、という気もしますけど。
お礼
maruikamodさん ご回答、どうも有難うございます。 説明が不足しており、申し訳ないです。 目的に関してですが、「PCにアレルギーはないが、Excelについての知識がない(見ることは出来るが、足し算引き算も出来ず「フィルタって何?」という方々)向けに、必要な情報だけを見れるようにしたい」です。 >1つのExcelファイルをたくさんのPCアレルギーな人々が見るのか? →10人程度の人が見ます。 見るのは上記に記載したような、Excelに詳しくない方々です。 >その場合、ファイルは共有サーバに上げるのか、メール配信でもするのか、PC自体が共有なのか!? →共有サーバに上げます。メール配信はしません >ファイルを見る人たちは一切Excelを編集できないのに、案件が増えるごとに行が増えていくのはナゼ? >案件が増えるごとに行が増えるのは、見るだけの人とは別に、案件を書き込む係りが私を含め合計3名いるからです。 >○の行だけになっていれば、過去の案件も全部表示されていていいのか? →はい。○であれば、過去のものも見れて構いません。 回答になっていますでしょうか?
- maruikamo
- ベストアンサー率11% (1/9)
IF関数を使ってできるのは、Sheet1と少なくとも同じ行数・列数のSheet2の表に、○行はデータが表示され、×行は空白という程度の抽出です。 B列の何行目に○が現れるのか分からない状態でSheet2に○の行だけを自動抽出することはできません。 一番簡単なのは、オートフィルタでSheet1 B列の○のみ表示させてコピーし、Sheet2にペーストする方法だと思います。
お礼
ご回答をいただき、有難うございます。 >一番簡単なのは、オートフィルタでSheet1 B列の○のみ表示させてコピーし、Sheet2にペーストする方法だと思います。 確かにその通りなのですが、実際にこのExcelを見るのは全くPCに詳しくない方(コピー&ペーストでも無理!)ばかりなので、自動的に表示されるように組み込んでおきたい、という意図があります。 説明が不足しており申し訳ないです。 やはり難しいでしょうか・・・? 何かよい方法があれば良いのですが・・・
お礼
FarEyesさん ご回答をいただき、有難うございます。 マクロですか! 全くマクロを触った事がないので… ただ、とても丁寧に回答していただいているので、チャレンジしてみようと思います。 こんな丁寧に教えていただいて感激です。 頑張って挑戦してみます。 どうも有難うございました。