• ベストアンサー

Excel VBAで作成するにあたって、画像上部の元データを

Excel VBAで作成するにあたって、画像上部の元データを 画像下部のように行列位の違いがあるような項目に データを抽出して転記するにはどうしたらよいでしょうか? 手順 ・支店ごとにデータを抽出し、シート名を付ける ・データを担当者ごとに1行に集約して転記する VBA初心者で勉強中ですが大変困難です。 どなたか教えてください。よろしくおねがいいたします。

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

  • ベストアンサー
  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.2

Sheets(.Range("J" & i).Value).Range("B" & Sheets(.Range("J" & i).Value).Range("B" & Rows.Count).End(xlUp).Row + 1).PasteSpecial Paste:=xlValues Application.CutCopyMode = False Next End With Application.DisplayAlerts = False Sheets("mTemp").Delete Application.DisplayAlerts = True ANo1とこれを引っ付けてください。 備考欄はどのような考えなのか分からなかった (ケースとないもないところがあり ケースを選択してるようだけどケース以外に何かあった場合どうするのかわからない) ので対応していません。 mTempというシートを作成して作業をしますから同じ名前のシートが既にある場合エラーになります。 実行は画像で示されたシートを表示した状態で実行してください。

akapen1974
質問者

お礼

本当にありがとうございました。感謝いたします。

その他の回答 (1)

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.1

Dim mMatch As Boolean ActiveSheet.Copy after:=Sheets(Sheets.Count) Sheets(Sheets.Count).Name = "mTemp" With Sheets("mTemp") .Range("B1:E11").Select .Range("B1:E11").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=.Range("J1"), Unique:=True .Range("N1").Value = "りんご" .Range("O1").Value = "バナナ" .Range("P1").Value = "みかん" .Range("Q1").Value = "合計" .Range("R1").Value = "備考" .Range("N2").FormulaR1C1 = "=SUMPRODUCT((R2C2:R11C2=RC10)*(R2C3:R11C3=RC11)*(R2C5:R11C5=RC13)*(R2C6:R11C6=R1C)*(R2C7:R11C7))" .Range("N2").AutoFill Destination:=.Range("N2:N5"), Type:=xlFillDefault .Range("N2:N5").AutoFill Destination:=.Range("N2:P5"), Type:=xlFillDefault .Range("Q2").FormulaR1C1 = "=SUM(RC[-3]:RC[-1])" .Range("Q2").AutoFill Destination:=.Range("Q2:Q5"), Type:=xlFillDefault For i = 2 To .Range("J" & Rows.Count).End(xlUp).Row mMatch = False For Each sh In ActiveWorkbook.Worksheets If sh.Name = .Range("J" & i).Value Then mMatch = True End If Next If mMatch = True Then Sheets(.Range("J" & i).Value).Range("A" & Sheets(.Range("J" & i).Value).Range("B" & Rows.Count).End(xlUp).Row + 1).Value = _ Sheets(.Range("J" & i).Value).Range("B" & Rows.Count).End(xlUp).Row .Range("J" & i & ":R" & i).Copy Else Worksheets.Add(after:=Worksheets(Worksheets.Count)).Name = .Range("J" & i).Value Sheets(.Range("J" & i).Value).Range("A1").Value = "No." Sheets(.Range("J" & i).Value).Range("A2").Value = 1 .Range("J1:R1").Copy Sheets(.Range("J" & i).Value).Range("B1").PasteSpecial Paste:=xlValues .Range("J" & i & ":R" & i).Copy End If

akapen1974
質問者

お礼

本当にありがとうございました。心から感謝いたします。

