• 締切済み

マクロについて

初めて質問させていただきます。 最近会社で、エクセルのマクロを使って作ってほしいと言われました。 が、マクロを使用したことがありません。 そこで、下記内容で作りたいのですが、よろしくお願いします。 1.シート1に製品名を入力すると、シート2にある製品データから、入力した製品名を検索し、   その仕様・型式・在庫数・価格等をシート1に表示する。 2.また、1.でシート1に表示した、製品名・仕様・型式・在庫数・価格等を改訂し、登録ボタン等   を押すことで、シート2の内容も改訂される。 マクロは「マクロの記録」を使用したことは何度かある程度です。 宜しくお願いします。

みんなの回答

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

こんばんは! 一例です。 方法だけ理解してもらえれば良いかな!って思っています。 Sheet1・Sheet2は↓の画像のような配置になっているとします。 Sheet1にコマンドボタンを配置しています。 まず、画面左下にある操作したいSheet見出し上で右クリック → コードの表示 → VBE画面が出ますので ↓のコードをコピー&ペーストして、A2セルのデータをあれこれ変更してみてください。 Private Sub Worksheet_Change(ByVal Target As Range) 'この行から Dim i As Long Dim ws As Worksheet Set ws = Worksheets("sheet2") If Target = Cells(2, 1) Then If WorksheetFunction.CountIf(ws.Columns(1), Target) Then i = WorksheetFunction.Match(Target, ws.Columns(1), False) With Target .Offset(, 1) = ws.Cells(i, 2) .Offset(, 2) = ws.Cells(i, 3) .Offset(, 3) = ws.Cells(i, 4) .Offset(, 4) = ws.Cells(i, 5) End With Else MsgBox "データがありません。" End If End If End Sub 'この行まで 次にコマンドボタンを配置 → デザインモードでコマンドボタンをダブルクリックすると VBE画面が出ますので、↓のコードをコピー&ペーストしてみてください。 (ダブルクリックした時点で、1行目と最終行の「End Sub」は表示されているはずですので実際は2行目以降のコードになります) Private Sub CommandButton1_Click() Dim i As Long Dim ws As Worksheet Set ws = Worksheets("sheet2") If WorksheetFunction.CountIf(ws.Columns(1), Cells(2, 1)) Then i = WorksheetFunction.Match(Cells(2, 1), ws.Columns(1), False) With ws.Cells(i, 1) .Offset(, 1) = Cells(2, 2) .Offset(, 2) = Cells(2, 3) .Offset(, 3) = Cells(2, 4) .Offset(, 4) = Cells(2, 5) End With End If End Sub これでSheet1のデータを変更してコマンドボタンをクリックするとSheet2のデータも変更されるはずです。 以上、参考になれば良いのですが・・・m(_ _)m

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

こういうのは一種のシステムを作ることで、VBAで知らなければならないことがありすぎる。またシステムというものに対する 心得(特に対使用者)も必要。 相当期間勉強しないと無理でしょう。 本件丸投げで、作ってくださいという形になってしまっている。 回答もコードを書いても、必要な前提智識が在りすぎて、説明も無理だと思う。 ーー 「もちゃ」のようなのを、簡単に出来る範囲で上げておく。他の人なら、こうはしないかもしれない。 Sheet1 ネジ1 仕様 型式 在庫数 価格 連番 a 23 30 45 1 コマンドボタンを1つ貼り付け ーー Sheet2 データ 品名 仕様 型式 在庫数 価格 連番 ネジ1 a 23 30 45 1 線2 b 12 40 250 2 ワッシャ1 c 21 20 28 3 ーーーーーーーーーー Sheet1のシートモジュールに Private Sub CommandButton1_Click() x = Worksheets("Sheet1").Range("E3") + 1 Worksheets("Sheet2").Cells(x, "B") = Worksheets("Sheet1").Range("A3") Worksheets("Sheet2").Cells(x, "C") = Worksheets("Sheet1").Range("B3") Worksheets("Sheet2").Cells(x, "D") = Worksheets("Sheet1").Range("C3") Worksheets("Sheet2").Cells(x, "E") = Worksheets("Sheet1").Range("D3") End Sub ーー Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$A$1" Then Exit Sub MsgBox Target r = Worksheets("sheet2").Range("A:A").Find(Target.Value).Row MsgBox r Worksheets("Sheet1").Range("A3") = Worksheets("Sheet2").Cells(r, "B") Worksheets("Sheet1").Range("B3") = Worksheets("Sheet2").Cells(r, "C") Worksheets("Sheet1").Range("C3") = Worksheets("Sheet2").Cells(r, "D") Worksheets("Sheet1").Range("D3") = Worksheets("Sheet2").Cells(r, "E") Worksheets("Sheet1").Range("E3") = r - 1 End Sub ーー A1セルに品名を入れると、Sheet1の第3行目にSheet2の該当行の内容が現れる。 項目データを変更して、コマンドボタンをクリック。 Sheet2の該当行に変更が反映される。 ーーー 「おもちゃ」とは 入力チェックがなされていない。入力品目が見つからなかった場合など。 変更のみカバー。追加・抹消は略。 普通はSheet1に替えて、ユーザーフォームでも使うのかもしれないとおもう。

