[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『データを別シートへ抽出』(みつ)
A B C 1 S1 T8 1 2 S2 T8 2 3 S3 T5 3 4 S2 T5 4
5000 S50 T5 3
Sheet2 A B C 1 S1 T8 1 2 3 4
Sheet3 A B C 1 S2 T8 2 2 S2 T5 4 3 4
◆関数による方法です!
◆S1を抽出するシートのシート名を「S1」にします ◆シート「S1」 A B C D E F 1 S1 T8 1 S1 1
◆E1の式 E1=REPLACE(CELL("FILENAME",A1),1,FIND("]",CELL("FILENAME",A1)),) ★シート名の「S1」は表示されます
◆F列を作業列に! F1=IF(Sheet1!A1=$E$1,ROW(Sheet1!A1),"") ★下にコピー
◆A1の式 A1=IF(ROW(A1)>COUNT($F:$F),"",INDEX(Sheet1!A:A,SMALL($F:$F,ROW(A1)))) ★右・下にコピー
◆S1の行が表示されているはずです! ◆S1のシートを作成します! ◆Ctrlを押しながら、S1のシート名タブを選択しで、右にドラッグします ◆シート「S1(2)」がコピーされます ◆シート名を「S2」に変更すると、S2の行が表示されたシートが作成されます
◆いかがでしょうか! (Maron)
↓と同様に、フィルタオプションの設定を使う方法もあります。 [[20051201143119]]『行の上詰め抽出』
マクロの自動記録を利用して作成したものです。 なお、Sheet1の1行目には列見出しが A B C 1 見出し1 見出し2 見出し3 抽出条件はSheet1のE1:F2に E F 1 見出し1 見出し1 2 S1 S2 と記述しています。いかがでしょうか?(Hatch) Sub Macro1() Worksheets("Sheet2").Activate Columns("A:C").ClearContents Sheets("Sheet1").Range("A1:C5501").AdvancedFilter Action:=xlFilterCopy, _ CriteriaRange:=Worksheets("Sheet1").Range("E1:E2"), CopyToRange:=Range("A1"), Unique:=False '--- Worksheets("Sheet3").Activate Columns("A:C").ClearContents Sheets("Sheet1").Range("A1:C5501").AdvancedFilter Action:=xlFilterCopy, _ CriteriaRange:=Worksheets("Sheet1").Range("F1:F2"), CopyToRange:=Range("A1"), Unique:=False End Sub
マクロによる方法です (Hatch)さんの方法より遅い&ごちゃごちゃしてますが 例のごとく参考程度にこんなやりかたも・・・と
Sheets1からFindを使って検索して一行ずつコピーしてます。 ヒット数が増えるともちろん処理時間も遅くなります。 下の部分でS1しか抽出できないので、S2はもう一つ作る必要があります。
Dim c As Range Dim e As Range Dim F_Address As String Application.ScreenUpdating = False Set e = Sheets("Sheet2").Range("A1") Sheets("Sheet2").Cells.Clear Set c = Columns(1).Find(What:="S1", After:=Range("A1"), LookIn:=xlValues, LookAt:= _ xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=True) If Not c Is Nothing Then F_Address = c.Address Do Rows(c.Row).Copy e Set e = e.Offset(1) Set c = Columns(1).FindNext(c) Loop Until c Is Nothing Or c.Address = F_Address End If Application.ScreenUpdating = True
PS:お急ぎでしたら回りくどくしてすいませんmm (Null)
Maron様 Hatch様 Null様ありがとうございます。 Null様もう少し詳しく教えていただけませんかね。マクロで実行してみましたがうまくいきません。
>Null様もう少し詳しく教えていただけませんかね。 >マクロで実行してみましたがうまくいきません。 何を教えてほしいのでしょうか? (アカギ)
Sheet1にデータを入れマクロ実行したがSheet2に何も表示されません(エラー表示もなし)
これってS1とS2だけを拾い出したいんでっか? S50が顔出しとるし、作業が面倒という事は何十種類かのデータをコピーしたいんと ちゃいまっか? 必要なだけシートを作成して試してみてくらはい。 せやけど、何十種類もあるんやったらシート名をS1とかS2とかにしとく方が利便性に 長けてますわなぁ。 もしそうならSheets("sheet" & i)をSheets(tbl(i, 1))に変えて貰たらOKですワ。 (2ヶ所ありますから気ぃ付けて!) (弥太郎) '------------------- Option Explicit Sub copy() Dim maxrow As Long, i As Long, Cnt As Long Dim tbl
Application.ScreenUpdating = False With Sheets("sheet1") maxrow = .Range("a" & Excel.Rows.Count).End(xlUp).Row .Cells(1, 1).Resize(maxrow).AdvancedFilter Action:=xlFilterInPlace, Unique:=True .Cells(1, 1).Resize(maxrow).SpecialCells(xlCellTypeVisible).copy _ Destination:=Range("iv30000") Cnt = .Cells(1, 1).Resize(maxrow).SpecialCells(xlCellTypeVisible).Count tbl = .Range("iv30000").Resize(Cnt).Value .Range("iv30000:iv65536").Clear .ShowAllData
For i = 2 To Cnt Sheets("sheet" & i).Range("a:c").Clear .Range("a1").AutoFilter field:=1, Criteria1:=tbl(i, 1) .Range("a1").Resize(maxrow, 3).SpecialCells(xlCellTypeVisible).copy _ Destination:=Sheets("sheet" & i).Range("a1") Next i
Application.CutCopyMode = False .Range("a1").AutoFilter End With Application.ScreenUpdating = True End Sub
>S50が顔出しとるし、作業が面倒という事は何十種類かのデータをコピーしたいんと >ちゃいまっか? >せやけど、何十種類もあるんやったらシート名をS1とかS2とかにしとく方が利便性に >長けてますわなぁ。 これらのことを考慮したつもりで、以下のように書き換えてみました。 あちらこちらに他所様のコードを借用しています。 フィルタオプションの設定で実行しています。 (Hatch) Sub tyu1203() Dim LastRow As Long Dim mySh As String Dim mydSh As String Dim mytSh As String Dim i As Long Application.ScreenUpdating = False mydSh = "Sheet1" '---データのあるシート名 mytSh = "Temp1" '---作業シート名 '---作業シート mySh = mytSh ShCheck (mySh) '---キーの抽出 Worksheets(mySh).Activate Worksheets(mySh).Cells.Clear LastRow = Worksheets(mydSh).Cells(65536, 1).End(xlUp).Row Sheets(mydSh).Range("A1:A" & LastRow).AdvancedFilter Action:=xlFilterCopy, _ CopyToRange:=Range("A1"), Unique:=True '--- LastRow = Worksheets(mytSh).Cells(65536, 1).End(xlUp).Row For i = 2 To LastRow mySh = Worksheets(mytSh).Cells(i, 1).Value ShCheck (mySh) Worksheets(mytSh).Range("E1").Value = Sheets(mydSh).Range("A1").Value Worksheets(mytSh).Range("E2").Value = mySh Worksheets(mySh).Activate Worksheets(mySh).Cells.Clear '↓でデータ範囲を指定していますので要注意! Sheets(mydSh).Range("A1:C5501").AdvancedFilter Action:=xlFilterCopy, _ CriteriaRange:=Worksheets("Temp1").Range("E1:E2"), CopyToRange:=Range("A1"), Unique:=False Next i Application.DisplayAlerts = False Worksheets(mytSh).Delete Application.DisplayAlerts = True '---シートの並べ替え ShSort Worksheets(mydSh).Activate Cells(1, 1).Select Application.ScreenUpdating = True End Sub Sub ShCheck(mySh As String) Dim Sheet_Name As Object For Each Sheet_Name In Worksheets If Sheet_Name.Name = mySh Then Exit Sub Next Worksheets.Add.Name = mySh End Sub Sub ShSort() Rem この部分は「http://www.relief.jp/itnote/archives/001300.php」から引用 Dim intLoopA As Integer Dim intLoopB As Integer For intLoopA = 1 To Sheets.Count For intLoopB = 1 To Sheets.Count - 1 If Sheets(intLoopB).Name > Sheets(intLoopB + 1).Name Then Sheets(intLoopB).Move after:=Sheets(intLoopB + 1) End If Next intLoopB Next intLoopA End Sub
ヒュッ、ヒューッ!!! Hatchはんビューチフル(笑 あのぅ、!3本は「この世のモノとは思えんでけ映え」にランクされます〜(笑 (弥太郎)
おぉ〜 なんか凄く褒められたようで・・・<(`^´)>エッヘン。 後いくつか付け加えれば、自分的には完成です。もうちょっと弄って遊んでみます。 では、機嫌良く一人遊びしときます(^.^)/~~~ # あっ・・・上のコードはExcel2002で作成していますこと付け加えておきます。 (Hatch)
>Null様もう少し詳しく教えていただけませんかね。 よばれていたのにめさ放置してましたすいませんf^^
>Sheet1にデータを入れマクロ実行したがSheet2に何も表示されません(エラー表示もなし) これに関してはA列に[S1]が存在しない場合 シート名が違う場合(これはエラーが出るはずですが) マクロのコピー場所がSheet1のシートでない場合 に問題がでるはずですが、ちょっと詳しくは反応できませんorz
あとは(弥太郎)さんのコードが私が面倒がった場所をつくってくれていますし^^ (Hatch)さんのは エラーチャックも行ってくれるようなソースを書いてくれていますので、それらを見ながらどうにかなるようなきがします。 (弥太郎)さん(Hatch)さんありがとうございます^^ いつも適当ですいません(Null)
Nullはん、ほないにお礼言われたらめさ恐縮しますワ(笑 (弥太郎)
エラーチェックはしていませんが、ちょっと手を加えたサンプルを下のHPにアップしときます。 http://www.geocities.jp/hatch4700/index.html のNo32 mitu.xls(約70KB)です。 関係ないシートは削除するようにしていますので、要注意です。 たぶんExcel2000でも完全一致になっていると思うのですが、確認はできていません。 (Hatch) (゜;)\(--;)オイオイ
こちらこそ(弥太郎)さんにそういわれると照れくさいですf^^
でもって俺のもUP http://yakihata.jp/excel/sumple004.xls Excel2002 Win2000で動作確認
(Hatch)さんのサンプルが動作はかなり速いですb
(Null)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.