VBA初心者のためのデータ転記の方法

このQ&Aのポイント
  • VBA初心者の方が複数のBOOK間でデータを転記する方法について教えてください。
  • BOOK1からBOOK2、BOOK3、BOOK4へのデータ転記が必要です。
  • また、BOOK5を新規に作成し、転記したデータを保存する必要があります。VBAのコードや手順を教えてください。
回答を見る
  • ベストアンサー

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データをコピーして加工する)ことにすら大苦戦しております。 なんとかお力を貸していただけないでしょうか? ご教示よろしくお願いいたします。

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

  • ベストアンサー
  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.1

いろいろと質問事項が多くて回答するのが難しいです。 >当方、VBA初心者でして参考書とネットを駆使して抽出用のVBA(CSVデータをコピーして加工する)ことにすら>大苦戦しております。 ですか、ここは発想を変えましょう。 私だったら BOOK1:抽出用(Sheet2に日々の受注データを入れています) のブックに、 転記100用、転記200用、転記300_400_500用、工事番号用のシートを準備します。 たぶん、VBAのコードもシンプルになります。意外と関数やエクセルの抽出の機能でできたりするでしょう。 その準備ができたら、必要に応じて、別ブックにシートごと張り付ける操作をVBAで考えます。 経験則からですが、そのほうが後々、変更などあった場合に楽ですよ。

orange1010
質問者

補足

hallo-2007さん、こんばんは。 回答ありがとうございます。 教えていただいたような構成のものを作成してみました。 まずはA列に「1」と入力された時に O列の種類コードを見て、 該当するシートにそのデータが転記されているか否か? 転記されていないものならば、新規登録するか? というメッセージを表示。 ここまでをやってみたいのですが… お時間ございましたらご教示願えますでしょうか? よろしくお願いいたします。

