VBAで表を作成する方法

このQ&Aのポイント
  • VBAを使用してExcel2007で表を作成する方法について質問です。大量のデータを検証するためにマクロやVBAを使用したいが、参考書を開いてもよくわからない状況です。
  • やりたいことは、Sheet1とSheet2を用意し、Sheet1のA1に値を入力するとB1に計算結果が表示されるようなシートを作成することです。その後、(1)Sheet1のA1B1をコピーしてSheet2のA1B1にペーストし、(2)Sheet1のA1に別の値を入力するとB1の値も変化するようにしたいです。また、(3)A1B1をコピーしてSheet2のA2B2にペーストするという操作を繰り返し、Sheet2に表を作成したいです。
  • VBAを使用してExcel2007で表を作成する方法について相談です。大量のデータを検証するためにマクロやVBAを作成したいのですが、参考書を見てもよくわからない状態です。やりたいことは、Sheet1とSheet2を用意して、Sheet1のA1に値を入力するとB1に計算結果が表示されるようにすることです。その後、(1)Sheet1のA1B1をコピーしてSheet2のA1B1にペーストし、(2)Sheet1のA1に別の値を入力するとB1の値も変化するようにしたいです。また、(3)A1B1をコピーしてSheet2のA2B2にペーストするという操作を繰り返し、Sheet2に表を作成したいです。
回答を見る
  • ベストアンサー

VBAで表を作りたいのだけれど、、

Excel2007VBAについての質問です。 結構膨大な量のデーターを検証しないといけないので、 お粗末ながらのマクロorVBAを作りたいのですが、 付け焼刃で参考書開いてもよくわからない感じになっています。 やりたいことを簡単に言うと、 Sheet1とSheet2を準備して、Sheet1のA1に値を入れるとB1に計算値が出るようなシートを作りました。 (1)Sheet1のA1B1をコピーして、Sheet2のA1B1にペーストしました。 (2)Sheet1のA1に別の値を入れB1の値も変化しました。 (3)A1B1をコピーして、Sheet2のA2B2にペーストしました。 というようにどんどんコピペで Sheet2に表を作りたいのですがうまくいきません。 どなたか、お力かしてください。。

  • oz50
  • お礼率82% (14/17)

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

ブックを開く ALT+F11を押す 現れた画面で挿入メニューから標準モジュールを挿入する 現れたシートに下記をコピー貼り付ける sub macro1() worksheets("Sheet1").copy _ destination:=worksheets("Sheet2").range("A65536").end(xlup).offset(1) end sub ファイルメニューから終了してエクセルに戻る シート1にオートシェイプの図形を一個は位置してボタン代わりにする 右クリックしてマクロの登録で今登録したマクロを指定する A1にデータを記入し B1の結果を確認したら ボタンをポチッとして結果を記録する。 【次のステップ】 A1に記入するデータリストをどこか別に用意する(たとえばC1:C10) 応用のマクロを作成し,用意のデータリストを上から次々拾ってはA1に記入させ, 計算結果を次々リストの隣に書き写していかせる sub macro2()  dim i as long  for i = 1 to 10  range("A1") = cells(i, "C")  cells(i, "D") = range("B1")  next i end sub

oz50
質問者

お礼

質問内容とは違ったのですが、実質やりたいことがスパっとできました。 つたない質問文なのに噛み砕いて考えていただきありがとうございました。 捕捉で最初のステップがどうしてもエラーになってしまいました。 知識がなくて申し訳ないのですがどこがいけないんでしょう?? ただ、作業自体はSheet1で表作ってからSheet2にまとめて移せば良いだけなので全く問題ありませんでした。 ありがとうございました。

その他の回答 (3)

  • freetaka
  • ベストアンサー率53% (106/197)
回答No.4

