• ベストアンサー

Excel マクロについて

仕事の都合で以下のような仕様のマクロ(VBA)を緊急で作成しなければならなくなったのですが、どのようなコードになるんでしょうか? 仕様 ・今月分のデータを手入力すると先月分のデータと比較して、当月比を自動入力する。 ・当月比とは単純に先月分と今月分とのデータの差。 (例) ファイル1(先月分)     5%(0%) ファイル2(今月分) 手入力→6%(1%) 自分でもマクロについてあまり分かっておりませんので伝わりづらいと思いますが、何卒緊急のため、宜しくお願いいたします。

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

  • ベストアンサー
  • xkuonx
  • ベストアンサー率41% (23/56)
回答No.4

たびたびすいません。 マクロのソースが気に食わないので修正&ついでにファイル3からデータ読み込んでみました。 Sub hikaku()   Dim book As Workbook   Dim sheet As Worksheet   Dim other_book_data As Integer   Dim cnt As Integer   Dim total As Integer     '他ファイルを読み込み先月との比率を出力   Application.ScreenUpdating = False 'Openしたファイルがアクティブになるのを防止   Set book = Workbooks.Open(ThisWorkbook.Path & "\ファイル1.xls") 'カレントディレクトリからファイルを読み込む   Application.ScreenUpdating = True   Set sheet = book.Worksheets("Sheet1") 'シート名を指定する   other_book_data = sheet.Range("A1").Value '指定したセルのデータをother_book_data変数に保存     'ファイルから読み込んだ値を計算して出力   ThisWorkbook.Worksheets("Sheet1").Range("B2").Value = Range("A1").Value - other_book_data   book.Close 'ファイルを閉じる       '他ファイルを読み込みデータの計算   Application.ScreenUpdating = False 'Openしたファイルがアクティブになるのを防止   Set book = Workbooks.Open(ThisWorkbook.Path & "\ファイル3.xls") 'カレントディレクトリからファイルを読み込む   Application.ScreenUpdating = True   Set sheet = book.Worksheets("Sheet1") 'シート名を指定する     cnt = 1   total = 0   Do While True '無限ループ開始     other_book_data = sheet.Range("A" & cnt).Value '指定したセルのデータをother_book_data変数に保存     If (sheet.Range("A" & cnt).Value = "") Then       Exit Do 'データが尽きたら無限ループ終了     End If         'A4セルから下に向かって読み込んだデータを出力     ThisWorkbook.Worksheets("Sheet1").Range("A" & cnt + 3).Value = other_book_data     total = total + other_book_data     cnt = cnt + 1   Loop   ThisWorkbook.Worksheets("Sheet1").Range("A" & cnt + 3).Value = "合計:" & total   ThisWorkbook.Worksheets("Sheet1").Range("A" & cnt + 4).Value = "平均:" & total / (cnt - 1)   book.Close End Sub 参考にどうぞ。 ※コピーする場合全角スペースを半角スペースに変えてください あと補足。セルに「6%」って入力してEnterを押したら「6%(1%)」と表示を変えるのは関数だけじゃできないです。 マクロ使えば出来るかもしれませんが、 私だったら例えばA列をデータ用の列として利用するものとし、 A1に6%(又は0.06)と入力し、 B1=A1 & "(" & TEXT(A1-[ファイル1.xls]Sheet1!$A$1,"0%") & ")" のようにすると思います。A列を印刷したり見せたくなかったら非表示にすれば良いと思います。

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

その他の回答 (3)

  • xkuonx
  • ベストアンサー率41% (23/56)
回答No.3

>ただ、6%(1%)はひとつのセルに入れなければならないのですが、そういったことは可能でしょうか? A1=0.06 A2="(" & TEXT(A1-[ファイル1.xls]Sheet1!$A$1,"0%") & ")" ↓ A1=0.06 & "(" & TEXT(A1-[ファイル1.xls]Sheet1!$A$1,"0%") & ")" のように&でくっつけられます。 ただし、くっつけた場合A1セルのデータは数値ではなく文字列扱いとなるため、 6%という値を計算に使う事はできなくなります。 計算に使いたいのなら1列だけ作業用の列を決めてその列にデータを保存し、その列は非表示にすれば良いかなと思います。 >また、マクロを使って手入力部分を自動入力にする(ファイル3から数値を取ってくる)ことは可能でしょうか? 手入力部分を自動入力する、というのが抽象的で何がしたいのかあまりわかりませんが、 ファイル3の中から数値を取るのはNo2で回答しているマクロと同様にすれば可能です。 Sub hikaku() Dim book As Workbook Dim sheet As Worksheet Dim other_book_data As Integer Set book = Workbooks.Open(ThisWorkbook.Path & "\ファイル1.xls") ←ファイル1.xlsの部分が読み込むファイル名 Set sheet = book.Worksheets("Sheet1") ←ファイルの中の読み込むシート名 other_book_data = sheet.Range("A1").Value ←シートの中の読み込むセル ThisWorkbook.Worksheets("Sheet1").Range("B2").Value = Range("A1").Value - other_book_data ↑ここで実際にセル内容を書き換えてるので、ループなどを用いてファイル3から入力した値を順次書き出していけば良い End Sub

