• 締切済み

入力リストから分類別で自動転記

分類 名称 ・・ A ●● B × A △ C ■ ・・ ・・ 上記入力シート1の分類ABCDEを別シート2で A  B  C  D  E ●●  ×   ■ △ ・・ と自動で振り分けする関数を探しています。 シート1は随時追加されるので自動で振り分けたいです。 マクロでもOK(最終登録ボタンを設定すれば良いので) 色々と調べましたが、どれも不具合が生じて先に進みません。 ご教授いただけますようよろしくお願いします。

みんなの回答

  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.11

こんにちは No1、No9、No10です。 ソートされてないとダメだったので、 Sheet2のセルA2の数式を、 =IF(COUNTIF(Sheet1!$A$2:$A$10000,A$1)<ROW(A1),"",INDEX(Sheet1!$B$2:$B$10000,SMALL(IF(Sheet1!$A$2:$A$10000=A$1,ROW(Sheet1!$A$2:$A$10000)),ROW(A1))-1)) と入力して、Ctrl+Shift+Enterで確定して配列数式にして下さい。 あとは下方・右方にフィルコピーで。

  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.10

こんにちは No1、No9です。 済みません、出来てなかったですね。 無視して下さい。

  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.9

こんにちは No1です。 出来ませんでしたか?

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.8

 回答No.3、5、6です。 >マクロでもOK というお話ですので、VBAのマクロの一例も回答しておきます。 Sub QNo9124944_入力リストから分類別で自動転記() Const ItemRow = 1 '元データのシートにおいて項目名が入力されている行の行番号 Const ClassColumn = "A" '元データのシートにおいて分類名が入力されている列の列番号 Const NameColumn = "B" '元データのシートにおいて名称が入力されている列の列番号 Const ClassRow = 1 '出力先のシートにおいて分類名の出力先となる行の行番号 Const FirstColumn = "A" '出力先のシートにおいて結果の出力先となる最初の列の列番号 Dim temp As Variant, mySheetName(1, 1) As String, mySheet(2) As Worksheet _ , LastRow As Long, myCloumn As Long, i As Long, c As Range mySheetName(0, 0) = "入力シート1" '元データのシートのシート名 mySheetName(1, 0) = "別シート2" '出力先のシートのシート名 mySheetName(0, 1) = "元データが入力されている" mySheetName(1, 1) = "出力先の" For i = 0 To 1 If IsError(Evaluate("ROW('" & mySheetName(i, 0) & "'!A1)")) Then MsgBox mySheetName(i, 1) & "シートとして設定されている" _ & vbCrLf & vbCrLf & mySheetName(i, 0) & vbCrLf & vbCrLf & _ "というシート名のシートが見つかりません。" & vbCrLf _ & "マクロを終了します。", vbExclamation, "存在しないシート" Exit Sub Else Set mySheet(i) = Sheets(mySheetName(i, 0)) End If Next i With mySheet(0) LastRow = .Range(ClassColumn & Rows.Count).End(xlUp).row If LastRow <= ItemRow Then MsgBox "処理の対象となるデータがありません。" & vbCrLf _ & "マクロを終了します。", vbExclamation, "データ無し" Exit Sub End If temp = Chr(29) For Each c In .Range(ClassColumn & ItemRow + 1 & ":" & ClassColumn & LastRow) If c.Value <> "" And Not temp Like "*" & Chr(29) & c.Value & Chr(29) & "*" Then If Chr(29) & c.Value & Chr(29) > Mid(temp, 2, InStr(2, temp, Chr(29))) Then temp = Chr(29) & c.Value & temp Else temp = temp & c.Value & Chr(29) End If End If Next c End With temp = Split(Mid(temp, 2, Len(temp) - 2), Chr(29)) With Application .ScreenUpdating = False .Calculation = xlManual End With With mySheet(1).Range(FirstColumn & ClassRow & ":" _ & mySheet(1).Cells.SpecialCells(xlCellTypeLastCell).Address) .ClearContents .Resize(1, UBound(temp) + 1) = temp End With For Each c In mySheet(0) _ .Range(NameColumn & ItemRow + 1 & ":" & NameColumn & LastRow) temp = mySheet(0).Range(ClassColumn & c.row).Value If c.Value <> "" And temp <> "" Then With mySheet(1) myCloumn = Application.WorksheetFunction _ .Match(temp, .Range(ClassRow & ":" & ClassRow), 0) .Cells(.Rows.Count, myCloumn).End(xlUp).Offset(1).Value = c.Value End With End If Next c With Application .Calculation = xlAutomatic .ScreenUpdating = True End With End Sub

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.7