pomesatsuki
質問者

お礼

ありがとうございました。 申し訳ありません。本件、丸投げのつもりはありません。 当然、勉強するのは当たり前だと考えていますし、本件が全てではありません。 一つのトリガーにさせていただくつもりでした。

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

作成例1: シート1のA1セルに製品名を記入すると シート2のA列を検索して 同じ行のBCD列のデータをシート1のA2,B2,C2セルに転記する。 ALT+F11を押して現れた画面で挿入メニューから標準モジュールを挿入し,下記をコピーする sub macro1()  range("A2,B2,C2").clearcontents  if application.countif(worksheets("Sheet2").range("A:A"), range("A1")) = 0 then  msgbox "not found"  exit sub  end if  range("A2").formula = "=VLOOKUP(A1,Sheet2!A:D,2,FALSE)"  range("B2").formula = "=VLOOKUP(A1,Sheet2!A:D,3,FALSE)"  range("C2").formula = "=VLOOKUP(A1,Sheet2!A:D,4,FALSE)"  range("A2").value = range("A2").value  range("B2").value = range("B2").value  range("C2").value = range("C2").value end sub シート上にオートシェイプの図形などを配置して「検索」とテキストを記入しておき,右クリックしてマクロの登録で上記マクロを登録する 作成例2: シート1のA1に製品名を記入し それがシート2のA列にあれば,  同行のBCD列の値を現在のA2,B2,C2の値で更新する それがシート2のA列に無ければ  新しい行のABCD列にデータを追記する 標準モジュールに次のマクロを追加する sub macro2()  dim r as long  if application.countif(worksheets("Sheet2").range("A:A"), range("A1")) = 0 then   r = worksheets("Sheet2").range("A65536").end(xlup).offset(1).row  else   r = application.match(range("A1"), worksheets("Sheet2").range("A:A"), 0)  end if  worksheets("Sheet2").cells(r, "A") = range("A1").value  worksheets("Sheet2").cells(r, "B") = range("A2").value  worksheets("Sheet2").cells(r, "C") = range("B2").value  worksheets("Sheet2").cells(r, "D") = range("C2").value end sub オートシェイプなどで「登録」ボタンを作成し,上記マクロを登録する。 #丸投げの作成依頼ならそれらしく,上述の書きぶりなど参考に「どこ列どこ行どこ番地にどんな内容でデータが記入している」といった情報を,具体的に「あなたのエクセルが目に見えるように」説明するようにしてください。 とはいえ上述のマクロはどんな具合にシートを作製したいのか不明なので,わざと1行ずつ効率の悪い検索や転記の仕方をしています。具体的な情報が最初からあれば,もっと手間の要らないクールな書き方をしますが,お手前で自作する参考にはなるはずですので,頑張って自作してください。 #A1に記入しただけで自動実行するような作り込みも可能ですが将来の課題として,いまは最低限ヤリタイ事が実現できるマクロをご自分で完成してください。

pomesatsuki
質問者

お礼

ありがとうございます。 情報不足、反省しています。 また、本件丸投げのつもりはありません。 ただ、取っ掛りが欲しかっただけでした。

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