参考URL:
http://excelvba.pc-users.net/
すると、全ての回答が全文表示されます。
  • xkuonx
  • ベストアンサー率41% (23/56)
回答No.2

ちなみにマクロを使った場合は簡単ですが下記のような感じになるのかなと思います。 Sub hikaku() Dim book As Workbook Dim sheet As Worksheet Dim other_book_data As Integer Set book = Workbooks.Open(ThisWorkbook.Path & "\ファイル1.xls") Set sheet = book.Worksheets("Sheet1") other_book_data = sheet.Range("A1").Value ThisWorkbook.Worksheets("Sheet1").Range("B2").Value = Range("A1").Value - other_book_data End Sub

参考URL:
http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_070_11.html
すると、全ての回答が全文表示されます。
  • xkuonx
  • ベストアンサー率41% (23/56)
回答No.1

それはマクロでは無いとダメでしょうか? 普通に関数というか式を入力する事で簡単に出来ると思われます。 ▽ファイル1.xls ・Sheet1 A1=0.05 ※セルの書式設定をパーセンテージにする事により0.05は5%と表示されます ▽ファイル2.xls ・Sheet1 A1=0.06 A2="(" & TEXT(A1-[ファイル1.xls]Sheet1!$A$1,"0%") & ")"

suiken8
質問者

補足

回答ありがとうございます。 たしかにマクロである必要は無いのかもしれません。 ただ、6%(1%)はひとつのセルに入れなければならないのですが、そういったことは可能でしょうか? また、マクロを使って手入力部分を自動入力にする(ファイル3から数値を取ってくる)ことは可能でしょうか? 回答を頂いたうえ、あつかましいお願いであるとは承知しておりますが、宜しければご教授ください。

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