#4です。 #4で述べた、VBAでのオフライン・バッチ処理的な処理は 例データ A B列 チーム 氏名 A 太田 A 篠原 A 木村 A 本山 A 小山 B 近藤 B 大野 B 板山 C 田中 C 栗田 C 砂川 D 木下 処理 標準モジュールに Sub test01() Worksheets("Sheet2").Cells.Clear rl = Worksheets("Sheet1").Range("a10000").End(xlUp).Row '- Worksheets("Sheet1").Range("A2:B" & rl).Sort key1:=Rows(1) t = Worksheets("Sheet1").Range("A2") '--第1行目初期処理 j = 1 Worksheets("Sheet2").Cells(j, "A") = Worksheets("Sheet1").Range("A" & 2) k = 1 Worksheets("Sheet2").Cells(k, "B") = Worksheets("Sheet1").Range("B" & 2) '---第2行目以下 For i = 2 To rl If Worksheets("Sheet1").Range("A" & i) = t Then k = k + 1 Worksheets("Sheet2").Cells(k, j) = Worksheets("Sheet1").Range("B" & i) Else j = j + 1 '次列へ Worksheets("Sheet2").Cells(1, j) = Worksheets("Sheet1").Range("A" & i) k = 2 Worksheets("Sheet2").Cells(k, j) = Worksheets("Sheet1").Range("B" & i) End If t = Worksheets("Sheet1").Range("A" & i) Next i End Sub ーーー 結果 A B C D 太田  近藤  田中  木下 篠原  大野 栗田 木村  板山 砂川 本山 小山 ーー 表全体的に、その回の入力作業の完了のときクリックする、ボタンをつくって、押させて起動させるか、Sheet2をアクティヴにしたときに自動実行はどうですか。 Private Sub Worksheet_Activate() <--本件例ではSheet2のイベント MsgBox "Sheet2がオープン" '本コードを入れる End Sub 個々のセルデータが変わったごとに実行するのは、処理時間的にもうっとうしい。 かといって、VBAで、1行データの入力完成や行挿入や削除の機会の察知も煩雑で、むつかしいので。

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.6

>シート3の内容を別シート2へ作業セルとして登録してはダメですか?  それでも構いませんが、別シート2のA2セルに入力する関数を、作業列の変更に合わせて適時修正して下さい。

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.5

 回答No.3です。  もし、作業列を使わずに関数のみで処理を行いたいという様な場合には、Sheet3は使わずに、別シート2のA2セルに入力する関数を次の様なものにして下さい。(入力シート1や別シート2のレイアウトは回答No.3と同様とします) =IF(A$1="","",IF(ROWS(A$2:A2)>COUNTIF(入力シート1!$A:$A,A$1),"",OFFSET(入力シート1!$B$1,SUMPRODUCT(ISNUMBER(ROW(入力シート1!$B$1:$B$999))*(COUNTIF(OFFSET(入力シート1!$A$1,,,ROW(入力シート1!$B$1:$B$999)-ROW(入力シート1!$B$1)+1),A$1)<ROWS(A$2:A2))),)))  尚、SUMPRODUCT関数は、繰り返し処理を行う関数ですので、行数が多くなりますと処理が重くなる傾向がありますので注意して下さい。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.4

