[[20050208194803]] 『情報をサイズごとに別シートに振り分ける』(わゆ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『情報をサイズごとに別シートに振り分ける』(わゆ)

 こんにちは。いつも頼みの綱にさせていただいております。
 今回はちょっと仕事で楽をしようとおもいましたら、
 エクセル初心者の私には荷がかちすぎていたようで、
 ご助力を願えればとおもい、参上いたしました。

 こういうデータがシート1にあります。

    A       B        C        D        E       F
 1  年度	 書類名	書類名2	保存年数	 備考    サイズ
 2  17     aaa                1年  顧客情報   1列
 3  17     bbb      ccc       3ヶ月      2列
 4  現年度 eee                5年   顧客情報   3列
 5  17     fff      eee       2年       1列

 これをサイズ1列の情報はシート2に、サイズ2列の情報はシート3に、
 サイズ3列の情報はシート4にそれぞれ振り分けたいのです。
 行は70くらいが上限でへったりもします。C列やE列は空白もあります。

 たとえばこの場合シート2にサイズ1列の情報にあたる2行と5行の情報を

     A       B        C        D        E       
 1  年度	 書類名	書類名2	保存年数	 備考    
 2  17     aaa                1年  顧客情報   
 3  17     fff      eee       2年       

 というようなかんじです。情報はたびたび入れ替わりますので、
 できれば自動か更新ボタンで振り分けられるようにしたいのですが、
 どうすればよいのでしょうか。
 本とくびっぴきでSelectCaseやLoopなどのVBAをつかうとできるのかなあと
 思ったりもするのですが、どうにも取っ掛かりを見つけられません。
 整理できない頭にどうぞヒントを与えてください。
 どうぞよろしくおねがいいたします。

 エクセル2000
 ウインドウズ2000


 マクロがご希望で数式は対象外でしょうか。

 (川野鮎太郎)


 川野さん、ご質問ありがとうございます。対象外ではないです。
 サイズ1列が一番おおくて半分ぐらいのデータがサイズ1列になるんですが、
 数式でできますか??(^^;)

 (わゆ)


 シートの2のA2の式を
 =IF(SUM(N(Sheet1!$F$2:$F$14="1列"))<ROW()-1,"",INDEX(IF(Sheet1!$A$1:$F$14="","",Sheet1!$A$1:$F$14),SMALL(IF(Sheet1!$F$2:$F$14="1列",ROW($A$2:$A$14)),ROWS(A$1:A1)),COLUMN()))
 として、ShiftキーとCtrlキー押しながらEnterキーで確定させて配列数式にしてください。
 範囲はSheet1の14行までを対称にしていますので、100行までなら14のところだけ100に変えてください。
 変更が終わったらE列までコピーしてください。
 A2からE2までを選択して、A70行までコピー
 あと、式中の "1列"が1列の場合ですから、シート3の場合は"2列"に変えてください。
 ※シート2で1列が抽出できたら、シート2をコピーしてシート名を変更したほうが早いかな・・・。(^_^A;
 シートコピーしたら、編集>置換えで、1列を2列に置き換えれば良いだけですし^^
 (川野鮎太郎)

 ありがとうございます〜。
 申し訳ないのですが、早速ご指導どおりにしてみたのですが、何も表示されません。
 何か手順をまちがえているのでしょうか。
 記述いただいた式をコピー、シート2のA2に貼り付けて配列数式(?)にしました。
 14を100に書き換えました。
 それからE列までコピー、70行までコピー(オートフィルをつかってもよいのですよね?)。
 …とやったはずなのですが…すみません。
 70行までコピーしたときに「配列の一部が変更できません」と出るのが
 原因でしょうか…?
 勉強不足で式の意味もわからないので、なんとも予測が…(^^;)。
 がんばって解読してみます〜。

 (わゆ)


 「配列の一部が変更できません」が出るって事は、配列数式として認識しているってことですね。
 ただし、複数セルを同時に確定させたときです。
 A2セルに貼り付けた時点でShiftキーとCtrlキー押しながらEnterキーで確定です。
 その後E2までコピー
 それからA2からE2を選択して下方にフィルコピーしてみてください。

 (川野鮎太郎)

 すばやいご対応、本当にありがとうございます。
 絶対私のミスだとおもって目を皿のようにしておりましたところ、
 1列、の「1」が半角数字になっておりました…。
 お世話をおかけしました。
 おかげで一歩先に進むことができました。
 ありがとうございます!!
 また同じ作業の延長で質問させていただくかと存じますが、
 どうぞご指導よろしくお願いいたします。

 (わゆ)


 マクロでもやってみました。
Option Explicit
Sub Test()
Dim Sh As Worksheet
Dim Last As Long, LastRow As Long, MyRow As Long
Dim C As Range, MyRange As Range
Dim ShName As String
Dim MySh As Worksheet
Set MySh = Worksheets("Sheet1")  '一覧のシート名
For Each Sh In Worksheets
    If Sh.Name = "Sheet2" Or Sh.Name = "Sheet3" Or Sh.Name = "Sheet4" Then
        Range(Sh.Cells(2, 1), Sh.Cells(65536, 5)).ClearContents
    End If
Next Sh
    LastRow = MySh.Cells(65536, 6).End(xlUp).Row
    For Each C In Range(MySh.Cells(2, 6), MySh.Cells(LastRow, 6))
        Select Case StrConv(C.Value, vbNarrow)
            Case "1列"
                ShName = "Sheet2"
            Case "2列"
                ShName = "Sheet3"
            Case "3列"
                ShName = "Sheet4"
        End Select
            MyRow = Worksheets(ShName).Cells(65536, 1).End(xlUp).Row + 1
            Set MyRange = Worksheets(ShName).Cells(MyRow, 1)
            MyRange.Resize(1, 5).Value = C.Offset(0, -5).Resize(1, 5).Value
    Next C
    MsgBox "完了しました。♪"
End Sub

 (川野鮎太郎)

 わ!
 お返事が遅くなりまして申し訳ありません。
 まくろまで作ってくださったのですか!
 ありがとうございます(><。)
 なるほど…。
 セレクトケースっていうのはこういう風につかうのですね!
 うわ、どっちにしようか迷いますねww
 贅沢な悩みですね!
 今、次の悩みの壁にあたってるんですが、
 もうちょっと考えて質問させていただきます!
 どうもありがとうございました〜!
 (わゆ)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.