関連するQ&A

  • エクセルのマクロについて

     エクセル2000を使用しています。  先月使っていたファイルをコピーして、今月分のデータを新たに入力しようと思ったのですが、このファイルにはマクロが設定されており、コピーした新しいファイルではエラーメッセージが出てマクロが実行されません。  このエラーメッセージ通りセキュリティーレベルを変更したのですが、やはり同じエラーメッセージが出てマクロが実行されません。  そこで先月分のファイルからマクロ部分のみをコピーして張り付けてみました。  これによってマクロは実行されるものの、その実行にとても時間が掛かってしまいます。  これを解決する良い方法があったら教えて下さい。よろしくお願いします。  *当方は初心者ですので、できれば難解な専門用語は使わないで下さい。お願いします。

  • EXCELのマクロについて

    マクロについて質問させてください。 商品コード、商品名、ケース入数、ロケーション、WMS在庫数、実在庫数、在庫差異 の順でAからHまでデータがあります。 商品コード毎で1行ずつで全部で6000行程あります。 実在庫数と在庫差異以外は既にデータが入力されており棚卸を実施した後に実在庫数へ入力、関数を入れて在庫に差異があれば表示されるというようなものです。 但し、かなりのデータ量で1人での入力は時間が掛かりますので4名で入力業務を行うことになりました。 元のファイルをコピーし4名で入力し始めたのは良いのですが、入力し穴だらけになったらファイルを元のファイルに合算する方法がわかりません。 手作業では骨の折れる作業ですし、正確性に欠けます。 そこでマクロを使ってそれぞれの入力したファイルから元のファイルにデータが自動で移行するようにしたいのです。 以前、マクロを少しかじりましたが私の知識では作ることが出来ませんでした。 どなたかお力添え頂けると助かります。 宜しくお願い致します。

  • EXCEL マクロ・VBA 自動で連番を振る

    EXCELのマクロ・VBAについて質問です。 例えば、B列にデータを入力すると、入力した行まで自動的にA列に連番が入力されるようにしたいのですが、どういった方法があるでしょうか。 マクロやVBAについてはこれから勉強をしようと思っている素人ですので、コードとその解説をいただけると助かります。

  • Excel 2003のVBAマクロデータをExcel 2007で見たい

    Excel 2003のVBAマクロデータをExcel 2007で見たい。 Excel 2003でVBAマクロを登録したExcelファイルがありますが、今回、Excel 2007をインストールして、該当ファイルを開いたところ、「マクロデータを削除しました。」とメッセージが出て、VBEを起動してもマクロが見えなくなりました。OSはWindowsXP SP3です。Excel 2003で登録したVBAマクロをExcel 2007で削除されないで、次の2点について、可能にするにはどうすればよいか、ご教示願います。 (1)マクロデータを残す方法。 (2)マクロ起動する方法。

  • エクセルマクロについて

    いつもお世話になっております。 エクセルのマクロについて質問させていただきます。 仕事上測定した10回データを、エクセルで計算させ平均やσ出すという処理を毎回しているのですが、測定したデータというのが、csvファイルで10個できあがり、それを一つずつ開いては貼っての繰り返しをしています。 この作業をマクロで自動的に出来ないものかと思い質問させていただきました。 装置によって毎回.csvの前のファイル名が変る恐れがあるので、csvファイルの入っているフォルダ(ディレクトリを指定)を指定し、その中にあるcsvファイルを自動的に貼る事が出来る事が理想です。 VBAではこのような処理のサンプルプログラムがあるのですが、VBAはあまり解らないので出来ればマクロの記録からできればと思います。 宜しくお願い致します。

  • Excelのマクロ

    お世話になります。現在マクロを使って事務処理の簡素化を目論んでいる、しがない事務員です。 具体的に何をしたいかというと、 ・特定の文字を入力する(またはリストから選択する) ↓ ・ターゲットのセル(またはそのセルが含まれているコラム)の色が指定の色に変わり、先ほど選んだ特定の文字も自動的に入力される。 というふうにしたいのですが、極力マクロ操作だけでできるようにするのは可能でしょうか。VBAのコードがもし複雑でなければ、どのように書けばよいのか教えていただけないでしょうか。

  • EXCELのVBAマクロについて

    ExcelのVBAマクロを使って 度 sinθ cosθ sinθ+cosθのデータを表示する課題が出たのですがやり方が全く分からなくプログラムコードにも詳しくないため困っています。 教えていただけたらありがたいです。

  • EXCELのVBAでシートコピーをしたとき元のマクロを削除するには?

    VBAのマクロでシートのコピーをしたいのですが、元のシートにはVBAのコードが含まれています。コピーするのはデータだけのコピーが必要で、マクロ自体は必要ないのですが、それを削除するコードはどのように書いたらいいのでしょうか? どうしてもコピーしたファイルを開くと「マクロが含まれています」という確認メッセージが出てしまうのですが、それもなくしたいのです。 シートにフォームのボタンが配置されている場合も同様に、そのボタン自体をなくした状態でコピーを行いたいのですが・・・。プログラムで行うのは不可能なのでしょうか?

  • エクセルのマクロでこういったことはできますでしょうか。

    顧客管理で下記のようなことがしたいと思っています。 マクロ初心者なのですが、こういったことは可能でしょうか。 (1)事前に、顧客管理のデータ入力用ファイル(以下データファイル)、A、B、C、D、Eという定型ファイルを作成しておく。A~Eには、全て複数のシートが入っており、シート1にデータファイルに入力した情報が飛ぶようにしたい。 (2)データファイルに顧客情報「あ」を入力し、シート上に作成しておいたAという名のマクロボタンを押すと、Aのファイルのシート1に「あ」という情報が飛び、さらに、Aファイルは原本なので、“「あ」A”という名前の新しいファイルを作成できるようにしたい。 (3)同じように、データファイルに顧客情報「い」を入力して、今度はBというボタンを押したら、Bファイルのシート1に「い」という情報が飛び、“「い」B”という名前のファイルが新しく作成できるようにしたい。 非常にわかりにくい説明で申し訳ないのですが、これから自分でマクロやVBEを勉強しようと思っており、実際こういったことが可能なのかどうか、ご教示頂けますと幸甚です。何卒よろしくお願い致します。

  • VBAマクロを含んだEXCELファイルが開けません。

    どうも。 VBA初心者です。 VBAのマクロを含んだEXCELファイルを作成、保存したのですが、EXCELファイル自体が開けなくなってしまいました。 コードの内容は繰り返し制御の練習(WHILE LOOP)ですので、たいしたことはしていません。 原因がお分かりになる方は教えてください。

このQ&Aのポイント
  • ノートパソコンPC-NS350CARの起動画面で、色とりどりの横点線が表示され、動く状態が続いている。
  • 自動修復メッセージが表示され、先週は正常に動作していたが、エラーが発生したことに困惑している。
  • 再起動や充電は試したものの、正常に起動できない状況の解決方法を探している。
回答を見る

専門家に質問してみよう