このタイプの問題は、「表のデータの、組換え!」に当たるのです。 エクセル関数では、表の組換え(縦のものを横にするの(Transpose間数以外では))は苦手な分野です。 また関数では、部分的には「抜出し問題」(例Aの行の抜き出し)にあたります。 条件つき抜出になります。実は、関数を使うのは、アイデアと経験が必要で、結果の式も長いものになります。初心者が思いつくのは無理です。 回答例も出ていますので、それを自分の場合に修正して、「結果良ければよし」と思うならそれでよい。 関数は(式が適当に作られておれば)データの追加などに即座に反応してくれます。 ーー VBAでは「、即座に反応してくれる」には、イベント」という仕組みに頼ることになりますが、それなりの経験と技量が要り、初心者にはむつかしい部類の課題です。 (1)定期的な起動の処理で我慢する・ (2)コード列(A,Bなどの列)でソートする。 (3)VBAでAのデータ区切りで、同じコードのものをVBAで一括して決まった列に移す、プログラムを組むのが、一番やりやすいと思う。

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.3

 今仮に、シート1において「分類」と入力されているセルがA1セルであり、「名称」と入力されているセルがB1セルであり、別シート2において「A」と入力されているセルがA1セルであるものとします。  また、Sheet3のA列を作業列として使用する元します。  まず、Sheet3のA2セルに次の関数を入力して下さい。 =IF(OR(INDEX(入力シート1!$A:$A,ROW())="",INDEX(入力シート1!$B:$B,ROW())=""),"",INDEX(入力シート1!$A:$A,ROW())&"◆"&COUNTIF(A$1:A1,INDEX(入力シート1!$A:$A,ROW())&"◆*?"))  次に、Sheet3のA2セルをコピーして、Sheet3ののA3以下に貼り付けて下さい。  次に、別シート2の1行目のセルにA1セルから右方向に向かって「A」~「C」等の各分類名を入力して下さい。  次に、別シート2のA2セルに次の関数を入力して下さい。 =IF(A$1="","",IFERROR(INDEX(入力シート1!$B:$B,MATCH(A$1&"◆"&ROW()-ROW(A$2),Sheet3!$A:$A,0)),""))  次に、別シート2のA2セルをコピーして、別シート2の2行目のセルの内、A2セルよりも右側にあるセル範囲に貼り付けて下さい。  次に、別シート2の2行目全体を纏めてコピーして、別シート2の3行目以下に貼り付けて下さい。  以上です。

sss1111
質問者

補足

シート3の内容を別シート2へ作業セルとして登録してはダメですか?

  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.2

こんにちは No1です。 これって、Excelの質問ですよね? シート1、シート2とか、関数って事は。

sss1111
質問者

補足

エクセルの質問です。カテゴリ違いであれば申し訳ございません>< ご回答もありがとうございました^^