関連するQ&A

  • EXCELのマクロについて

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

  • ExcelのVBAマクロ作成で他のExcelから条件つきでデータを取り込みたい

    毎日の在庫データが記載されたファイル群の中から特定のデータのみを他のファイル(貼付け先ファイル)の一つのシートに縦一列にして取り込みたいのですがどうすればよいのでしょう? 具体的には… ・在庫データは年ごとにファイルが分かれている(ファイル名「在庫2003年.xls」など) ・在庫データファイルは月ごとにシートが分かれている(シート名「2003年04月」など) ・シートの中のA列に「日付」(上記のシートなら2003/4/1から2003/4/30まで)、D列に「製品A在庫数」、F列に「製品B在庫数」が入力されており他の列にも様々なデータが入力されている。 ・貼付け先ファイルはA列に日付(2000/1/1~2006/12/10)が入力されている。 この状況で、例えば2003年4月と指定してマクロを実行すると、指定の在庫データファイルのシートから「製品A在庫数」と「製品B在庫数」を貼り付け先ファイルの、日付に対応したB列、C列の部分に入力してくれるようにしたいのですが、VBAの記述の仕方がわかりません。どうすればよいのでしょう? お願いします!

  • Excelで構成表の作成

    会社で急遽棚卸表をつくることになり、マクロや関数などほとんど触ったことがなかったので困っています。 どなたか教えてください。 まずシート1には製品リストが表記されています シート1 製品番号 製品名 在庫数 ○○○   ○○    ○○ ×××   ××    ×× △△△   △△    △△ シート3以降にはその製品を作るための材料が展開されています シート3以降のシート名については製品番号になっています シート3~(製品番号) 材料番号 材料名  使用数 ○○○   ○○    ○○ ×××   ××    ×× △△△   △△    △△ 上記の状態からシート1の在庫数に数を入力すると シート3以降の構成表よりその製品に使われる材料の使用数を導き出し その材料が実際に何個あるかをシート2へとまとめたい。 また製品毎に同じ材料を使用している場合については 合算して表記したい。 自分で試してみましたが 締切が押し迫り、どなたかのお力添えをいただきたいです。 プログラムの理解度はVBはないですがPerl、PHPについては触ったことがある程度です。 マクロでもなんでも結構ですのでご教授願います。

  • excel、マクロについて教えてください。

    excel、マクロについて教えてください。 excelのマクロでシートを追加してシート名を変更し棚卸しに変更する内容を記録したのですが、 excelをずっと使用していてシートを追加していくとsheet1、sheet2と語尾の数字が増えていってしまい、マクロが正常に動作しません。 excelのシートを追加した際に必ずsheet1で追加する方法、若しくはマクロを記録した時はsheet1の名前を変更だったがsheet2でもsheet3でも動作するようなコードは存在しますか? 最近マクロをやり始めた初心者なので、質問が下手かもしれませんがどなたかお分かりになりましたら 教えていただけませんか?よろしくお願いします。

  • エクセルマクロについて教えてください。

    製品リストというシートと、発注リストという2つのシートがあります。 製品リストのシートには、A列に製品名、B列に在庫が入力されています。 発注リストのシートには、A列に製品名、B列に値段、C列には発注状況が入力されます。(C列は発注完了と発注取消の2項目のリスト選択となっています) 発注リストのシートのC列に発注取消と入力された場合に、発注取消と入力された行にある製品名をを、製品リストシートのA列内を探し、同じ製品名の入力されたセルに色を付けたいです。 例えば 発注リストシートのA5に ココナッツミルク B5に 100円と入力されており、C5に 発注取消 と入力した場合に 製品リストシートのA列にある ココナッツミルク と書かれたセルを赤色にしたいのですが、 どのようなマクロにすれば良いのでしょうか? どなたが教えていただけると助かります。

  • エクセルのコピー貼り付けマクロ

    EXCEL2003を使用しております。 用品の使用記録簿を作っております。 Sheet”入力”で日付や社員名や品目を入力し、(登録)のマクロボタンを押せばSheet”集計”(約100行)に1行目から順次貼りつく表を考えているのですが、うまくできません。 ご存知の方は、教えてくださいお願いいたします。

  • エクセルのフォームについて教えてください。(マクロ記録)

     エクセルにレコードを入力するのにフォーム機能を使用し、その手順をマクロに記録したいのですが、うまくいきません。(エクセル2000使用)  シートの一部分(表自体はA列からQ列まであるのですが、入力部分はI列まで)にレコードを入力するので入力部分を範囲指定し、フォーム機能を使用したいのです。  マクロに登録しなければフォーム画面に入力したい項目が全て表示されるのですが、それをマクロに登録して、それを実行すると、入力項目がA列の部分しか表示されません。入力するたび範囲指定するのが面倒なのでマクロに記録させたいのですが・・・。  マクロの内容はこんな風になってたんですけど。どなたか教えてください。お願いします。 「 Range("A1:I149").Select  ActiveSheet.ShowDataForm 」

  • エクセルマクロを教えてください

    エクセル2003を使用しています。ブックに1シートあります。シート名は「C3」セルに入力してある日付にしますが、シート上の表示形式は「平成20年1月」となっているところをシート名は「08-01」にします。その後シートを11枚コピーし、それぞれのシートの「C3」セルに年月を入力し、シート名を「08-02」「08-03」・・・「08-12」としたいのですが、うまくいきません。 マクロに詳しい方のご指導をお願いいたします。

  • エクセルでシートを追加するマクロについて

    マクロ初心者ですよろしくお願いします エクセルでシート1は名前などの入力用、シート2はフォーム用として作成しております シート1のA1から最大でA20(変動あり)に名前を入力すると名前の数だけシート2のコピーが追加され、シート名も入力した名前に変更する場合のマクロはどうすれば良いのでしょうか? またシート2のB1にも入力した名前を表示させたいです ご教授お願いいたします

  • Excelのマクロについて

    Excelのマクロについて excel2003で,マクロの自動記録を勉強中です。 [ツール]-[マクロ]-[新しいマクロの記録]でマクロ名を入力し,(マクロの保存先を「作業中のブック」として,)[OK]をクリックすると マクロの記録が始まります。 マクロの記録終了後, [ツール]-[マクロ]-[マクロ]で「マクロ」ダイアログボックスを見ると,マクロ名が表示されます。 この場合は実行も正常にできます。 しかし, ブックを一旦保存した後,開いて,マクロを実行しようと, [ツール]-[マクロ]-[マクロ]で「マクロ」ダイアログボックスを見ると,マクロ名が(マクロ名単独ではなく)ブック名とともに表示されます。 実行するとエラーになります。 何が悪いのか分かりません。なにか基本的なミスがあるのかも知れないと考えました。 原因(ミス)に心当たりのあるかた,是非教えてください。

専門家に質問してみよう