• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルマクロの質問。値の変更のイベントについて)

エクセルマクロの質問。値の変更のイベントについて

このQ&Aのポイント
  • エクセルマクロの質問。値の変更のイベントについて
  • 商品受注表で商品マスターのデータを自動入力するためのエクセルマクロの作成方法について質問です。
  • また、注文総数と各社の受注数を手入力したときに、合計とチェックの計算が自動的に行われるようにする方法も教えていただきたいです。

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

  • ベストアンサー
  • mimeu
  • ベストアンサー率49% (39/79)
回答No.1

自動化  ボタンを押せば狙い通りに動くようですので、商品コードを入力すれば ボタンを押さなくても動いてほしい、というご質問だとしてお答えします。 Worksheet_Change イベントを処理すればイケます。 こんな感じです。   Private Sub Worksheet_Change(ByVal Target As Range)     MsgBox Target.Address   End Sub もし商品コードの文字数が一定であれば、バカよけのために   If LEN(Target) <> 8 Then Exit Sub などとすればよいでしょう。 ご存じと思いますが、『Private Sub Worksheet_Change(ByVal Target As Range)』 を表示するにはコード編集画面上部の二つのコンボボックスを使います。 またこのコードはシート2(入力用)のコードペインに書きます。 エラー処理 エクセルのヘルプでは    検索の型に FALSE を指定すると、検索値と完全に一致する値だけが検索され、    見つからない場合はエラー値 #N/A が返されます。 とありますので、最初の VLOOKUP の直後に    ワークシート関数の TYPE(Range("B" & 行))=16    またはVBA関数の VARTYPE(Range("B" & 行))=vbError でテストできます。

2990kg
質問者

お礼

mimeu様、回答ありがとうございました。 Worksheet_Change イベントを使ってみたら自動化できました。 感激です! しかし・・・ 商品マスターにないコードを入れた場合の処理が上手くできませんでした・・(文字数は一定ではないのです) しかし、とてもよいヒントをいただけましたので、少し自分でがんばってみます。 お礼が遅くなり申し訳ございませんでした。 とても参考になりました。

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