関連するQ&A

  • VBA 別ブックへのデータ転記

    別ブックへのデータの転記についてご教示お願いいたします。 以下、やりたいことです。 Bookの構成4種類 1.抽出用 (csvデータをコピーして、転記用Bookに移す為の加工をしており、A列に〇がついたものでO列の値(1~3)別にそれぞれのBookへ転記しようと考えています。 2.転記O列1用 3.転記O列2用 4.転記O列3用 現在のコードは以下の通りで、わからない点は大まかに2点あります。 1点目は、O列の値(1~3)の値を見てBookを開く(現在は指定のBookを開くコードになっています) 2点目は、転記用への転記の方法 例えば、抽出用のA2とA4に〇がついてO列が共に1だとすると、転記O列1用のBookを開いて、 A2のデータを以下のように。 抽出用   転記O列1用 P列の値 → A7へ C列の値 → A8へ H列の値 → A9へ I列の値 → A10へ F列の値 → E5へ L列の値 → D6へ M列の値 → D7へ K列の値 → F9へ J列の値 → D8へ A4のデータを以下のように。 抽出用  転記O列1用 P列の値 → A12へ C列の値 → A13へ H列の値 → A14へ I列の値 → A15へ F列の値 → E10へ L列の値 → D11へ M列の値 → D12へ K列の値 → F14へ J列の値 → D13へ 以上のような事がしたいのですが、 現在、勉強中の初心者で…参考書を見ながら以下のコードまでしか出来ませんでした。 このコードもめちゃくちゃなのかもしれないのでお恥ずかしいのですが… なんとかこのデータを仕上げたいと思っています。 ご教示よろしくお願いいたします。 Sub ボタン2_Click() Dim myCnc1 As String Dim myCnc2 As String Dim myFileName As String Dim sheet1 As Worksheet myFileName = "受注.csv" Set sheet1 = Worksheets(2) sheet1.Activate myCnc1 = "TEXT;" myCnc2 = ThisWorkbook.Path & "\" & myFileName With ActiveSheet.QueryTables.Add( _ Connection:=myCnc1 & myCnc2, _ Destination:=Range("A1")) .TextFilePlatform = 932 .TextFileCommaDelimiter = True .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1) .Refresh End With Columns("A:A").Insert Columns("B:B").Select Selection.TextToColumns Destination:=Range("B1"), DataType:=xlDelimited, _ FieldInfo:=Array(1, 5) Columns("G:G").Select Selection.TextToColumns Destination:=Range("G1"), DataType:=xlDelimited, _ FieldInfo:=Array(1, 5) Columns("O:O").Select Selection.TextToColumns Destination:=Range("O1"), DataType:=xlDelimited, _ FieldInfo:=Array(1, 5) Dim r As Long r = Range("E" & Rows.Count).End(xlUp).Row Columns("E:E").Insert Range("E2:E" & r).FormulaR1C1 = "=LEFT(RC[-1],10)" Range("E2:E" & r).Value = Range("E2:E" & r).Value Range("D1").Copy Range("E1") Columns("D:D").Delete Columns("H:H").NumberFormatLocal = "0_ " Columns("O:O").Insert Range("O2:O" & r).FormulaR1C1 = "=Right(RC[-1],3)" Range("O2:O" & r).Value = Range("O2:O" & r).Value Range("N1").Copy Range("O1") Range("O1") = Range("N1") + "2" Range("A1").Select Dim myRng1 As Range Dim myRng2 As Range Dim mySht As Worksheet Set myRng1 = _ ActiveSheet.Range("c1").CurrentRegion With myRng1 .AutoFilter Field:=3, Criteria1:="=J*" Set myRng2 = .SpecialCells(xlCellTypeVisible) .AutoFilter myRng2.EntireRow.Hidden = True On Error Resume Next .SpecialCells(xlCellTypeVisible).EntireRow.Delete On Error GoTo 0 myRng2.EntireRow.Hidden = False End With Set myRng1 = Nothing Set myRng2 = Nothing myFileName = ThisWorkbook.Path & "\転記O列1用.xlsm" Workbooks.Open Filename:=myFileName End Sub

  • VBAでのデータ転記処理

    下記の処理をVBAで作成したいのですが…。 Book "aaa" の "Sheet1" A |B |C |D |E |F |G |H |I |J |K 1 あ|い|う|え|お|か|き|く|け|こ|さ 2 た|ち|つ|て|と|な|に|ぬ|ね|の|は|ひ|ふ|へ 3 ま|み|む|め|も|や|ゆ|よ これをBook "bbb" の "Sheet1" に A|B|C|D|E 1 あ|い|う|え|お 2 か|き|く 3 け|こ|さ 4 5 た|ち|つ|て|と 6 な|に|ぬ 7 ね|の|は 8 ひ|ふ|へ 9 10 ま|み|む|め|も 11 や|ゆ|よ と言う風にデータを転記したいのです。 Book "aaa" の Sheet "Sheet1"のA~E列までは必ずデータが入っていますが F列以降は、データがある場合と無い場合があり データがなければ、そこのセル(行)は詰める。 さらに、Book "aaa" の1行を1セットとして、Book "bbb" で1セット単位で、空白行を設けたいのです。 上記例のように、1セットの行数は固定ではありません。 Book "aaa" の Sheet "Sheet1"のデータ行数は大量に(1000行以上)あります。 わかりにくいと思いますが、どなたかよろしく御願いします。

  • マクロで5個のBOOKのデータをBOOK1に転記

    エクセルマクロで対話型でBOOK2~6の5個のデータを BOOK1のシート1に順番で転記したいです。 BOOK2~BOOK6は作業者にファイルを選択させたいです。 BOOK2~BOOK6は作業の都度行数がBOOKごとに変わります。 (500~5,000行でばらつきます) 流れとしては、 1.BOOK1を開いてマクロを軌道 2.エクセルのファイルを開くウィンドーが出る 3.ファイルを選択させる(例:マイネットワーク内のBOOK2を選択) 4.ウィンドーの開くをクリックする 5.転記1回目   指定したファイルが開いてデータが   BOOK1のシート1に転記される   この1回目は1行目からデータがある最終行まで。   その後BOOK2は閉じられる 6.メッセージボックスで「転記完了」と表示 7.メッセージボックスの「OK」をクリックすると   エクセルのファイルを開くウィンドーが出る 8.ファイルを選択させる(例:マイネットワーク内のBOOK3を選択) 9.ウィンドーの開くをクリックする 10.転記2回目   指定したファイルが開いてデータの中の2行目~最終行までを   BOOK1のシート1の最終行の次の行から転記を行う。   (NO.5のBOOK2が1,000行の場合1,001行目から    BOOK3のデータ2行目以降が転記される)   その後BOOK3は閉じられる 11.この作業を計5回行う   (転記3~5回目も転記するデータは2行目~最終行) 13.メッセージボックスで「5個のBOOKの転記が終了」と表示 14.メッセージボックスの「OK」をクリックすると   Call 編集   でSub 編集 というプロシージャーが起動する Sub 編集は出来上がってます。 (BOOK1のシート1を編集します。) NO.1~NO.14のマクロ記述を教えてください。 自分で作成した記述では全然駄目でした。 よろしくお願いします。

  • 2つのBook間で共通のキーワードを使いデータを転記するには?

    下記のようなデータがある場合、Book1/sheet1のD列へ Book2/sheet1 C列のデータを転記したい。キーワードは 各Book B列のロットNO.です。どのようなマクロを 組めばいいのでしょうか? Book1/sheet1    A    B    C    D 1  品名 ロットNO. 数量 2  A   A123   25   50(転記) 3  A   A234   20   75(転記) 4  A   A345   22   60(転記) ・ Book2/sheet1    A    B    C    D 1  品名 ロットNO. 時間(HR) 2  A   A123    50 3  A   A234    75 4  A   A345    60 ・

  • VBAでデータの仕訳し新規ブックへ貼付け・登録

    VBAで指定(A列の値と同一)ファイルを開き、データ内C列の値を認識し、新規ブックへ1行全ての データをコピー貼付け処理後、各々仕訳されたブックB列値に-A・-B~を付加し、ファイル登録を行い たいのですが、VBA初心者でどうしてよいか教えてください。    A列   B列   C列    D列 1 J00001 11111 ABCDE BHBHB 2 J00001 22222 SDFAG NHNHN 3 J00001 22222 AZXCV NHNHN 4 J00001 11111 CVBNM LKLKL 5 J00001 33333 VBNM< TYTRE ※ 指定ファイル内行数は、可変です。 ※ 指定ファイル内A列値は同一 ↓ <book1>    A列   B列   C列    D列 1 J00001 11111 ABCDE BHBHB 2 J00001 11111 CVBNM LKLKL <book2>    A列   B列   C列    D列 1 J00001 22222 SDFAG NHNHN 2 J00001 22222 AZXCV NHNHN <book3>    A列   B列   C列    D列 1 J00001 33333 VBNM< TYTRE               ↓ book1⇒J00001-A.xlsで登録 book2⇒J00001-B.xlsで登録 book3⇒J00001-C.xlsで登録

  • ブックの転記で計算式も転記したい

    ブックの転記で計算式も転記したい データを転記するマクロを作成しました。 【知りたいこと】 その1: 転記元となるブックを毎回「master」という名前に変更してから作業をしています。 この一手間を省きたいと考えているのですが、開いているもう一つのブックを自動で 転記元の〔mst〕と認識させて作業を進めるにはどうしたら良いでしょうか? その2: 転記先のD列に、転記元(master)E列の数式を転記させるにはどうしたら良いでしょうか? このE列には、数値の値だったり、足し算・引き算・割り算などの計算式が混在しています。 また、転記先の書式は保ち、値もしくは計算式だけを転記したい。 宜しくお願い致します。 ---------------------------------------------------------- Sub 値の転記() Dim ent As Worksheet, mst As Worksheet Dim i As Integer, j As Integer Dim lstCel As Integer Set ent = Workbooks("転記先").ActiveSheet Set mst = Workbooks("master").ActiveSheet   '←★その1:このブック名の指定 lstCel = mst.Cells(Rows.Count, "B").End(xlUp).Row For i = 1 To lstCel ent.Cells(j + 2, "A") = mst.Cells(i + 2, "A") ent.Cells(j + 2, "B") = mst.Cells(i + 2, "B") ent.Cells(j + 2, "C") = mst.Cells(i + 2, "D") ent.Cells(j + 2, "D") = mst.Cells(i + 2, "E")'←★その2:ここだけ数式を転記 j = j + 1 Next i End Sub ----------------------------------------------------------

  • 別Bookのデータコピーについて

    Book違いのデータをコピー(Book1のSheet1のI,Jを埋めたい)したいと思います。 Book参考のSheet野菜は空白行が存在し、A3~A90までデータが入っています。 また、Sheet1 H列の名前はBook参考のSheet野菜のA列に必ず存在します。 Book参考はデスクトップにあり、自動で開ける方法にてお願い致します。 元 Book1のSheet1      H    I    J 3   トマト 4   きゅうり      ・      ・ 15   レタス Book参考のSheet野菜      A     B   C    D 3  アスパラガス 300  6/2   長崎県 4   いんげん  400  1/13   鹿児島県    5 6   きゅうり  200  11/6   宮崎県 53   トマト   250  2/26   島根県 90   レタス   300  7/7   佐賀県        ↓ Book1のSheet1      H    I    J 3   トマト   250  2/26 4   きゅうり  200  11/6      ・      ・ 15   レタス   300  7/7 となるように

  • 複数のブックからデータを転記するマクロについて

    こんにちは。 VBAの素人なのでネットや本などで自分なりに調べましたが、 どうにも解決できないので、ご教示いただけませんでしょうか。 複数のブックにある同一セル番地にある データを別のブックにまとめたいのですが、 ブック数が500程度あり、マクロでうまくできないか悩んでいます。  (1)転記元ブックを開く。  (2)転記元データをコピーする。  (3)転記先ファイルのセルに貼り付ける。  (4)転記元ブックを閉じる。 の繰り返しだと思うのですが、(2)ができず困っています。 ちなみに、500のブックとまとめるブックも同じフォルダにあります。 具体的には、転記元ブックは以下のような形で、A列に様々な温度のデータが縦に並んでいます。    A列   1行  温度  2行  27 ←ここのみ抽出したい 3行  28 4行  30 それぞれのブックのA2番地の温度データのみを抽出し、転記先ブックのA2からA500までまとめたい。 組んだマクロは以下です。 ------------------------------ Sub 特定フォルダ内ブックを並べ替えて転記() Dim myDir As String, myName As String, myBook As Workbook Dim motodata As Range, sakidata As Range   '集計用のブックがあるフォルダ名を指定 myDir = "D:\VBA練習" myName = Dir(myDir & "\" & "*.xls")   Do While myName <> ""   '↓転記先の最新レコード位置を取得する   Set sakidata = Range("A65536").End(xlUp).Offset(1)   '↓(1)指定した名前のブックを開いて変数に格納する  Set myBook = Workbooks.Open(Filename:=myDir & "\" & myName)   '↓(2)転記元を取得する   Set motodata = myBook.Range("A2")      '↓(3)転記先に貼り付ける   motodata.Copy sakidata   '↓(4)開いたブックを閉じる   myBook.Close  myName = Dir()  Loop End Sub ------------------------------ mybookというキーワードを使用して、A2セルデータをコピーする構文をご教示いただけませんでしょうか。 以上、長々となってしまいましたが、何卒アドバイスの程お願いいたします。

  • データ転記。うまく転記できないシートがあります。

    エクセルのデータ転記について助けてください。 現在 エクセルで職場で使用する現金出納帳を作成中です。完成間近なのにつまずいてしまいました。 作成にもう長い時間かかっるので今週中になんとか仕上げたいのです。 (職場での周りの目がこわくって・・・) どうかどうかよろしくおねがいします。 *各シートの説明 【シート1(元帳)】は記入用シート(1年間の経費等の入力をします) A1は表題 2行目はタイトル行で B列:月日、C列:曜日、:D列:経費部門コード(以下部C)、E列:経費部門名(D列の部C入力時に他シートにあるデータベースからLOOKUPで抽出して表示するようにしてます) F、G列は手入力用の内訳や備考の列、H列:収入金額、I列:支払金額、J列:差引残高。(I・J列は転記必要なしです) データはB3(日付)から入力します。 データ表の範囲はとりあえず100行目まで(A1からJ100) 【シート2~シート16(シート名はD列の経費部門コード番号です)】 こちらが転記先シートです。 A1に部門コード、B2に部門コード名(A1のコードでデータベースより抽出)2行目はB列:月日、C列:曜日、D、E列:内訳、備考、F:支払金額 【シート17(経費部門コードのデータベース)】 部門番号と部門名を表にして 元帳で入力の際 ここからひっぱってくるようになっています。 番号は15種類(経理上不規則な番号):1・2・4・5・6・7・8・9・10・12・20・21・22・仕・給(これをシート名にしてます) *希望する完成仕様 元帳(シート1)に入力したデータが同時に部門C別シート(15種類)に必要な項目だけ転記される。必要な項目は上記のシート説明参照。 *現在の作成状況 ・元帳のシート A3に'=COUNTIF($D$3:D3,D3)&D3 以下 A列はA3をコピー ・15枚の部門番号のシート B3(転記初期行)に'=IF(ISERROR(VLOOKUP(ROW(元帳!A1)&$A$1,元帳!$A$1:$I$100,2,0)),"",VLOOKUP(ROW(元帳!A1)&$A$1,元帳!$A$1:$I$100,2,0)) C3,D3,E3,F3列はB3をコピーしLOOKUPの列番号を変更 *現在の状況と問題点 シート4・5・6・7・8・9・10・12・20・21・22はきちんと転記する。 シート1(部門C:1)は部門C:1と部門C:21のデータが転記されてしまう シート2 (部門C:2)は部門C:2と部門C:12と部門C:22のデータが転記されてしまう。 この2つのシートは 下1桁でひっぱってきてしまってるのは分かるのですが改善方法が分かりません。 どうかこの2シートがきちんと動く数式を教えていただけるでしょうか? 文章力不足のため 質問の理解にさぞ悩まれるでしょうがどうぞよろしくお願いします。 補足:01 02 04と 二桁でもしてみましたが反応は同じ。 よく分からなくて セルの表示変えても値は1・2・4になってしまうんです・・。 結局よく分かりませんでした。

  • Excel VBA 別ブックを開かずに転記

    Excel2007のユーザーフォームについて教えてください。 ユーザーフォームを以下のように作成しました。 ■テキストボックス6つ テキストボックス2→件名 テキストボックス3→数 テキストボックス4→名前 テキストボックス5→備考1 テキストボックス6→備考2 ■コマンドボタンが1と3の2つです。 コマンドボタン1→転記と印刷 コマンドボタン3→終了 ■シートの構成  sheet"作成と一覧"   1行目を以下の項目で使用しています。  A1→番号(テキストボックス1を表示)  B1→件名(テキストボックス2を表示)  C1→数(テキストボックス3を表示)  sheet"印刷"  A1→番号(テキストボックス1を表示)  A2→件名(テキストボックス2を表示)  B2→数(テキストボックス3を表示)  A3→名前(テキストボックス4を表示)  A4→備考1(テキストボックス5を表示)  A5→備考2(テキストボックス6を表示) テキストボックスに入力した値を2つのシートにそれぞれ転記して、 シート"印刷"を2部印刷しています。 ここまで以下のコードで行いました。 Private Sub CommandButton1_Click() '入力値を作成と一覧シートに転記 行 = ActiveCell.Row 列 = ActiveCell.Column Cells(行, 列) = UserForm1.TextBox1.Value Cells(行, 列 + 1) = UserForm1.TextBox2.Value Cells(行, 列 + 2) = UserForm1.TextBox3.Value '入力値を印刷シートにに転記 Worksheets("印刷").Range("A1") = UserForm1.TextBox1.Value Worksheets("印刷").Range("A2") = UserForm1.TextBox2.Value Worksheets("印刷").Range("B2") = UserForm1.TextBox3.Value Worksheets("印刷").Range("A3") = UserForm1.TextBox4.Value Worksheets("印刷").Range("A4") = UserForm1.TextBox5.Value Worksheets("印刷").Range("A5") = UserForm1.TextBox6.Value 部数 = 2 Worksheets("印刷").PrintOut Copies:=部数, Collate:=True UserForm1.TextBox1.SetFocus Cells(行 + 1, 列).Select End Sub Private Sub CommandButton3_Click() '終了ボタンで値をクリアしてウィンドウを閉じる Dim Ctrl As Control For Each Ctrl In Controls If TypeName(Ctrl) = "TextBox" Then _ Ctrl.Value = "" Next Ctrl Unload Me End Sub 教えて頂きたい事なのですが・・・ コマンドボタン1の入力値を作成と一覧シートに転記の所なのですが、 アクティブセルではなく、常にA列の最後の値の次の空白行に転記するようにしたい場合、 どのように書き換えればいいのでしょうか? もう一点ですが、 別ブックにテキストボックス1から6が入力された一覧があります。 この別ブックを開かずに、 テキストボックス1に入力された番号を探して、 テキストボックス2から6に表示されるようにしたいのです。 うまく説明できないのですが・・・ 別ブックの名前は"たちつ" 別ブックは、あいうサーバーの かきくフォルダの中のさしすフォルダです。 ブック"たちつ"に"一覧"というシートがあります。 一覧のシートのD列の3行目以降には番号が入力されており、日々増えています。 テキストボックス1に入力された番号を、 一覧のD列から探し、 I列の値をテキストボックス2へ K列の値をテキストボックス3へ L列の値をテキストボックス4へ M列の値をテキストボックス5へ J列の値をテキストボックス6へ転記させたいのです。 同じブックの別シートを参照するときには Application.VLookupで出来たのですが、 マクロの記録でやってみても、解決できませんでした。 コードをご覧いただいてお分かりの通り、 VBA超初心者です。 ネットを見ながら試行錯誤している状況です。 コードの間違い等あるかもしれませんが、 ご教示よろしくお願いいたします。

専門家に質問してみよう