• ベストアンサー

エクセルの自動転記について

エクセルの自動転記について シート1にデータを入力します。 A欄に会社名、B欄にデータ1、C欄にデータ2とします。 A欄と同じ会社名のシートのA欄にデータ1、B欄にデータ2が上から順に自動転記されるようにしたいのですが 教えていただきたいです。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! 一例です。 ↓の画像で説明させていただきます。 各会社のSheetは同様の操作になりますので、 画像で、「ああ」という会社名だけのSheetで説明させていただきます。 配列数式にすれば「ああSheet」に作業用の列は必要ないのですが、 データ量によってはコンピュータにかなりの負担をかけますので、 敢えて、作業用の列を設けています。 A列を作業列とします。(遠く離れた列を利用してもかまいません) 「ああSheet」のA2セルに =IF(Sheet1!A2=ああ!$A$1,ROW(A1),"") B2セルに =IF(COUNT($A$2:$A$100)<ROW(A1),"",INDEX(Sheet1!B$2:B$100,SMALL($A$2:$A$100,ROW(A1)))) として、B2セルをC2セルまでオートフィルでコピーします。 最後にA2~C2セルを範囲指定し、C2セルのフィルハンドルで下へコピーすると 画像のような感じになります。 尚、作業用のA列はSheet1のデータがある行までコピーしておく必要があります。 空白になってもかまいませんので、しっかりしたまでコピーします。 そして、数式はSheet1の100行目まで対応できるようにしていますが、 データ量によって範囲指定の領域はアレンジしてみてください。 上記の操作を各Sheetでいちいち設定するのは大変ですので、 会社名の最初のSheetを開きShiftキーを押しながら、最後のSheetをクリックします。 これでSheetの作業グループ化ができましたので、一つのSheetで操作を行えば 全てのSheetに同じ数式が入ります。 最後のSheet見出し上で右クリックし作業グループ化を解除して完了です。 以上、長々と書きましたが 参考になれば幸いです、 他に良い方法があれば読み流してくださいね。m(__)m

noname#241383
質問者

お礼

むちゃんこ詳しくありがとうございます。 感動しました。

その他の回答 (3)

  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.4

>A欄と同じ会社名のシートのA欄にデータ1、 >B欄にデータ2が上から順に自動転記されるようにしたい とのことですが、[ANo.2] の tom04 さんがお示しの例を拝借して申しますと、「ああ」・「いい」・「うう」・「ええ」・「おお」という5つの シート を作らなければならないことになりますね。  さらに、Sheet1 シート の「会社名」の欄に、新規の名前が作成されたときにも、新たにその名前の シート を追加する作業が必要になります。  用途にもよろうかと存じますが、普通は、ご要望に近いことを実現しようとすると、Sheet1 シート に [ データ(D)] - [フィルタ(F)] - [オートフィルタ(F)] を設定して、「会社名」の ドロップダウン リスト からそれぞれの名前を選択して表示させる、というのが最も簡便な方法かと存じます。  これを踏まえて、それでも「会社名」ごとの シート を設けて >自動転記されるようにしたい ということでしたら、 1)[Alt] + [F11] で [Visual Basic Editor] を開き、[挿入(I)] - [標準モジュール(M)] で現われる コード ウィンドウ に Function SheetName() As String  SheetName = ActiveSheet.Name End Function を コピペ します。 2)左側の ツリー図 にある [VBAProject({ブック名}.xls)] - [Microsoft Excel Objects] - [ThisWorkBook] を ダブルクリック して現われた コードウィンドウ に Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)  If ActiveSheet.Name <> "Sheet1" Then Range("A1") = 0 End Sub を コピペ し [Alt] + [F4] で [Visual Basic Editor] を閉じます。 ●これより「ああ」シート での操作です。 3)B1・C1 にそれぞれ「データ1」・「データ2」と入力します。 4)A2 に =A1 + MATCH(SheetName(),INDIRECT("Sheet1!R" & A1 + 1 & "C1:R65536C1",FALSE),0) と入力します。 5)B2・C2 にそれぞれ =IF(ISNA($A2),"",INDEX(Sheet1!B:B,$A2)) =IF(ISNA($A2),"",INDEX(Sheet1!C:C,$A2)) と入力します。 6)A2:C2 を選択し、下方向に必要数 オートフィル します。 7)A列を非表示にします。 ●これより シート を増殖します。 8)「ああ」シート を「会社名」の数だけ コピー し、それぞれの シート名 を「会社名」に変更します。 9)以上で、当該シート を選択すると、 >A欄と同じ会社名のシートのA欄にデータ1、 >B欄にデータ2が上から順に自動転記され た状態で表示されます。  なお、上記文中「Sheet1」は >シート1にデータを入力します。 とお書きの実際のシート名に変更してください。    説明文中、下記の用語につきましては、それぞれ URL をご参照ください。 オートフィルタ : http://www.eurus.dti.ne.jp/~yoneyama/Excel/filter.htm Function : http://www.moug.net/tech/exvba/0100003.htm INDIRECT : http://bekkoame.okwave.jp/qa5687529.html の [ANo.4] オートフィル : http://hamachan.info/excel/o-tof.html

noname#241383
質問者

お礼

むちゃんこ詳しい解説をありがとうございました。 頑張ってやってみます。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

No.2です! たびたびごめんなさい。 前回の数式を少し訂正してください。 各会社Sheet作業列A2セルに入力する数式は =IF(Sheet1!A2=$A$1,ROW(A1),"") です。 これでSheetを作業グループ化しても大丈夫だと思います。 前回の数式ですと、「ああSheet」のA1セルを参照する数式になっていました。 各SheetのA1セルを参照しなければ正確なデータは反映されません。 どうも何度も失礼しました。m(__)m

  • Sinogi
  • ベストアンサー率27% (72/260)
回答No.1

=VLOOKUP(MID(CELL("filename",$A$1),FIND("]",CELL("filename",$A$1))+1,31),Sheet1!$A$1:$C$4,COLUMN()+1)

関連するQ&A