• 締切済み

工程表作成を上司から急ぎで頼まれてますが・・

OS: ウィンドウズ8 エクセル2010にて工程表を作成中です。ある作業が選択されたら、すぐに別のシート(シート名:仕分け作業)に その発生した日付が飛ぶようにしたいのですが、お知恵を拝借できますでしょうか 画像では、6工程のみ載せてますが、実際には、A3仕様で24工程になります。工程は、左右上下しますので選択にて矢印を決めるように作成してあります。 この中の作業内容はドロップダウンにて50種程から選択できるようになってます。その50種中の一作業(仕分け作業)が選択された時点で、その実行日が別シート(仕分け作業) の1セル(仮:A1)に飛ぶようにしたいのですが、ここで、問題なのは、24工程あるうちのどの段階で仕分け作業が選択されるかわからないのです。 その場合の公式を教えて頂けたら、とても助かります。 一旦は上司に提出したブックなのですが、更正が入りまして・・・そのようにしてくれといわれましても・・・・私の技能ではとうてい叶いません。どなたかお詳しい方宜しくお願い致します。 とりあえず、はじめの縦列の8工程で試してみようと・・・ネットで、調べながら作ってみた公式なのですが、やはり、エラー(RangeクラスのSelectプロパティを取得できません。)表示が出ます。仕分け作業シートに飛び、指定のセルまでは、行くのですが・・・その先で悩んでます。 間違いを教えていただけないでしょうか。 'シート1に何らかの変更が行われる度に発動します Sub Worksheet_Change(ByVal Target As Range) 'もし変更されたセルがE11~E63,M11~M63,U11~U63で入力された値が"仕分け作業"だったら If (Target.Range("E11:E63,M11:M63,U11:U63").Select And Target.Value = "仕分け作業") Then 'シート6をアクティブにして Sheet6.Activate 'シート6のC2に、変更されたセルのB14,B21,B28,B35,B42,B49,B56,B63のデータを入れる Sheet6.Range("C2").Value = Cells(Target.Range("B14,B21,B28,B35,B42,B49,B56,B63").Select) End If '該当しなかった場合は何もしない End Sub 補足: Sheet6.Range("c2").Value = Range("B14,B21,B28,B35,B42,B49,B56,B63").Value にすると仕分け作業シートに飛んで日付も入るのですが、はじめのB14しか有効ではありません。

みんなの回答

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

>変更されたセルがE11~E63,M11~M63,U11~U63 >変更されたセルのB14,B21,B28,B35,B42,B49,B56,B63のデータ この2つはどういう事? >変更されたセルのB14,B21,B28,B35,B42,B49,B56,B63のデータを入れる これを優先させるなら >変更されたセルがE11~E63,M11~M63,U11~U63 この範囲を調べるのはおかしいし、 この範囲を有効にするなら 変更されたセルと代入元のセルとの関係が見えてこないよ?

greenisland2013
質問者

補足

ありがとうございます。解決いたしました。