関連するQ&A

  • Excel VBAで作成するにあたって、画像上部の元データを

    Excel VBAで作成するにあたって、画像上部の元データを 画像下部のように行列位の違いがあるような項目に データを抽出して転記するにはどうしたらよいでしょうか? 手順 ・支店ごとにデータを抽出し、シート名を付ける ・データを転記する VBA初心者で勉強中ですが大変困難です。 どなたか教えてください。よろしくおねがいいたします。

  • エクセルのマクロ作成で困ってます

    マクロ初心者です。 ”Sheet1にあるデータについて、複数条件で抽出後、Sheet2の表に転記” という動作をマクロで組みました。 ここまでは良かったのですが、Sheet2に転記する際、下記の様にさらに条件を付加したいと思っています。 やりたいこと(ア) Sheet1で条件によりたとえば10個のデータを抽出できたとし、 1~6個目までは、Sheet2の1行~6行に転記、 7~10個目までは、Sheet2の11行~14行に転記。 ※”6個目まで1~6行に転記”というのは決まっているのですが、  この10個というのは、例であって、5個だったり、14個だったり、  抽出したデータにより異なるので、変数です。 やりたいこと(イ)   Sheet1から、さらに別の条件で抽出したデータを、  やりたいこと(ア)の10個目を転記した行のあとすぐ(例でいうと15行目)から転記したい。  ※やりたいこと(ア)で抽出した条件が6個以下だった場合、11行目から転記。 以上の2つです。 条件の抽出までは出来るのですが、 (ア)の7個目から別のところに転記 (イ)の別の条件で抽出したデータを(ア)の次(6個以下の場合は11行目)から転記 をどうやって組んだら良いかわかりません。 もし分かる方がいらしたら、 どのようなコマンド(?)を使ったら良いのか、 ご教示いただけると助かります。 よろしくお願いします!

  • Excel VBA データの転記

    Excel2003を使用しています。 Sheet1のB1セルとSheet2のB1セルのデータが一致したら、Sheet2のB1セル~E1セルのデータをSheet1のF1セル~Iセルに転記するというコードを書いています。 Sheet1のデータ最終行を取得して、上記の条件を満たさなかったSheet2のB1セル~E1セルのデータをSheet1のデータ最終行の1行下から順に転記するという内容を追加したいのですが、転記先の指定の仕方が悪いのか、希望通りになりません。 どなたか一例を示していただけないでしょうか? スマホからの投稿で、実際に書いているコードを記載できず、分かりづらくて申し訳ないのですが、よろしくお願いします。

  • VBAのデータ抽出(間引き)について

    VBAのデータ抽出(間引き)について 当方VBA初心者なのですが、 VBA(EXCEL2007)を使用してグラフ作成をしようと思っています。 元データの書式は以下の通りでデータ行は30秒間隔で 一カ月分(8万行)あります。 2010/08/01 01:00:34     1112.83 2010/08/01 01:01:04     1110.43 2010/08/01 01:01:34     1111.87 2010/08/01 01:02:04     1112.23 2010/08/01 01:02:34     1112.43 2010/08/01 01:03:04     1112.03 2010/08/01 01:03:34     1110.83 2010/08/01 01:04:04     1112.43 2010/08/01 01:04:34     1110.63 ・・・ データ量が多すぎるので間引きしようと思っています。 間引き(抽出)条件は以下の様に考えています。 10行毎(5分毎)に値の最大値の行を抽出して別シートへコピー。 VBAマクロで処理するにはどの様な コードで実現可能でしょうか? 教えて頂きたく。よろしくお願いします。

  • エクセルでデータを蓄積するVBA

    蔵書管理用の一覧表です。 エクセルでデータ入力用のフォームは作ることができたのですがシートに転記するVBAをどのように書けばよいのか分かりません。 データは次々に増えていきます。 A列には番号を入力せずに自動的に番号が増えていくようにしたい。 3番まで入力済みのあとは、自動で「4」と番号が付与されて、下の行に転記されるようにしたい。 VBA初心者です。よろしくお願いします。 A    B      C          D 番号 分類     図書名      冊数 1   文庫本    日本の歴史   3 2   週刊誌    新潮        1 3   月刊誌    月刊ゴルフ    1

  • VBA 別BOOKへのデータ転記について

    VBA初心者です。 以下のことがしたいのですが、 コードをご教示いただきたくお願いいたします。 BOOKが5つあります。 BOOK1:抽出用(Sheet2に日々の受注データを入れています)        BOOK2:転記100用 BOOK3:転記200用 BOOK4:転記300_400_500用 BOOK5:工事番号用 BOOK1:抽出用はA列からQ列まで工事番号ごとに2行目から受注データが入っています。 抽出用のsheet2のA列に「1」と入力することで転記したいデータだというフラグにし、 抽出用O列のコード100,200,300,400,500(工事の種類のようなものです)を見て、 該当のBOOK2から4にその工事番号が転記がされているか? (されていれば登録済みのメッセージ表示) 転記がされていなければ新規に登録、 新規登録の際に、抽出用Sheet2のD列の工事番号、I列の件名、K列の数量を表示して、 このデータを新規登録しますか?のようなメッセージを出し、Yesなら新規登録。 さらに、新規に登録した際にはその工事番号を名前とするBOOK5を新規作成、 BOOK5にも抽出用の受注内容を転記。 BOOK2から4に転記された工事番号をクリックすると その工事番号のBOOK5にジャンプするようにしたいのです。 抽出用A2とA4に「1」と入力された場合(O列は共に200) BOOK1抽出用データの転記したいセル番地  →  BOOK3転記200用のセル番地 A2のデータ D2 → A7 K2 → A8 C2 → A9 H2 → A10 I2 → A11 F2 → D7 L2 → D8 M2 → D9 J2 → D10 C2 → I5 Q2 → J5 A4のデータ D4 → A12 K4 → A13 C4 → A14 H4 → A15 I4 → A16 F4 → D12 L4 → D13 M4 → D14 J4 → D15 C4 → I10 Q4 → J10 BOOK2から4は1つの工事番号を5行使用して表わしています。 ですので、1つの工事番号が7から11の行、 2つ目の工事番号が12から16行目となり、それぞれ100件分の工事番号を入れられるように 作成してあります。 またBOOK5については、(A2のデータの場合)以下のように転記し、ファイル名を抽出用D2の工事番号にしたいです。 A2のデータ D2 → A3 K2 → A4 C2 → A5 H2 → A6 I2 → A7 F2 → F3 L2 → E4 M2 → E5 J2 → E6 大変長くなってしまいましたが、以上のようなことをしたいと考えておりますが、 当方、VBA初心者でして参考書とネットを駆使して抽出用のVBA(CSVデータをコピーして加工する)ことにすら大苦戦しております。 なんとかお力を貸していただけないでしょうか? ご教示よろしくお願いいたします。

  • 〔EXCEL VBA〕で「第1のシート」のデータを「第2のシート」に転

    〔EXCEL VBA〕で「第1のシート」のデータを「第2のシート」に転記する方法 EXCEL2003でデータが480行/65列ある第1のシート(データベース的)があります。 第1のシートの列にデータが入力されている場合のみ、第2シートの指定されたセルに検索した列の 表題と検索したデータを結合して転記したいのですが良い方法が分りません。 その際、各行毎に検索し空白列は第2のシ-トに転記せず左詰めにして転記したいのですが・・・・ 初心者に合せたご教示をお願いします。 また、Excel VBAの短期マスター法が御座いましたら合せて教示願います。 以上、宜しくお願い致します。

  • エクセルVBA 検索とデータ保持の手順

    表題が何と記載すれば良いか分からなかったので曖昧な表題となってしまい 申し訳ございません。 今回は自分的には高度でどの様にしたら良いかが分からず質問させて頂きます。 シートAとシートBとシートC 及び 項目一覧シートがあると仮定します。 シートA(検索対象シート)   A~D列程度あり、行数は2000行程度を想定 シートB(ピックアップシート) A~D列程度あり、行数は2000行程度を想定 項目一覧シート(シートAの項目)開発に関する文字列     (JavaとかPHPとかの一覧になります。なので、項目数は多く200位でしょうか?) シートC(書き出しシート) (こんな感じかなと) 1.シートAのC列セル内の文字(凡そ2000文字程度入力があります)内に   項目一覧シートに羅列している文字列が含まれているかを検索。   含まれている文字列を取得し(ヒットした文字列全て)ます。   この時、複数の文字列を取得する事を想定します。 2.シートBのC列セル内の文字(こちらも2000文字程度が入力)内に   含まれている文字列から、先程取得した文字列があるかを検索。   2つ以上含まれていたら抽出する。   シートCに対象となった、シートAのA~D列の全ての行を転記、ヒットした   シートBのA~D列の全ての行を転記。   上記をシートBの入力がある全てのセルに行う。 上記を行いたいです。 ここからがデータの持ち方になるのですが、以下の感じで良いのか。。。 A2lB2lC2lD2  ← シートAから抽出したデータ   A100lB100lC100lD100   A189lB189lC189lD189   A1351lB1351lC1351lD1351 ← シートBから抽出したデータ ↑一つセルを開けるイメージです。 上記をツリー型と言うのでしょうか?ぶら下型と言った方が良いのかな?として表記させて 頂きました。 但し、エクセルのつくり上とかなどで上記はやめた方が良い場合には、お手数ですが ご教授頂けると助かります。 シートAのC列には以下の様な内容が記載あります。(内容は適当に端折ってます) ------------------------------------------------------------------------------------------------------------ 【作業内容】 広告媒体を管理するツール(Webツール)の開発 ・広告効果測定ツールとのAPI繋ぎ込みによるデータ取得 ・広告媒体とのAPI繋ぎ込みによるデータ取得 【要件スキル】 ≪求めるスキル≫ ・PHP/Javascriptを用いたWEBアプリケーション ・MySQLを使用した開発経験 ≪ 歓迎するスキル ≫ ・広告業界での開発経験 ・PHPフレームワークやCSSフレームワークを使用した開発経験 ≪ 人物像 ≫ ・ゲームが好きな方 ---------------------------------------------------------------- シートBのC列には以下の様な内容があります。 ------------------------------------------------------------------------------------------------------------ ■氏名: ■所属: ■開発経験:20年 ■スキル: 【スキル面】 基本設計~製造 VB, Java, C, PHP, HTML, JavaScript IBM Notes, SQLServer, MySQL, SQL 【人物面】 コミュニケーション能力高めです。 ■補足:PHPは1ヶ月程度の製造経験。VBとJavaScriptが得意。 ------------------------------------------------------------------------------------------------------------ 上記の場合は、PHPとJavaScriptがヒットするので、シートCへの転記をする。 (シートAのA-D列を抽出し(仮にAとします)、シートCへ転記。 及びヒットしたシートBのA-D列を抽出し(仮にBとします)、Aの下部へ転記。 複数ヒットの場合は、順次Bの下部へ転記していく) 上記の様な事はエクセルで可能でしょうか?(何とかエクセルで作り上げたいのですが。。) 宜しくお願い致します。

  • VBAとデータの転記について

    今エクセル2003で、以下の上段画像のようなエクセルデータを作成しました。 上段(シート1)が、各商品に対する評価表なのですが、 そこに評価のあった件数が入力されています。 今、シート1の商品名から評価の不可までを、 VBAでシート2に以下のように転記をしたいのです。 先月はたまたま26件だったのですが、 毎月の商品の件数が、決まっていないので、連番記載とセルごとの処理 ループの使い方がよくわかりません。 評価欄は1件でも件数があれば、○印を転記して、空白はそのままで 転記したいのです。 データが多くなるにつれ手作業が大変になってきました。 VBAがまったくわからず、申し訳ありませんが よろしくお願いします。

  • Excel VBAを利用して宛名シール作成について

    VBA初心者です。 仕事で、宛名シールを使って、商品が入っている箱に貼り付けるシールを作ることになり、 勉強を兼ねてVBAで試作中です。 【1枚目シート 明細】 メーカー 商品名 数量 トヨタ カローラ 1 ホンダ シビック 2 【2枚目シート 書式】 既製品の宛名シールに合うように、Excelでセルを調整済み (縦3・横3で1件分のシール。これを縦7件・横2件、合計14件分を作成) <やろうと思っていること> (1)明細シート1行毎、書式シートの1件分のセルに転記(これはマクロの記録で出来ました) (2)書式シート、14件分埋まったら、印刷をする。 (3)書式シートに転記済みのデータを全て消去(これは自力で出来そうです) (4)15件目から同じことを繰り返す。 (5)明細シートのデータ最終行までいったら、転記終了。 ※明細データ数は、毎回変わる。 (2)~(5)の流れを、どのようにコードにしたら良いか、見当がつきません。 Doで繰り返すのかなとも思ったのですが、途中で印刷とデータ消去を挟むとなると、 どうなるんだろう???と、止まってしまいました。 フリーソフトやラベル印刷ウィザードで対応することも考えましたが、 使う人のことを考えたら、VBAでボタン一つで終わるようにしたいと思っています。 文章での表現で、理解しずらいかもしれませんが、取っ掛かりとなるヒントでも 教えて頂きたいです。 よろしくお願いします。

専門家に質問してみよう