すいません 処理がたらなかったので修正 Sub CopyData() Dim RowEnd As Long 'Excel2007以前は65575,以降は1048576が行数のリミット Const RowLimit = 1048576 If Sheets("Sheet2").Cells(1, 1) = "" Then '初回のみ"A1"のセルにデータコピー Sheets("Sheet2").Cells(1, 1) = Sheets("Sheet1").Cells(1, 1) Sheets("Sheet2").Cells(1, 2) = Sheets("Sheet1").Cells(1, 2) Else 'データのある最終行を取得し1行足す RowEnd = (Sheets("Sheet2").Cells(RowLimit, 1).End(xlUp).Row) + 1 'データをコピーする(行数がリミット以外) If RowEnd <= RowLimit Then Sheets("Sheet2").Cells(RowEnd, 1) = Sheets("Sheet1").Cells(1, 1) Sheets("Sheet2").Cells(RowEnd, 2) = Sheets("Sheet1").Cells(1, 2) End If End If End Sub

  • freetaka
  • ベストアンサー率53% (106/197)
回答No.3

Excel2007は行数の限界値が違うので こんな感じにしてみました もし自分で確認してみたい時は Msgbox (Rows.Count) で行数を確認できます Sub CopyData() Dim RowEnd As Long 'Excel2007以前は65575,以降は1048576が行数のリミット Const RowLimit = 1048576 If Sheets("Sheet2").Cells(1, 1) = "" Then '初回のみ"A1"のセルにデータコピー Sheets("Sheet2").Cells(1, 1) = Sheets("Sheet1").Cells(1, 1) Sheets("Sheet2").Cells(1, 2) = Sheets("Sheet1").Cells(1, 2) Else 'データのある最終行を取得し1行足す RowEnd = (Sheets("Sheet2").Cells(RowLimit, 1).End(xlUp).Row) + 1 'データをコピーする(行数がリミット以外) Sheets("Sheet2").Cells(RowEnd, 1) = Sheets("Sheet1").Cells(1, 1) Sheets("Sheet2").Cells(RowEnd, 2) = Sheets("Sheet1").Cells(1, 2) End If End If End Sub

oz50
質問者

お礼

修正まであげていただきありがとうございます。 すごい読みやすく、私でも理解できるVBAで、 すごい読みやすい=間違い発見しやすいので 今後、この式をもとに応用できそうな内容でした。

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

(1)Sheet1のA1B1をコピーして、Sheet2のA1B1にペーストしました。 (2)Sheet1のA1に別の値を入れB1の値も変化しました。 (3)A1B1をコピーして、Sheet2のA2B2にペーストしました。 つまり Sheet2の最後の行に下に Sheet1のA1,B1の値を入れる ということですね。 Sub ボタン2_Click() GYOU = Sheets("Sheet2").Range("A65536").End(xlUp).Offset(1, 0).Row Sheets("Sheet2").Range("A" & GYOU).Value = Range("A1").Value Sheets("Sheet2").Range("B" & GYOU).Value = Range("B1").Value End Sub こんな感じで考えてみてください。 データを入力するVBAでは頻繁に使用するパターンです。

oz50
質問者

お礼

こんなにきれいにまとめられるんですか!! 知らない言葉たちが、踊ってます(笑) 頑張ってVBA理解できるよう頑張ります。 ありがとうございます。