関連するQ&A

  • EXCELでの工程表の作り方を教えてください

    EXCELは簡単な関数しか使えない者です。 この度下記のような工程表を作成することになり、 検索しましたがなかなか思うような例がありません。 関数・マクロに詳しい方、どなたかご教授願えませんでしょうか。 (利用環境はExcel2003です) (1)A1のセルに「入力規則→リスト」で担当地区を選択するようになっている (2)A4~A200のセルに、細分化した作業工程の明細が段階毎に入力されています。 (3)B4~B200のセルは「入力規則→リスト」で”未処理”と”処理済”を選択するようにしています。 今回の要望はB列のセルを”処理済”にした段階で、 同じ行のC列に、A1で選択している担当地区をコピーし、 同時にD列に”処理済”に変更した年月日時間を入力したいのです。 色々調べてIF関数で挑戦してはみたものの、 A1セルを変更した段階で今までの作業工程も 全て更新されてしまいます。 マクロ・関数で実現可能であればご教授いただきたいです。 宜しくお願いいたします。

  • エクセルで工程表

    エクセルで工程表を作りたいです。 C1に第1工程の開始時間1220(12:20という意味) C2に第1工程の終了時間1240(12:40) C3に第2工程の開始時間1300(13:00) C4に第2工程の終了時間1325(13:25)        : という感じで約10工程まであります。 シート2は各セルを細かくしてあって、A5を12:00とし横軸に時間をとっています(5分刻み) 第1工程の12:20から12:40まで、つまりE5からI5までを黒くしたいです。 同じように第2工程13:00から13:25までのセルを黒く・・・ 関数では難しいと思うので、VBAでもかまいません。 何かいい方法がありましたら、教えてください。 よろしくお願いいたします。

  • エクセル VBA シートの選択 

    windows XP でエクセル2000を使っています。 Sub aaa() Sheets("Sheet1").Select Dim a As String a = Cells(2, 4) Sheets(a).Select Range("A1").Select End Sub というマクロだと セルに入っている値のシート名を探してくれます。 ですが Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) If Intersect(Target, Range("B11:b683")) Is Nothing Then Exit Sub Worksheets("Sheet1").Range("C2").Value = Target.Value Dim b As String b = Range("C2).value (←ここをcellsにしてもダメ) Sheets(b).Select Range("A1").Select End Sub これだとsheets(b)を選びません。Sheets(b).Selectのところが黄色くなります。 何処が間違えているのでしょうか。 全くの素人ですが、仕事で必要に迫られています。 わかりやすく回答・解説くれると助かります。

  • VBA のエラーがわかりません・・・w

    Sub Worksheet_Change(ByVal Target As Range) Dim 初期値 As Integer Dim 増減値 As Integer Select Case Target.Address Case "$C$5" Select Case Target.Value Case 1 Range("C6").Value = 24 Range("D5").Value = 600 Range("D6").Value = 0 Range("E5").Value = 400 Range("E6").Value = 0 Range("B7").Value = "★1 MaxAttackPoint:700 / MaxDeffencePoint:900" Case 2 Range("C6").Value = 32 Range("D5").Value = 1000 Range("D6").Value = 0 Range("E5").Value = 500 Range("E6").Value = 0 Range("B7").Value = "★2 MaxAttackPoint:1100 / MaxDeffencePoint:1300" End Select Case "$D$5" Select Case Range("C5").Value Case 1 初期値 = 600 Case 2 初期値 = 1000 Case Else Exit Sub End Select If Target.Value < 初期値 Then 増減値 = 4 Else 増減値 = 8 Range("D6").Value = (初期値 - Target.Value) / 100 * 増減値 Case "$E$5" Select Case Range("C5").Value Case 1 初期値 = 400 Case 2 初期値 = 500 Case Else Exit Sub End Select If Target.Value < 初期値 Then 増減値 = 4 Else 増減値 = 8 Range("E6").Value = (初期値 - Target.Value) / 200 * 増減値 End Select End Sub Sub Worksheet_Change(ByVal Target As Range) Select Case Target.Address Case "$F$5" Select Case Target.Value Case "炎" Range("F6").Value = 4 Case "水" Range("F6").Value = 4 End Select   Case "$G$5" Select Case Target.Value Case "ドラゴン" Range("G6").Value = -8 Case "海竜" Range("G6").Value = -8 End Select Case "$H$5" Select Case Target.Value Case "ドラゴン" Range("H6").Value = -16 Case "海竜" Range("H6").Value = -16 End Select Case "$I$5" Select Case Target.Value Case "○" Range("I6").Value = 40 Case "×" Range("I6").Value = 0 End Select End Select End Sub とあるカードゲームのステータス決定を行う為に組まれたマクロです。 作成者は私だけではないのですが、もう何回もしつこく質問をしているため 気が引けてしまい、こちらで質問することにしました・・・w   エラー内容は 2つ目のSub Worksheet_Change(ByVal Target As Range)の 「Worksheet_Change」の名称が間違っています。 という事でした。何を入れればいいのかサッパリです(;´ω)   エラーの改善方法について教えてください。 宜しくお願いします

  • excel|シートのリンク方法について

    いつもお世話になります。 エクセルは2010を利用しています。 現在、下記のコードで、文字揃えを制御しています。 A1~C1は、それぞれセルが結合されています。 ---------------------------------------------------------- Sub HorizontalAndVerticalAlignmentSamp1() If Range("B1").Value = "" Then With Range("C1") .HorizontalAlignment = xlHAlignRight End With Else With Range("C1") .HorizontalAlignment = xlHAlignLeft End With End If If Range("A1").Value = "" Then With Range("B1") .HorizontalAlignment = xlHAlignRight End With Else With Range("B1") .HorizontalAlignment = xlHAlignCenter End With End If End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Range("A1:C1") <> "" Then Call HorizontalAndVerticalAlignmentSamp1 End Sub ------------------------------------------------------------------------- シート2、シート3は、A1~C1のセルがシート1とおなじように結合されています。 シート1で、A1~C1に文字を入力したら、おなじ文字と文字揃えがシート2、シート3でも反映、シート1で、A1~C1に入力されていた文字を削除すると、シート2、シート3も消えているようにしたいです。 わたしの知っている限りの範囲でがんばってみたことは シート2、シート3のA1に「=Sheet1!A1」、B1に「=Sheet1!B1」、C1に「=Sheet1!C1」と入力して シート2、シート3にも上記とおなじマクロを記述してみました。 けれど、シート1で入力しても、シート2、シート3を選択して、どこかのセルを1回選択しないと、文字揃えが反映されませんでした。 そこで、 シート1の上記マクロに Sheet2.select Sheet3.select Sheet1.select を追加してみました。 けれど、あたりまえといえばあたりまえなのですが、シート1でどこかのセルを選択するごとにシート2、シート3、シート1と画面が切り替わるようになり、画面が切り替わったあとにシート2、シート3を見てみても、文字揃えはどこかのセルを選択しないかぎりおなじく反映されませんでした。 どのようにしたらいいのかが分からず、質問いたしました。 みなさまのお知恵を借していただけますと幸いです。 どうかよろしくお願いいたします。

  • EXCEL VBA Array要素記述を変更したい

    プログラムの中にセルの値を直接記入しているところがあます。 Select Caseの行の 「Array("101", "102", "103", "104")」のとろです。 プログラムには101, 102, 103, 104ではなくB10~B13を使用したいのですが、うまくできません。 実際には4つだけではなく何十個もあって作業がわずらわしくなるのと、ブックごとに値が異なって 汎用性がないためです。 アドバイスいただけると助かります。 初歩的なことを質問しているかも入れませんが、よろしくお願いいたします。 シート名「表紙」のA列は部品番号(=シート名)でA10:101 A11:102 A12:103 A13:104とします。 これに対応したシートが4つあり、シート名は、「101」「102」「103」「104」とします。 使用者は「表紙」のシートで下記の作業を行います。 B6セルには製造番号(例:AM01-130012)を入力します。 B10~B13セルは「○」「×」を入力規則から選択します ○を選択した隣のC10~C13セルは部品個数で1~9の数値を入力規則から選択します。 ○を選択したのと同じ行のD10~L10、D11~L11、D12~L12、D13~L13セルに、 文字列を入れる場合と入れない場合があります。文字列は左のD列から順に入れます。 下記マクロにて「○」となっているシートのみコピーを作成します。(1) コピーしたシートすべてのB1セルに製造番号を入力します。(2) D列に文字列があれば、コピーした対応するシートの中のH3~P3セルへ貼り付けます。(3) C列の値によって、コピーした対応するシートの中のH3~P3セルの値をクリアします。(4) <表紙のシート>    A     B     C    D     E     F    G    H     I     J     K      L 5 6    AM01-130012 7 8 9  10 101    ×    9 11 102    ○    3 12 103    ○    8  A1-1  A1-2  A1-3  A1-4  A1-5  A1-6  A1-7  A1-8   13 104    ×    9 <プログラム> Sub TestSample() Dim c As Range Dim 製造番号 As String Dim flg As Boolean flg = True With ThisWorkbook 製造番号 = .Worksheets("表紙").Range("B6").Value For Each c In .Worksheets("表紙").Range("B10:B13") If c.Value Like "○*" Then ' ' (1) If flg Then '  初めてなら、○に対応したシートを「新しいブックにコピー」 .Worksheets(c.Offset(, -1).Text).Copy flg = False Else '  それ以外なら、○に対応したシートをアクティブブックの最後にコピー追加 .Worksheets(c.Offset(, -1).Text).Copy After:=Worksheets(Worksheets.Count) End If ' ' (2) ' ' コピーしたすべてのシート(のB2)に製造番号を書き込む Range("B1").Value = 製造番号 ' ' (3) ' ' ○の行のD:L を 対応するシートのH3:P3 へ貼り付け If c.Offset(, 2) <> "" Then '  D列が空でなければ Range("H3").Value = c.Offset(, 2).Value Range("I3").Value = c.Offset(, 3).Value Range("J3").Value = c.Offset(, 4).Value Range("K3").Value = c.Offset(, 5).Value Range("L3").Value = c.Offset(, 6).Value Range("M3").Value = c.Offset(, 7).Value Range("N3").Value = c.Offset(, 8).Value Range("O3").Value = c.Offset(, 9).Value Range("P3").Value = c.Offset(, 10).Value End If End If Next c End With ' ' (4) For Each 各シート In Worksheets With 各シート .Activate Select Case ThisWorkbook.Worksheets("表紙").Cells(Application.Match(各シート.Name, Array("101", "102", "103", "104"), 0) + 9, "C").Value Case "1" '1のときの仕事をする Range("I3:P3").Select Selection.ClearContents Case "2" '2のときの仕事をする Range("J3:P3").Select Selection.ClearContents Case "3" '3のときの仕事をする Range("K3:P3").Select Selection.ClearContents Range("J3").Select Case "4" '4のときの仕事をする Range("L3:P3").Select Selection.ClearContents Case "5" '5のときの仕事をする Range("M3:P3").Select Selection.ClearContents Case "6" '6のときの仕事をする Range("N3:P3").Select Selection.ClearContents Case "7" '7のときの仕事をする Range("O3:P3").Select Selection.ClearContents Case "8" '8のときの仕事をする Range("P3").Select Selection.ClearContents Case "9" 'do nothing Case Else End Select End With Next If flg Then MsgBox "部品番号が選択されていません。" Exit Sub End If

  • ExcelのVBAで教えてください。

    Private Sub Worksheet_Changeについて教えて下さい。 まず初歩的なご質問ですが、Private Sub Worksheet_Changeを1つのシートモジュールに1個以上組むことは可能なのでしょうか? 例えばネットで以下のようにsheet1に Private Sub Worksheet_Change Private Sub Worksheet_Change_1 _1を付けてるのを見たことがあったので試してみましたが動作しませんでした。 今回行いたいのは1つが、指定したセルが変更されると次の指定セルに移動する。 以下がマクロです。 Private Sub Worksheet_Change(ByVal Target As Excel.Range) Select Case Target.Address(0, 0) Case "E14" [E15].Select Case "E15" [E26].Select Case "E26" [E22].Select Case "E22" [E25].Select Case "E25" [E29].Select Case "E29" [E20].Select Case "E20" [E21].Select Case "E21" [E16].Select Case "E16" [E17].Select Case "E17" [E27].Select Case "E27" [E23].Select Case "E23" [E24].Select Case "E24" [E28].Select Case "E28" [E18].Select Case "E18" [E19].Select End Select End Sub もう一つが、あるセルに数値をいれると他のブックのシートからそのシートの指定した行のセルの 数値を読み込んできて、元のブックのシートに数値を書き込むといったもです。 以下がマクロです。 Private Sub Worksheet_Change_1(ByVal Target As Excel.Range) Dim w As Workbook Dim c As Range On Error Resume Next Set xCur = Selection If Application.Intersect(Target, Range("F3")) Is Nothing Then Exit Sub If Range("F3") = "" Then Exit Sub Application.ScreenUpdating = False '転記元のブックを開いて逆順で検索する Set w = Workbooks.Open("V:\新3係(FIA・iPot)\(2)新4係(iPot)\ipot進捗\履歴管理\(9)KBB39360 X8 imm1.35 G1履歴、本体履歴 .xls") Set c = w.Worksheets("対物").Range("B:B").Find(what:=Range("F3").Value, LookIn:=xlValues, lookat:=xlPart, searchdirection:=xlPrevious) '見つけた(一番下の)セルを基準に転記する If Not c Is Nothing Then Range("F4").Value = c.Offset(0, 1).Value End If w.Close False Application.ScreenUpdating = True End Sub ともに1つずつなら問題なく動作するのですが、2個のマクロを組むと片方しか動作しません。 多分ものすごく初歩的な事だとは思いますが、御指導の程宜しくお願いします。

  • エクセル VBAについて。その2

    以前、こちらの掲示板でお世話になった者です。   Private Sub Worksheet_Change(ByVal Target As Range) Select Case Target.Address Case "$C$5" Select Case Target.Value Case 1 Range("C6").Value = 24 Range("D5").Value = 600 Range("D6").Value = 0 Range("E5").Value = 400 Range("E6").Value = 0 Case 2 Range("C6").Value = 32 Range("D5").Value = 1000 Range("D6").Value = 0 Range("E5").Value = 500 Range("E6").Value = 0 End Select Case "$D$5" Select Case Range("C5").Value Case 1 Range("D6").Value = (600 - Range("D5").Value) / 25 Case 2 Range("D6").Value = (1000 - Range("D5").Value) / 25 End Select Case "$E$5" Select Case Range("C5").Value Case 1 Range("E6").Value = (400 - Range("E5").Value) / 50 Case 2 Range("E6").Value = (500 - Range("E5").Value) / 50 End Select と、上記のようなマクロがお手伝いしていただいた結果、完成しました。 C5に1を代入した場合 D5 = 600 D6 = 0 E5 = 400 E6 = 0 C5に2を代入した場合 D5 = 1000 D6 = 0 E5 = 500 E6 = 0   C5に1を代入しており、D5の値を500に下げた時 D6 = 4 (D5の値を100下げる毎にD6の値に+4 ) (D5の値を100上げる毎にD6の値に-4 ) C5に1を代入しており、E5の値を300に下げた時 D6 = 4 (E5の値を100下げる毎にE6の値に+4 ) (E5の値を100上げる毎にE6の値に-4 ) <以下、C5に2を代入した時のケースを省略。>   というような意味合いのマクロになったと思いますが、少々困ったことが発生しました。 (D5の値を100下げる毎にD6の値に+4 ) (D5の値を100上げる毎にD6の値に-4 ) (E5の値を100下げる毎にE6の値に+4 ) (E5の値を100上げる毎にE6の値に-4 ) この部分を (D5の値を100下げる毎にD6の値に+4 ) (D5の値を100上げる毎にD6の値に-8 ) (E5の値を100下げる毎にE6の値に+4 ) (E5の値を100上げる毎にE6の値に-8 ) に変更したいのですが、計算式がわかりません(?ω?) どなたかご指導のほどよろしくお願いします。

  • 指定セルへ転記するマクロで値が無い場合固定値転記

    シート2の1行目の指定したセルの値をシート1の指定セルに 転記を行いシート1が印刷。 印刷後はシート2の2行目の指定したセルの値をシート1の指定したセルに 転記してシート1が印刷。 シート2にデータが無くなったら停止という以下のマクロにて シート2のO列はシート1のセルA19に順次転記なのですが O列は運用上空白が有る場合が判明した為 値がある場合はその値を転記、値が無い場合は半角で ZZZ と 転記をしたいのですがどこを変更していいのか分かりません。 よろしくお願いします。 Sub データ転記() Dim myRng(1 To 23) Dim cpRng Dim i As Integer Dim n As String, myStr As String With Sheets("Sheet2") Set myRng(1) = .Range("B2") Set myRng(2) = .Range("C2") Set myRng(3) = .Range("D2") Set myRng(4) = .Range("D2") Set myRng(5) = .Range("D2") Set myRng(6) = .Range("E2") Set myRng(7) = .Range("E2") Set myRng(8) = .Range("F2") Set myRng(9) = .Range("F2") Set myRng(10) = .Range("H2") Set myRng(11) = .Range("J2") Set myRng(12) = .Range("K2") Set myRng(13) = .Range("K2") Set myRng(14) = .Range("L2") Set myRng(15) = .Range("M2") Set myRng(16) = .Range("N2") Set myRng(17) = .Range("O2") Set myRng(18) = .Range("P2") Set myRng(19) = .Range("Q2") Set myRng(20) = .Range("R2") Set myRng(21) = .Range("S2") Set myRng(22) = .Range("U2") Set myRng(23) = .Range("G2") End With cpRng = Split("B10,O4,G3,F10,F13,G10,G13,H10,H13,O3,L10,M10,M13,O5,E19,F19,A19,O6,D21,B6,I19,J19,G5", ",") '転記先配列化 With Sheets("Sheet1") .Range("B10,G3,F10,F13,G10,G13,L10,E19,F19,J19,O7,O8,C19,D10,D13,A19,O4,O5").NumberFormatLocal = "@" Do While myRng(1) <> "" For i = 1 To 23 .Range(cpRng(i - 1)).Value = myRng(i).Value Next .Range("C3,C13").Value = Left(.Range("O3").Value, 10) .Range("C10").Value = Mid(.Range("O3"), 11, 6) .Range("O7").Value = Format(Range("O6").Value, "0000000") .Range("O8").Value = Format(Range("J19").Value, "0000000") Call 加工01 Call 加工02 '印刷 .PrintOut For i = 1 To 23 Set myRng(i) = myRng(i).Offset(1) Next i Loop .Range("B10,O4,G3,F10,F13,G10,G13,H10,H13,O3,L10,M10,M13,O5,E19,F19,A19,O6,D21,B6,I19,J19,C3,C10,C13,C19,D10,D13,O8,O7,G5").ClearContents End With For i = 1 To 23 Set myRng(i) = Nothing Next MsgBox "印刷終了" Sheets("Sheet2").Select Cells.Select Selection.Delete Shift:=xlUp Sheets("Sheet1").Select Range("C3").Select End Sub

  • エクセルのシート名更新のマクロについて

    エクセルのシート名更新のマクロについて B1の値を元に、シート名を更新するマクロでつまづいています。 (1)B1セルに9/1と入力したら、2010年9月と表示されるように 「セルの書式設定」で調整しています。 (2)「(1)」で表示された年と月の情報をシート名に反映させたいと 思っています。 そこで、次のコードを記入しました。 --------------------------------------------------- Sub 更新作業() 'ひと月更新する。 Worksheets(1).Activate Range("B1").Select For Each r In Selection r.Value = DateSerial(Year(r.Value), Month(r.Value) + 1, Day(r.Value)) Next r 'シート名を変更する。 Worksheets(1).Activate ActiveSheet.Name = Format(Range("b1"), "yyyy年m月") ' 数量を削除する。 Range("C4:D9").Select Selection.ClearContents Range("C4").Select End Sub --------------------------------------------------- この場合「ActiveSheet.Name = Format(Range("b1"), "yyyy年m月")」で エラーが出てしまいます。 なぜ問題が出るのか、 また、解決策があれば、教えていただけないでしょうか。