関連するQ&A

  • 住所録から特定住所を別シートに抽出分類できるか?

    エクセル2010で作成した住所録にある特定の町名をグルーピングして別のシートに分類したいのです。シート1の住所録本体のA列は氏名、B列は町名と丁目(〇〇町◆丁目)、C列は番地を入力します。その他の列にもいくつか入力項目があります。やりたいことは、B列の町名と丁目を入力すると自動的に他のシートにグルーピングして分類できるようにしたいのです。分類の際、次のような場合があります。たとえば、A町1丁目とB町2丁目が同じグループ、つまり同じシートに分類する必要があります。また、単独でC町3丁目は一つのグループとして分類する場合ももちろんあります。マクロ等、エクセルの専門的な知識はもちあわせていません。関数の組み合わせでできそうな気がしていますが、なにぶん技量不足のためわかりません。どなたかご教授ねがいます。宜しくお願いします。

  • エクセル マクロ 別シートへ自動転記

    お世話になります。 エクセルで元データシート(一覧表シート)からアルファベット毎に自動で別シートに転記したいのでですがマクロをどうやって作ればいいでしょうか?(出来ればファイルを開けた時に自動更新してほしいのですが。。) 基準になるのはローマ字でかかれている部品名で、それをアルファベットごとのシートに自動に転記されるようにしたいです。データはどんどん追加されていきます。 元データは以下のとおりです。 *データはB5セルから始まっています。  部品名  詳細  金額  ・・・  A56785 ねじ  ¥30   高田(株)  B13575 棒   \500 安田 C59975 柵 \200 鈴木(株)   以上よろしくお願いします。

  • 《エクセル》リストから同じ分類のデータのみコピーする

    いつもお世話になります。 別のシートに、下記の形のリストがあります。  列A   列B   列C   列D (商品名)(大分類)(中分類)(売上金額)  商品A   あ    A    1000  商品B   あ    B    900  商品C   い    A    800  商品D   あ    A    700  商品E   あ    C    600  商品F   あ    F    500 マクロを組んで、このリストの大分類が"あ"、中分類が"A"に該当する商品名と売上金額のみをコピーして、今開いているシートの列A・列Bに連続したデータとして貼り付けたいのですが、うまくいきません。 ご教授宜しくお願い致します。

  • 複数のSheetのデーターを一枚のシートへ転記させる。

     エクセル初心者です。よろしくお願いします。 例えば      A     B      C    D     E      F 1 2  タイトル  タイトル              タイトル 3    a     b                    f 4 5 6 という全く同じSheetを毎日一枚ずつ作成していくとして、ここで”集計”Sheetに        A        B         C      D      E 1                      タイトル   タイトル  タイトル 2 追加した日付 追加Sheet名     a       b       f 3 追加2枚目  4 追加3枚目 5    " 6    " と言うように、行ごとに追加されていくSheetのデーターを”集計”一枚に自動で転記していきたいと思います。当方全くの初心者ですので、できましたら関数で教えて頂きたいと思います。 追加した日付や追加したSheet名を自動での転記させる方法は関数では無理かもしれませんが、タイトル集計だけでもかまいませんので、わかる範囲でよろしくお願いします。

  • Excelで数値データを範囲別に分類したい。

    Excel初心者です。収穫した果実を重量別に自動で分類する 表をつくろうと思います。A B C のどの範囲に該当するか 自動判定したいです。Aの範囲でAと表示させる式はできましたが A B Cの3範囲に分類する数式が分かりません。 添付画像の赤のセルに入れるべき数式を教えて下さい。 あとA B  C がそれぞれいくつあるかを求める方法、あるいは 関数があれば教えて下さい。

  • エクセル VBA あるシートで指定したセルを他のシートの下端のセルに自動で貼り付ける

    エクセル2003です。宜しくお願い致します。 シートは「メイン」、「本社」、「地方」というのがあり、「本社」と「地方」は全く同じフォーマットで、「メイン」は本社か地方を分類する欄があります。 元のデータを「メイン」シートに入力後、フォームで作成したボタンをクリックしたら、各行が「本社」、「地方」に自動で振り分けられるようにしたいです。(追加で振り分けた際には、最後の空白行にデータが追加されるようにしていただきたいです。) 各シートは以下のようになっています。 ・「本社」、「地方」シート   A     B   C 1通し番号 名前 性別 2 ・「メイン」シート   A     B   C   D   1通し番号 名前 性別 場所 2 ※1行目は項目名です。  通し番号は、各シートで固定なので、マクロを実行しても変わることはありません。  振り分けたいデータは、「メイン」シートのB2,C2以降のセルです。  振り分け先のシートを見分けているのは、D1セルです。  VBA実行ボタンをクリックしたら、下端のセルに自動でデータが追加されるようにしたいと思っています。(ただし、通し番号は各シート毎の番号が保持されたままです。)つまり、B列、C列の下端に自動で貼り付けられるということです。 マクロ初心者で、ネットをいろいろと調べたのですがどうもうまくいきません。 宜しくご教示いただければ幸いです。

  • エクセル2007 入力データを転記する方法

    初心者的な質問になりますが、宜しくお願い致します。 現在、部署で在庫管理を明確化するためにエクセルに在庫の部品名、個数、どこで保管されているかを表にして管理しています。そこに、検索できるように関数で検索表を作成しました。 ここまで問題なくできたのですが、ここからやりたいことをどのように作成すればいいのかアドバイスをお願いしたく質問させて頂きます。 やりたいことは、あるセルに日付、部品名、使用内容という3つの項目を入力したら、別シートに転記するというものです。 具体的に記述すると、 sheet1のA2に日付、B2に部品名、C2に使用内容を記述します。 その内容をsheet2のA2に日付、B2に部品名、C3に使用内容を転記するのですが、 単純に=Sheet1!A2とすれば、表示されます。が!!! やりたいことはSheet1のA2、B2、C2に入力された内容を転記したときに、Sheet2では下に追加する方向にしたいのです。 例として書いてみると sheet1に A2に2010/11/22 B2にA C2にA社保守部品として使用 と記述します。 その内容をsheet2のA2に日付、B2に部品名、C2に使用内容を転記します。 次の日にまた在庫から部品を使用したとします。 上記と同じように A2に2010/11/23 B2にB C2にB社保守部品として使用 と記述したときに sheet2のA3、B3、C3に記述していくようにしたいと考えています。 上記で記述したように=sheet1!A2であれば、sheet1に表記が残っていれば、sheet2にも同じように表記されています。 しかし、sheet1のA2、B2、C2を消去してしまうと、同様にsheet2も消えてしまいます。 sheet2は一度記述したら内容を保持しててほしいのと、 書き込み内容があるごとにsheet2は追記していくようにしたい ということです。 この場合、マクロやVBAで作成するほうがいいのか?それとも関数でできてしまうのか? というところで悩んでいます。 私個人としては簡単にできるほうがいいのですが、VBAがまだ未熟なので、できれば関数でできるようならベストです。 VBAを勉強してやればいいのでは?と回答されてしまうとそれまでなのですが、現在業務上、在庫管理システムがそこまでしっかりされていないので、部署的にできるだけ早くパソコン上で在庫確認ができて、個数をしっかり管理したい。 そして、使用内容を明確にし、無駄を省きたいということを実践していきたいということで、今回質問させていただきました。 ちなみに検索内容などはすべて関数で作成しております。 どうぞ、ご教授のほど宜しくお願い致します。

  • エクセルのセルの内容を別の場所でカテゴリーに分類する

    以下の二つのケースが関数などを用いて可能であれば、その方法を教えてください。 1、Aの列に年齢を入力する場合 sheet1のA列に年齢を入力するとき、それをsheet2で「65歳以上」と「65歳未満」に分類します。 具体的には、sheet1のA1に70と入力したとき、sheet2のA1に「65歳以上」、sheet1のA2に20と入力したとき、sheet2のA2に「65歳未満」、と自動的に入力。 2、Bの列に文字を入力する場合 sheet1のB列にA、B、C、D、Eの5文字のいずれかを入力します。そのときsheet1にA、B、Cのいずれかが入力されたときは、sheet2の対応するB列に「F」と、sheet1のB列にD、Eのいずれかが入力されたときは、sheet2の対応するB列に「G」と自動的に入力。sheet1に、このA~E以外が入力された時は、sheet2の対応するB列に「その他」と入力。 以上のことが可能でしょうか。 よろしくお願いします。                

  • エクセル関数=条件付きシート別摘出方法

    すいません、皆さんの質問・回答を参考にして挑戦してみたのですがどうしても分かりませんので助けてください。if関数、vlookup関数で解決できるのかと思います。 シート1とシート2があります。 シート1にはA1~C3までの範囲でA1~A3には番号、B1~B3には名称、C1~C3には自ら入力する判定結果(マルorバツ)が入ってます。 シート1 A B C 1 なす ○ 2 ねぎ × 3 にら ○ シート2 A B 1 なす 2 にら のようにシート1のC列で○の判定した番号と名称がのみがシート2のごうに自動でもっていけるようにしたいのですがどう関数組んでいいのか分かりませんので、何方か申し訳ありませんが教えてください。  

  • Excel>他シートと文字比較後のリスト表示方法?

    始めて投稿します。 エクセルで以下のことを実施したいのですがどうしても できずに詰まっています。 知恵をいただけないでしょうか。 ------------------------------------------------ ※イメージ画像を添付しています。 「Sheet1の分類」の値と、「Sheet2の分類」の値が等しかった場合、 Sheet1の「コース名」箇所に、Sheet2で一致した分類の隣セルにある コース名のリストを表示したいのです。 その方法を教えていただけないでしょうか。 【Sheet1】    A    B      1 分類  コース名    2 1.A          ←BセルにSheet2と一致したコース名のリストを表示させたい 3 1.A 4 2.B 5  : 【Sheet2】     A     B     C 1 コード   分類    コース名 2  A     1.A     あ 3  B     1.A     い 4  C     1.A     う 5  D     2.B     か 6  E     2.B     き 7  :      :      : 出来たら、エクセルの関数だけでどうにかなるといいなと思っていますが、 マクロを使って解決するならばそれでも構わないと思っています。 アドバイスをいただけないでしょうか。 以上、よろしくお願いいたします。