• 締切済み

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

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

みんなの回答

回答No.3

カンペならイッパイ転がってるよ~、、、 ユーザフォーム入門 - 住所入力フォームを作成する(4) ~ ワークシートへの転記他 (Excel 2000) http://www.moug.net/tech/exvba/0090037.html

jamkun
質問者

お礼

ありがとうございます。 参考にしながら勉強します。

全文を見る
すると、全ての回答が全文表示されます。
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんにちは! >エクセルでデータ入力用のフォームは作ることができたのですが とありますが、どのようなフォームになっているか判りませんので テキストボックスを3個配置し、 テキストボックス1が「分類」 テキストボックス2が「図書名」 テキストボックス3が「冊数」の数値 をそれぞれ入力し、コマンドボタンでSheetに上から順次表示させるユーザーフォームだとします。 仮に1行目が項目行で2行目以降のA~D列にデータを列記する場合の一例です。 コマンドボタンのコードに Private Sub CommandButton1_Click() With Cells(Rows.Count, 1).End(xlUp).Offset(1) .Value = .Row - 1 .Offset(, 1) = TextBox1 .Offset(, 2) = TextBox2 .Offset(, 3) = TextBox3.Value End With TextBox1 = "" TextBox2 = "" TextBox3 = "" End Sub といった具合ではどうでしょうか? ※ コード内の > .Row - 1 の部分で番号調節を行います。 仮に項目行が4列目で5行目からデータを列記する場合は > .Row - 4 となります。 参考になりますかね?m(_ _)m

jamkun
質問者

お礼

わかりやすいアドバイスありがとうございます。 思った通りに出来そうです。

全文を見る
すると、全ての回答が全文表示されます。
  • Miss-Meg
  • ベストアンサー率0% (0/0)
回答No.1

作成されたデータ入力用のフォームが、どのような物なのか分かりませんが、 仮に、添付の図のような環境だとします。 ユーザフォームのコードは、以下のように感じになります。 -------------------------------------------------- ''------------------------------ '' フォームの初期化 ''------------------------------ Private Sub UserForm_Initialize() '' 分類のセット cmbGroup.AddItem "文庫本" cmbGroup.AddItem "週刊誌" cmbGroup.AddItem "月刊誌" '' 冊数のセット txtNumber.Value = 1 txtNumber.Locked = True End Sub ''------------------------------ '' 冊数スピンボタン[▲]押下時 ''------------------------------ Private Sub spnNumber_SpinUp() txtNumber.Value = txtNumber.Value + 1 End Sub ''------------------------------ '' 冊数スピンボタン[▼]押下時 ''------------------------------ Private Sub spnNumber_SpinDown() If txtNumber.Value > 1 Then txtNumber.Value = txtNumber.Value - 1 End If End Sub ''------------------------------ '' 新規登録ボタン押下時 ''------------------------------ Private Sub cmdAdd_Click() Dim ws As Worksheet Dim ret As Range Dim iRow As Long '' 確認メッセージ If MsgBox("登録しますか?", vbQuestion + vbYesNo) = vbNo Then Exit Sub End If '' 入力チェック If cmbGroup.Value = "" Then MsgBox "分類を選択してください" Exit Sub End If If Trim(txtTitle.Value) = "" Then MsgBox "タイトルを入力してください" Exit Sub End If '' 対象のワークシートをセット Set ws = ThisWorkbook.Worksheets("蔵書一覧") '' 重複チェック Set ret = ws.UsedRange.Find( _ What:=txtTitle.Value, _ After:=ws.Range("C2"), _ LookAt:=xlWhole, _ SearchOrder:=xlByRows) If Not ret Is Nothing Then MsgBox "タイトル『" & txtTitle.Value & "』は既に登録されています。" Exit Sub End If '' 新規行の追加 iRow = ws.UsedRange.End(xlDown).row + 1 ws.Cells(iRow, 1).Value = ws.Cells(iRow - 1, 1).Value + 1 ws.Cells(iRow, 2).Value = cmbGroup.Value ws.Cells(iRow, 3).Value = txtTitle.Value ws.Cells(iRow, 4).Value = txtNumber.Value '' 書式のセット ws.Range(ws.Cells(iRow - 1, 1), ws.Cells(iRow - 1, 4)).Copy ws.Range(ws.Cells(iRow, 1), ws.Cells(iRow, 4)).PasteSpecial _ Paste:=xlPasteFormats Application.CutCopyMode = False ws.Cells(1, 1).Select End Sub -------------------------------------------------- 上記コードでは、適当に入力チェックや重複チェックを入れてありますが、 これらは仕様によりますので、必要に応じて行ってください。