関連するQ&A

  • VBA コピー&ペースト

    次の作業をVBAでマクロを組みたいのですが、どのような構文にすればよいでしょうか。VBA初心者のため、お知恵を拝借させてください。 [目的] 1.ブックA(コピー先)に設定したハイパーリンク先のブックB(コピー元)へジャンプ 2.ブックBへジャンプ後、特定のセルの値をコピー 3.コピーした値をブックAの特定セルへペースト 4. 1.~3.の作業をリピート 対象は、上の作業が未完(ブックAのペースト先のセルがブランク)のもの [詳細] ・ブックB(リンク先)の保存先はサーバー ・リンク先はブックBの特定のシート ・ブックAで設定したハイパーリンクのセルの値がリンク先のシート名 ・ブックBは複数、リンク先のシートも複数(ハイパーリンクごとにリンク先が異なる) ・ブックBにはマクロが設定、開くたびにマクロ有効無効のメッセージ(Excel2003のため) ・コピペする項目は3つ ・ブックA,Bともに開いた状態で、2.~4.のリピートというマクロでも構いません。 以上ですが、他に情報が必要でしたらお申しつけください。 よろしくお願いいたします。

  • VBAで表の集計方法(値の出力方法)について

    まだVBA初心者です。 とっても曖昧な質問なんですが、今会社で莫大なデータベース?(表:Excel)から特定条件の値を抜き取り、違うシートに表を作るマクロを作ってます。 ただ、値を抜き取ると言っても、1行目のD列が"1"だった場合は1行目のG列の値と2行目のG列の文字列をくっつけて別シートの一つのセルに入れたり…D列の値が"2"だったらG列の二つ下の文字列とくっつけて、他にもB列の日付が今日より過去だったら…みたいな条件が30以上あるんです。 そして元々の表が列数が70弱、行数は4000を超えています。 元々の表(表1)の1行目から条件を特定していき、条件が合えば移してまたその下の行を…とやっていこうと思ってます。 特定条件で抜き取るマクロはなんとか書けそうなんですが、そもそも元の表(表1)から別シートの表(表2)へ値を移す方法がどうしたらいいのかわからず質問しました。 移す方法と言うのは、例えば、元々の表(表1)のA1、C1、E1を別シートに移すとして、移す値が少なければ、A1、C1、E1をコピーして別シートにペーストすればいいんでしょうけど、あまりにも移す値が多い(1行で25の値)ので、マクロ上で条件に合う値を一度変数に全部入れて別シートにValueで入れたほうが早いですよね?それとも2つのシート間で条件に合った値のコピペを繰り返した方がよいのでしょうか?CPUやメモリの量にもよるんでしょうが、どっちの方が負担がすくなく、サクッっと行くのか知りたいです。 どう説明していいのか分からず、意味がわからないかもしれませんがよろしくお願いします。

  • VBA 別シートの計算表

    Excelについて。 シートAに、計算表があります。 セルa1に入力した値によって、いくつかのExcel関数を利用して、 セルb1に結果を出力しています。 いつも、手入力でセルa1に値を入力して結果を求めていますが。 今度、シートBに膨大な入力するための数値があるので、VBAで自動化できないかと考えています。 今回の質問は、VBAで記述する際に、シートAの入力セルa1に、シートBの入力値を1つずつ代入していき、結果のセルb1をシートBの入力値の隣に出力していこうと考えています。 シートAのa1に入力値を代入して、すぐに結果b1の値を結果出力セルに代入していいのでしょうか? 計算表(シートA)での計算を時間をおく必要があるのでしょうか?=一旦、他のセルを選択するなど。 よろしくお願いします。 ・計算表での計算時間は、1秒未満です。 ・計算表の計算過程もVBAで書けば済む話ですが、プログラミングには疎いので、計算表をそのまま利用したいと考えています。=入力の代入だけVBAで書いていきたいと思います。 ・その他、アドバイスなどいただければ幸いです。 よろしくお願いします。 Excel2010

  • エクセルVBAでコピーペーストを他ファイルへ

    同一フォルダにAとBのファイルがあり、 ファイルAに、CommandButtonを置き、押下することで、ファイルAのシートAのA1~Z1までをコピーし、 ファイルBを開かず、ファイルBのシートBのA1~Z1までにペーストするVBAを作成しようとしています。 ペースト先のファイルBを開かずに、ペーストしてくれるようなマクロを知りたいです。 エクセルは2002を使用しています。 ご教授お願いいたします。

  • VBAでの結合セルのコピー&ペースト

    こんにちは。 EXCELのVBAでマクロを作成しています。 セルの値のコピー&ペーストを行おうとしているのですが、結合されているセルのペーストのときに、「同じ結合セルが必要です」とエラーになってしまいます。 例えば、A1とA2が結合されたセル+A3をコピー Worksheets(x).Activate Range("A1:A3").Selection Range("A1:A3").Copy 別のシートで、B1とB2が結合されたセル+B3にペースト Worksheets(y).Activate Range("B1:B3").Paste セルの結合を解除すればうまくいきます・・・ セルを結合したままペーストしたいのですが、どうやら間違っているようです(ノ_・。) どなたか教えてください。 よろしくお願いします。

  • EXCEL VBA マクロ値 のコピーについて

    マクロの初心者です。EXCEL VBA でタイマーマクロを作成し、結果の値を他ファイルの  EXCELシートに貼り付けようとしたところ、2012/9/30 13:38が2008/9/29      13:38となり、-0:08:53が-0.00616898148・・・・となり、真値がコピーできません。どなたか教えていただけないでしょうか?

  • VBAについての質問です、お願いします。

    VBA初心者のものです。 Excelで毎日コピペが大変なので、VBAをネットで調べるもののまったく上手くいきません。 どうかシステムが得意な方、教えて頂けませんか? 要件は Bデータ.xlsとCデータ.xlsとDデータ.xlstとEデータ.xlsの各sheet1のA1からZ100セルの データをAデータ.xlsのsheet1に各データ順にコピー&ペーストしてならべたいのです。 イメージは、 Aデータのエクセルを開いて、マクロボタンを押す。 そうすると、各B・C・D・Eのエクセルが自動的に開いてそれぞれのsheet1のA1からZ100セル をコピーします。 各B・C・D・Eのエクセルが自動的に閉じます。 各B・C・D・Eのエクセルの各データが、 Aデータのsheet1に、すべてのデータが順にコピーされる手順です。 できれば、ファイルサーバーにエクセルを保存しているので、 その点も加味いただけると嬉しいです。 (初心者なので、マクロの構文を書いて頂ける場合に、ファイルとかシートを自分で 設定する場合があるときには、説明文を頂けると嬉しいです。) 以上、宜しくお願い致します。

  • VBA シートの違う特定のセルの値をコピーする

    エクセルVBA初心者です。 シート1の(A,1)にデジカメと表記があり、同じ行のB~Hの列にそれぞれの数字が入っていたとします。 それをシート2のA列の適当な行(例えばA,15)にデジカメという表記があった場合に、シート1の(B,1)~(H,1)の値をシート2の(B,15)~(H,15)にコピーする方法をご存じな方、教えて下さい。 単純なコピー&ペーストは「マクロの記録」で可能かと思いますが、シート2に「デジカメ」の項目があった場合に、シート1の元データから同じ「デジカメ」の項目を探しだし、コピーしたいのです。 なにぶん、初心者で勉強中なものですから、表記等適切でないものがありましたら申し訳ありません。

  • エクセルVBA初心者です

    参考書籍を教えてください 質問1 会社でエクセルマクロを使う機会が増えました。大抵のことはマクロの記録で対応してますが、細かいファイル操作が出来ません。VBAを勉強する必要があると思ってます。何か良い参考書はありませんか? 質問2 ブックAでマクロAを作りました。マクロAの中で、ブックBのマクロBを実行させてます。マクロBは、計算結果としてブックB上に新シートを作成し、終了します。その後、マクロAに戻りブックBの新シート上のセル2個を選択しコピーし、ブックAにてペーストさせようとしてます。 マクロAはブックA上で「マクロの記録」で作成しました。 実行させると、マクロBの終了時点でストップするようです。 何がマズイのでしょうか?

  • 【VBA】シートをコピー→任意セル値をシート名に

    大変お世話になります。 【Excel VBA】は全くの初心者です。 付け焼刃な質問がよろしくないことは重々承知しております。 が、どうしても『今』必要なため、皆さまのお知恵をお借りしたく 質問させていただきます。 このような動作をさせたい場合の、具体的なコードをご教示いただけませんでしょうか。 ------------------------------  組みたいマクロ ------------------------------ (1)数式が入った【原紙】Sheetの[B2~AA40]を、    同一ブック内の新規Sheetへ形式ごとコピー。 (2)(1)の新規Sheetの名前を、同シート内[B5]の入力値に変更。  < 補 足 >  ◎(1)で新規Sheetへコピーする際、数式は不要です。  ◎(1)でコピーする新規Sheetは任意の複数枚で、   名前となる[B5]値は重複しない予定です。  ◎(1)でコピーされる位置は、【原紙】Sheetの前を想定していますが、   最後尾への追加に変更になった場合は、どこを変更したらよいかも   併せてご教示いただけますと大変ありがたいです。 質問の仕方も、このような感じで伝わるのか不安なまま記載しています。 情報として不足がありましたら、そちらもご教示いただけますと有難いです。 よろしくお願いいたします。

専門家に質問してみよう