関連するQ&A

  • Excel マクロ

    マクロで一部分だけ範囲選択をかけたいのですが、 A列から指定行までと1行目の最右列までを範囲選択をしたいのですができるのですか? 出来ましたら、コードを教えてください。 コードの記述は下のとおりです。 Range("A1").Select Range(Selection, Selection.End(xlDown)).Select a1 = Range("xfd1").End(xlToLeft).Select Endcolumn = Application.WorksheetFunction.Max(a1)

  • InputBoxの値で検索して転記するマクロ

    1.InputBoxを3回表示させます。 2.ユーザーに入力してもらいます。 入力できるのは半角英数字のみでそれ以外は エラーメッセージを出したいです。 3.1回目は18桁か22桁以外の場合、 2回目と3回目は4桁以外の場合はMsgBoxを表示して 再入力を促します。 4.InputBoxに入力された値の3個を連結した値で Sheet2のA列を検索して 合致したらその行のG列の値を見ます。 5.G列に"済"とあったら MsgBoxを表示して 中止するか継続するか判断します。 6.継続した場合 その該当行の各列の値をSheet1にそれぞれ転記します。 Sheet2の該当行のB列→Sheet1のセルB3 Sheet2の該当行のC列→Sheet1のセルC3 Sheet2の該当行のD列→Sheet1のセルD3 Sheet2の該当行のE列→Sheet1のセルE3 Sheet2の該当行のF列→Sheet1のセルF3 7.かつSheet2の該当行のG列に 済 と転記します。 すでに済が記入されている場合は上書です。 以下のように作成しましたがエラーで動かなくて動作確認が出来ません。 どう直せばいいのか教えてください。 イレギュラー時の対応処理が必要だとも思うのですが動作しない為 思いつきません。 記述が滅茶苦茶なのですがこれが限界です。申し訳ありません。 Sub 表示板作成() Dim 検索値1 Dim 検索値2 Dim 検索値3 Dim 検索値4 Dim 判定値 Dim 判断 Dim 記録 Dim 確認 検索値4 = 検索値1&検索値2&検索値3 Do 検索値1 = Application.InputBox("型番を入力してください") If Len(検索値) < 18 Then MsgBox "18桁未満です。再入力しますか?" Loop Else Exit Do '検索値2と3も上記と同じ記述をここへ入れる '(現在省略) End If 判定値 = Application.WorksheetFunction.VLookup(検索値4.Value, Worksheets("Sheet2").Range("A2:G10000"), 7, 0) If 判定値 = "済" Then 判断 = MsgBox("発行済みです。再度データ取得しますか?", vbYesNo) Else Select Case 判断 Case vbNo Exit Sub Case vbYes Range("B3").Value = Application.WorksheetFunction.VLookup(検索値4.Value, Worksheets("Sheet2").Range("A2:G10000"), 2, 0) Range("B4").Value = Application.WorksheetFunction.VLookup(検索値4.Value, Worksheets("Sheet2").Range("A2:G10000"), 3, 0) Range("B5").Value = Application.WorksheetFunction.VLookup(検索値4.Value, Worksheets("Sheet2").Range("A2:G10000"), 4, 0) Range("B6").Value = Application.WorksheetFunction.VLookup(検索値4.Value, Worksheets("Sheet2").Range("A2:G10000"), 5, 0) Range("B7").Value = Application.WorksheetFunction.VLookup(検索値4.Value, Worksheets("Sheet2").Range("A2:G10000"), 6, 0) End Select End If 記録 = Application.WorksheetFunction.VLookup(検索値4.Value, Worksheets("Sheet2").Range("A2:G10000"), 7, 0) 記録.Value = "済" 確認 = MsgBox("これは●●用です。いいですか?", vbYesNo) Select Case 確認 Case vbNo Exit Sub Case vbYes Call 印刷 End Select End Sub

  • エクセルマクロ offsetの使い方

    Sub tess() With Worksheets("Sheet1") Cells(1,11)=Application.WorksheetFunction.Max(Range("A1:A10")) End With End Sub 上記でA1~A10のうちの最大値1つがA12に表示されます。 ここで上記コードに手を加えて、例えばA12にA8の”下のセル1つの値”を表示したいのですが、 Cells(1,11)=offset.(-1, 0).Application.WorksheetFunction.Max(Range("A1:A10")) と”offset(-1, 0)” を加えても動きません。WorksheetFunctionを加えても動きません。 offsetを入れる位置と使い方がわかりません。是非よろしくお願いいたします。(OS:WindowsXP、Excel2003)

  • 【マクロ】値貼り付けに変更するには…?

    当方Excel2003です。 ○フォルダ内に入力用のブック(複数)とまとめ用ブック(一つ)が存在し ○すべてのブックにはシートが一つしかなく、タイトル行の位置はまとめブック含めすべて同じ構成である ○入力用ブックのシート名は「入力」、まとめ用ブックのシート名は「まとめ」である 前提で、入力用ブックのデータ入力域をまとめ用ブックに順次コピーをしようと作成中のものですが、 以下の構文 Set c = .Range("B" & .Rows.Count).End(xlUp).Offset(1) あるいは With .Worksheets(入力).Range("B3:H3" & Range("H65532").End(xlUp).Row).Copy Destination:=c の部分について コピー貼り付け(そのまま)ではなく、 「値のみの貼り付け」に変更するには? どういうふうに変更したら良いのか どなたかご教示いただければ幸いです。 よろしくお願いいたします。 Sub 連続貼り付け() Dim sFile As String Dim c As Range Dim myPAth As String Application.ScreenUpdating = False sFile = Dir(ThisWorkbook.Path & "\*.xls", vbNormal) myPAth = ThisWorkbook.Path Do While 0 < Len(sFile)      With ThisWorkbook.Worksheets("まとめ")       Set c = .Range("B" & .Rows.Count).End(xlUp).Offset(1)      End With     Select Case sFile        Case ThisWorkbook.Name:        Case Else          With Workbooks.Open(Filename:=myPAth & "\" & sFile, ReadOnly:=True)              With .Worksheets(入力)                  .Range("B3:H3" & Range("H65532").End(xlUp).Row).Copy Destination:=c              End With             .Close SaveChanges:=False          End With      End Select      sFile = Dir()      Set c = Nothing   Loop   Application.ScreenUpdating = True   End Sub

  • エクセルのマクロで結合セルに値を貼り付けたい

    お世話になります。 マクロ初心者で本やネットで色々調べたのですが分からないため 教えていただけますと幸いです。 Sheet1にはB1:B3、B4:B6…と3行縦に結合された表があり、 Sheet2のA列には単独セルに商品の名前が入っております。 膨大な量のため、Sheet2のA列に入っている情報を Sheet1の縦に結合されたセルに一つずつマクロで転記したいと 考えております。 Range("B1:B100").Value = Range("A1:A100").Value のように記載すると、2個飛ばしで入力されてしまうので、 結合されている分飛ばされないで一つずつ転記したいのですが どのようにしたら良いでしょうか。

  • マクロをすっきりさせたい・・・

    いつもお世話になっております。 下記、マクロを組んだのですが、 簡潔にまとめるには、どうしたら良いでしょうか・・・ 宜しくお願い致します。 Set 範囲 = Workbooks("A.xls").Worksheets("マスター").Range("A2:G4000") ThisWorkbook.Activate 列番号 = 7 検索値 = (Worksheets("B").Range("B24")) Range("D14").Value = WorksheetFunction.VLookup(検索値, 範囲, 列番号, False) Set 範囲 = Workbooks("A.xls").Worksheets("マスター").Range("A2:G4000") ThisWorkbook.Activate 列番号 = 7 検索値 = (Worksheets("B").Range("B25")) Range("D15").Value = WorksheetFunction.VLookup(検索値, 範囲, 列番号, False) Set 範囲 = Workbooks("A.xls").Worksheets("マスター").Range("A2:G4000") ThisWorkbook.Activate 列番号 = 7 検索値 = (Worksheets("B").Range("B26")) Range("D16").Value = WorksheetFunction.VLookup(検索値, 範囲, 列番号, False)

  • エクセルで簡単なマクロを組んだのですが…。

    連続印刷を行う簡単なマクロを組んだのですが、指定行を変更しても1行目からまた印刷されてしまうのですがどうしてでしょうか?ちなみにこんなマクロです。 'リストを1行1枚の伝票形式で印刷するマクロ Sub 個票発行() Worksheets("個票").Activate Dim 個票カウンタ As Integer For 個票カウンタ = 1 To _ Application.WorksheetFunction.CountA(Worksheets("一覧表").Range("A1:A88")) Range("B1") = 個票カウンタ 印刷 Next 個票カウンタ End Sub よろしくお願いいたします。マクロ初心者です。

  • エクセルの特定のセルの値が変化したらマクロを自動実行させたい。

    エクセルの特定のセルの値が変化したらマクロを自動実行させたい。 エクセルにてシート1のB5に英数字を入力すると シート2のA列を検索し同じ値があるとその行のB列にある値をH6に表示をします。  【例】   シート1のB5に「A5684」と入力   シート2     A   B   1:A5682 パイン    2:A5683 リンゴ   3:A5684 バナナ   シート1のH6に「バナナ」と表示される シート2のA列にない場合はメッセージボックスで「データがありません」と表示します。 またシート3のA1に数字を入れておき、以下のマクロ、  'Sheet3から印刷すべき連番を獲得します。 Worksheets("Sheet3").Select Range("A1").Select 番号 = ActiveCell 連番 = "A" & Application.WorksheetFunction.Rept("0", 5 - Len(番号)) & 番号  'Sheet3の番号セル「B1」を更新します 番号 = 番号 + 1 ActiveCell.FormulaR1C1 = 番号  'Sheet1のセル「H7」欄に連番を表示します。 Worksheets("シート3").Select Range("B1").Select ActiveCell.FormulaR1C1 = 連番 Worksheets("シート1").Select Range("H6").Select '調べたいセルを記入 If IsError(ActiveCell.Value) Then errval = ActiveCell.Value Select Case errval Case CVErr(xlErrDiv0) MsgBox "#DIV/0! エラー" Case CVErr(xlErrNA) If vbOK = MsgBox(" データがありません") Then Exit Sub End Select End If Sheets("シート1").PrintOut Copies:=1 Range("B5").Select Selection.ClearContents '消去 Range("B5").Select End Sub でシート1のH7に(=シート3!B1)として 印刷ごとに1、2、3、と連番を入れています。 フォームで作成したボタンを押すとH6とH7の値が印刷されます。 そしてB5の値がDeleteされ(よってH6は#N/Aとなる) B5にカーソルが行って入力待ち状態になるようにしてあります。 これで、シート1のB5の値が変化又はH6が変化したら 印刷ボタンを押して印刷ではなく自動印刷されるように出来ますか? Private Sub Worksheet_Change(ByVal Target As Range)  If Target.Column = B And Target.Row = 5 Then を使いましたが 「コンパイルエラー」とか Targetの所が色つきになって「End Sub」が必要です。 となってうまく出来ません。 お願いします。

  • マクロ記述の意味

    下記のようなマクロがかかれているのですが 記述の意味がわかりません。 教えてください。 Dim h On Error Resume Next Sheets("滞留在庫表").Select With Application.WorksheetFunction For h = 2 To Range("C9999").End(xlUp).Row Cells(h, "V") = "****" Cells(h, "V") = .VLookup(.Replace(String(18, "?"), 8, 1, Mid(Cells(h, "C"), 8, 1)), _ Sheets("表示再設定マスタ").Range("A5:B22"), 2, False) Next h End With

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

    最終行の1つ下の行に100000と入力したいですが Range("b65536").Select Selection.End(xlUp).Select ActiveCell.Offset(0, 1).Value = 100000 としてもうまく行きません Selection.End(xlUp).Select この部分だけで なんとかなるのでしょうか よろしくお願い致します

専門家に質問してみよう