jamkun
質問者

お礼

丁寧に教えて頂きありがとうございます。 重複チェックなんて・・・感動です。 とても勉強になります。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 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 コードを教えて下さい!

    お世話になっています。 今回は、次の事を実現するコードを教えて頂きたいと思います。 <データ入力ブック> A1=Book1 <----- 転記先のブック名(Excel文書名) A2="AAA" この<データ入力ブック>に入力されたデータを手掛かりにしてサブディレクトリにあるBook1のSheet2!A2に"AAA"を転記し保存。 ※2004年頃を最後にAccessのVBAにも触れていません。Excelは、一度も操作したこともなく同VBAは初めてです。 ※バージョンは、Excel2007。文書は、2003等との互換モード。 厚かましいお願いとは承知していますが、教えてもらえるととっても助かります。 非常に複雑な円の配置が自動化されたので私の仕事は明日で終わります。 月曜日からは、200文書へのデータ入力。 一々、200もある文書を検索して開いて当該のセルを探して入力していたのでは手間。 そこで、<データ入力ブック>に10項目程度の入力欄を設けて入力。 <データ入力ブック>でデータの入力・訂正も管理し、そして一括更新。 そういう仕組みを日曜日の夜の3、4時間で完成したいと思っています。 そういう事情ですので、教えてもらえるととっても助かります。

  • 急!!Excel VBA 転記マクロを教えて下さい

    Excel VBA超初心者です、 急ぎ作らなければならない資料があり、ご助力願います。 次の様な転記するアクションをコマンドボタンに設定したいです。 Sheet1の列A(先頭セルA2)に入力したデータを、 追加した(入力間違い等を除き、保存した)データ分だけ Sheet2の列B(先頭セルB3)の最終行から転記させていく。 列Aに入力したデータは、並び替えをするので (この分は、今回のVBAに含みません。入力・転記後、Sheet1で普通に並び替えをします。) 列Aと列Bのデータの順番が異なる。 以上です。 どうぞ宜しくお願いします。

  • Excel VBA 任意のレコード転記について。

    Excel2007でのVBAのご質問なのですが、InputBox関数で転記元テーブル表から、 例えば任意の整理番号を入力する事で、その整理番号の得意先名や 担当者名、部署名等のデータを検索して転記するようにしたいのですが どうしたら良いのでしょうか?宜しくお願い致します。

  • エクセルVBA 表示について

    VBAにて次のようにしたいのですが、できますか? 今月処理だと5月ですので、5 そこにA1から下方向へ1~通し番号が振ってあります。 sheet2に転記する際に、050001、050002、050003というようにしたいのです。12月なら120001、120002、120003と言う様にしたいです。できますか? 

  • エクセル VBA データ入力

    こんにちは、はじめまして。 エクセル・VBA初心者です。 会社に入って3ヶ月になります。 同じファイル内で、入力用シートから 違うシートに表としてデータを転送するため、 本や今まで作ったものを参考にして下のようなVBAを作成したのですがうまくいきません。 Sub 転記() Dim ws0 As Worksheet, ws1 As Worksheet, chikuseki As Range Dim nyuryoku() Set ws0 = Worksheets("Worksheet1") Set ws1 = Worksheets("Worksheet2") nyuryoku = Array("b3", "d3", "f3", "h3") '転記したいセルの位置 Set chikuseki = ws1.Range("f", "g", "k", "q" & Rows.Count).End(xlUp).Offset(1) 'データ蓄積セル For i = 0 To UBound(nyuryoku) chikuseki.Offset(0, i).Value = ws0.Range(nyuryoku(i)).Value ws0.Range(nyuryoku(i)).MergeArea.ClearContents Next masgbox "入力完了" End Sub 十何個あるデータを転送する場合、フォームから入力した方が簡単なのでしょうか? また、表にデータを転記し、そのなかのデータのいくつかを別の表に転記することは、一度の操作で可能ですか? 今週中に仕上げろと言われたので急いでいます、 どうかよろしくお願いします。 質問がまとまっていなくてわかりにくければ申し訳ないです。

  • Excel VBAでデータを自動処理したい

    Excelで大量のデータ処理をしなくてはならないのですが、以下の処理をExcel VBAで自動処理できないでしょうか? どなたかお知恵をお貸しください。 (1)A、B、C列からなるリストがあります。A,B列にはそれぞれオートフィルタが設定してあり、C列は空白です。A列、B列にそれぞれ条件を設定し、抽出したデータのC列(空白)に特定のデータを入力します。A列、B列2つの条件の組み合わせが100通りくらいあり、現在手動でオートフィルタを設定し、C列にデータを入力しております。例えばA,B列の条件の組み合わせと、それに対応するC列に入力するデータを表にしたテーブルを別に作り、A,B列の条件を自動に設定して、抽出し、C列にデータを自動に入力することを、テーブルの一番上の行から最後の行まで繰り返す、というようなことをVBAでExcelにしてもらいたいのです。自分でちゃんと勉強し、調べて、それでも分からなかったらお聞きするというのが筋だと思うのですが、今この仕事に追われて、時間がありません。(ほとんど毎日午前様です。)この仕事が片付いたら、じっくりVBAを勉強したいと思っております。どうぞよろしくお願いいたします。

  • エクセル この場合のVBAの書き方教えてください。

    顧客情報がsheet2にデータベース化されていて、そのシートのR列に管理上、属性によって顧客を分類する番号が1から8までそれぞれ入力されています。 教えていただきたいのは、シート1上でその分類の数字を入力すれば、別シート、例えばsheet3にそれに該当する顧客だけをsheet2と同じ書式で自動でコピーしてくれるマクロを作りたいのですが、詳しい方いましたらご面倒でしょうがVBAのコードをそのままコピーできるように書いていただけないでしょうか? 情報が不足でしたら補足させていただきますので宜しくお願いします。

  • VBA コードの削除に関する質問<お願いします!!> 

    マイクロソフトアクセスで 以下のようなデータを VBAを用いて 自動で削除させたいんですけど コードが分かりません教えてください!! <やりたい事> ・同じ分類番号内で一番上に表示されている単語 以外すべて削除する 分類番号   単語     分類番号   単語 1      A         1       A 1      B         2       A 1      C    →    3       A 2      A 2      B 2      C 2      D 3      A 3      B 3      C 3      D 3      E 困ってます! お願いします!!

  • ExcelのVBAについて。

    ExcelのVBAについて。 画像のようなコードを利用してセルに入力時の日付時間を自動的に付加させたいのですが、、 VBA初心者な為に上手くいきません。 コード自体はサイトのを切り貼りして使えるのですが、これ以上の応用例に行き着けません。目的としては、データベース的に、あと入力数値から特定文字を抜き出して変数を当て嵌め文字列の語呂を当てます。様式はまだ作成中ですが、ある種の図表化してプリントアウトまでしたいと思っています。 何が上手くいかないか、まず自動的に付加させる所は何となく出来ているので、これをシート1とした場合に、シート2に図表化した転記内容を構成し、、シート1入力、シート2表示、またシート1A3セルに戻るというコードにしたいです。 この記述は不味いとかこうこうああした方が良いというアドバイスや指摘をお願いします。 よろしくお願いします。

専門家に質問してみよう