• ベストアンサー

Excel2003 上手く動かなくなってしまいました!!

お世話になっております。 以前こちらでご教授いただいたマクロを登録して 上手い事 動作していて助かっていたのですが 自分が変な所をイジってしまった為に 上手く動作しなくなってしまいました。 どこが おかしいのか、再度ご教授ください。 宜しくお願い致します。 Private Sub Worksheet_Change(ByVal Target As Range) Dim rOne As Range For Each rOne In Target Select Case (rOne.Value) Case 1 Range("Q" & rOne.Row).Select Case 2 Range("Y" & rOne.Row).Select Case 3 Range("AA" & rOne.Row).Select Case Else End Select Next rOne というマクロをいただき、リストで 1~3の数字を選ぶようにしていたのですが そのリストをイジってしまい、 1、あああ 2、いいい 3、ううう というように文字列を挿入した結果「Q」「Y」「AA」列にセルが飛ばなくなってしまいました。 解決方法をご教授ください。 宜しくお願い致します。

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

  • ベストアンサー
  • pkh4989
  • ベストアンサー率62% (162/260)
回答No.12

L列が左側の列と結合されていないですか? 例えば、K列と結合してK列を非表示しているとか デバッグで、Target.Column の中身を確認してみては。 止まった状態で、カーソルをTarget.Columnの上に持って行けば 中身の内容が表示されます。12 ではない事は入力列がL列ではない事です。 例えば、Target.Columnの内容が 11 ならば以下を   If Target.Column <> "11" Then Exit Sub  に変更すれば良いです。

ookami1969
質問者

お礼

すみません。。。。 今さら こんな事は言いにくいのですが どうやら 僕の勘違いだったようで リストは「L列」ではなく「P列」でした。。。 本当にすみません。。。 なのでご教示いただいた内容を当てはめますと数字を「15」に変更すれば良いという事に なりますよね。 実際に 15 に変更してみたら上手く動作してくれました。 何度も ご回答くださりありがとう御座いました。 お陰様で望み通りのシートが完成致しました。 ありがとうございます。 自分が間違っている事に気付けたのも 今回の回答で 12という数字が 列番号を表しているのだと分かった事で初めて気付けました。 根気よく ご回答くださり誠にありがとう御座いました。 たかが「ありがとうポイント」ぐらいしか差し上げられませんが ご査収ください。 長い間 本当にありがとう御座いました。

その他の回答 (11)

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.11

pkh4989さんのをアレンジして追加してみました 複数セル選択の可能性がありますので、こちらの方が無難かと思います '------------------------------------------------------- Private Sub Worksheet_Change(ByVal Target As Range)  Dim rOne As Range  Dim intNo As Integer  For Each rOne In Target   If rOne.Column = "12" Then        '←追加    intNo = Val(StrConv(rOne.Value, vbNarrow))    Select Case (intNo)     Case 1      Range("Q" & rOne.Row).Select     Case 2      Range("Y" & rOne.Row).Select     Case 3      Range("AA" & rOne.Row).Select     Case Else    End Select   End If              '←追加  Next rOne End Sub '-------------------------------------------------------

ookami1969
質問者

お礼

再登場ありがとう御座います。 ご提示いただいたコードをそのまま貼り付けてみましたが 何の反応もありませんでした。。。。 (当然「'←追加」この部分は はずしてありますが。。。)

  • pkh4989
  • ベストアンサー率62% (162/260)
回答No.10

PF9 →ファクションキー「F9」の事です。 以下のモジュール行にカーソルが状態で、F9 を押すと色反転されると思います 「再度 F9を押すと解除されます→解除状態では止まりません」 色反転表示状態で、プログラムを実行してください。 自動的にこのマクロシートが開いて、この行で止まりますのでファクションキー「F8」 を押しながら、確認してみてください。   If Target.Column <> "12" Then Exit Sub     '←追加

ookami1969
質問者

お礼

すみません。。本当に何度も何度も。。。 確かに If Target.Column <> "12" Then Exit Sub  ここにカーソルを置いた状態で「F9」押下で色が反転されます。 で その後の「プログラム実行」とは実際にシート上でリストの中から 1、あああ 2、いいい 3、ううう の中から選べば良いのでしょうか? そうすると If Target.Column <> "12" Then  ここまでが黄色くなります。 もう1度押すと 今度は Exit Sub の部分が黄色くなります。 がしかし シートの方では何も変化がありませんので 何をどう確認したらよいのか分からない状態です。 何度もご教授いただいているのに すみません。。。

  • pkh4989
  • ベストアンサー率62% (162/260)
回答No.9

実際にL列に入力される文字列は、何でしょうか? L列は結合されていませんか? 以下のように先頭に数字「全角でも半角でもOK」1,2,3 を入力すれば飛びます。 それ以外の数字「4、えええ」を入力すると飛びません。 1、あああ → Q列へ飛ぶ 1、www → Q列へ飛ぶ 2、いいい → Y列へ飛ぶ 3、ううう → AA列へ飛ぶ 4、えええ → 飛ばない 実際に以下のマクロの行で「PF9」を押してデバッグしてみてください。 PF9を押すと、実行時にその行で止まります。 止まりましたら、「PF8」を押して見てください。 PF8は1行つつ実行されます。これでマクロの動きが確認出来ます。 もし、この行で止ままらなっかたら「イベントが発生しない」、 マクロの問題ではないと思いますよ。   If Target.Column <> "12" Then Exit Sub     '←追加

ookami1969
質問者

お礼

何度も何度もすみません。 「PF9」とか「PF8」とはファンクションキーの事で良いのでしょうか? If Target.Column <> "12" Then Exit Sub この行にカーソルを置いた上で「F9」キーを押してみましたが 何も反応なしでした。。。。 L列の文字列は 数字が半角英数で「、」以降の文字は全角です。 「PF9」とか「PF8」の「P」の意味が分からずに普通に「O」の左で「@」の右の「P」を 押していましたが 普通にpが入力されるので「F9」を押してみましたが 何も反応なしでした。。。。。 もしかして「Then Exit Sub」の後の「多少のブランク」&「 '」も必要ですか? 本当に何度もすみません。。。

  • pkh4989
  • ベストアンサー率62% (162/260)
回答No.8

以下のを追加してください。 Private Sub Worksheet_Change(ByVal Target As Range)   Dim rOne As Range   Dim intNo As Integer      If Target.Column <> "12" Then Exit Sub     '←追加   For Each rOne In Target     intNo = Val(StrConv(rOne.Value, vbNarrow))     Select Case (intNo)       Case 1         Range("Q" & rOne.Row).Select       Case 2         Range("Y" & rOne.Row).Select       Case 3         Range("AA" & rOne.Row).Select       Case Else     End Select   Next rOne End Sub

ookami1969
質問者

お礼

すみません。 何度も ありがとう御座います。 ご提示いただいたマクロを貼り付けてみましたが 今度は何も反応しなくなってしまいました。。。。 すみません。。。

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.7

こんな感じですか '------------------------------------------------------- Private Sub Worksheet_Change(ByVal Target As Range) Dim rOne As Range Dim intNo As Integer For Each rOne In Target intNo = Val(StrConv(rOne.Value, vbNarrow)) Select Case (intNo) Case 1 Range("Q" & rOne.Row).Select Case 2 Range("Y" & rOne.Row).Select Case 3 Range("AA" & rOne.Row).Select Case Else End Select Next rOne End Sub '------------------------------------------------------- ただし最初の文字は数字でなければいけません

ookami1969
質問者

お礼

ご回答ありがとう御座います。 完璧です!! 思い通りに動作してくれました!! ありがとう御座いました!!

ookami1969
質問者

補足

今 確認をしてみたのですが 他のセルにもリストを設定しておりまして そちらで選んだ数字にも反応して QやYやAAにセルが飛んでいって しまいます。 このマクロを「L列限定」で反応するようには出来ませんでしょうか。 宜しくお願い致します。

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

ANo.4です。 >「Select Caseと最初のCaseの間のステートメントおよびラベルが適切ではありません。」 って差し替えずに追加しているのではないでしょうか? ようは入力規則か何かで、元は数値のリストだった物を文字列に変更したわけですよね。 その文字列から数字を取り出して処理の分岐をしたいと言うのではないでしょうか? その文字列の数字が全角か半角かによって変わるかと。

ookami1969
質問者

お礼

何度もありがとう御座います。 おっしゃるとおり差し替えずに変更のみをしておりました。 >ようは入力規則か何かで、元は数値のリストだった物を文字列に変更したわけですよね。 >その文字列から数字を取り出して処理の分岐をしたいと言うのではないでしょうか? これも おっしゃるとおりです。 >その文字列の数字が全角か半角かによって変わるかと。 かしこまりました。 ありがとう御座いました。

  • pkh4989
  • ベストアンサー率62% (162/260)
回答No.5

ブック又はシート上に何か設定されているかも知れませんので、 新しいブックのシートで、試してみた方が良いと思いますね。

ookami1969
質問者

お礼

再々登場ありがとう御座います。 おっしゃるとおり別のブックに貼り付けたら解決したのですが 今度は 何を入力しても「AAのセル」までカーソルが飛んで行ってしまいます。 何かが間違えているのでしょうか? 申し訳ありませんが 宜しくお願いいたします。

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

ANo.1です。 Select Case StrConv(Left(rOne.Value, 1), vbNarrow) リストの数字が全角ならこっちかな。

ookami1969
質問者

お礼

再登場ありがとう御座います。 試してみたのですが、 「コンパイルエラー」 「Select Caseと最初のCaseの間のステートメントおよびラベルが適切ではありません。」 というエラーメッセージが出てまいります。 再度 ご教授お願い致します。

  • pkh4989
  • ベストアンサー率62% (162/260)
回答No.3

そのエラーメッセージは何ですか?

ookami1969
質問者

お礼

再登場ありがとう御座います。 当初は「コンパイルエラー」というのが出ていたと思うのですが 今は 何も反応しなくなり、通常のリストの選択が出来るのみで 「コードの表示」を閉じようとすると「このコマンドを使うとデバッグは中断します」というメッセージが表示されます。 依然 Private Sub Worksheet_Change(ByVal Target As Range) ここが黄色く塗り潰された状態です。 宜しくお願い致します。

  • pkh4989
  • ベストアンサー率62% (162/260)
回答No.2

ここではないのかな~ Private Sub Worksheet_Change(ByVal Target As Range)   Dim rOne As Range   For Each rOne In Target     'Select Case (rOne.Value)     Select Case (rOne.Row)     '←ここを変更       Case 1         Range("Q" & rOne.Row).Select       Case 2         Range("Y" & rOne.Row).Select       Case 3         Range("AA" & rOne.Row).Select       Case Else     End Select   Next rOne End Sub

ookami1969
質問者

お礼

ご回答ありがとう御座います。 一応、Valueを入れたままとRowのみと両方やってみたのですが「何とかエラー」の表示が出てしまいました。。。 どうやら >Private Sub Worksheet_Change(ByVal Target As Range) この部分に問題があるようで、そこが黄色くなり 左に→が出ています。 再度 ご教授お願い致します。

関連するQ&A

  • Excel2003 マクロをご教授ください!

    いつもお世話になっております。 ここで 様々な方にご教授いただいて Excelのマクロを反映させられたのですが マクロを貼り付けた後で列を削除したり、各種編集をしていたら 今まで動作していたマクロが動作しなくなってしまいました。 以下 前文を記しますが 動作しないのは 下のマクロです。 Private Sub Worksheet_Change(ByVal Target As Range) Dim rOne As Range Dim intNo As Integer If Target.Column <> "15" Then Exit Sub For Each rOne In Target intNo = Val(StrConv(rOne.Value, vbNarrow)) Select Case (intNo) Case 1 Range("p" & rOne.Row).Select Case 2 Range("x" & rOne.Row).Select Case 3 Range("z" & rOne.Row).Select Case Else End Select Next rOne If Intersect(Target, Range("L3:L3001")) Is Nothing Then Exit Sub If Target.Count > 1 Then Exit Sub Application.ScreenUpdating = False Application.EnableEvents = False With Target.Offset(0, 1).Validation .Delete .Add Type:=xlValidateInputOnly .IMEMode = xlIMEModeHiragana End With If Target Like "###-####" Then Target.Offset(0, 1).Select SendKeys Target.Value SendKeys "{ }" SendKeys "{ENTER}" End If Application.EnableEvents = True Application.ScreenUpdating = True End Sub 上のマクロ(セルを飛ばす)は正常に動作してくれるのですが 下のマクロで郵便番号を自動的に隣のセル(M列)に反映してくれなくなってしまいました。 M列のとなり(たしかN列だったと思うのですが)を削除したあたりから この郵便番号マクロが動作しなくなってしまいました。 どこか おかしな所はないか見ていただけますでしょうか。 宜しくお願い致します。

  • Range("B19:T19").Select

    よろしくお願いします Private Sub Worksheet_Change(ByVal Target As Range) 内のマクロで Range("B19:T19").Selectの 19をTarget.Rowで表現すると Range("B19:T19").Selectをどう直したらいいでしょうか? こんな簡単なことが分かりません どなたか教えてください

  • アクティブセルの右側にユーザーフォームから入力したい。

    アクティブセルの右側にユーザーフォームから入力したい。 すいません初心者で困ってます。 Private Sub Worksheet_Change(ByVal Target As Range) With Target If .Column = 7 Then '色付けをColumn=??に限定 Select Case .Value '反応させる文字列の入力と(.Row ?)~(.Row?)で色塗り範囲指定 Case "完了" Range(Cells(.Row, 3), Cells(.Row, 13)).Interior.ColorIndex = 0 UserForm2.Show Case "提出中" Range(Cells(.Row, 3), Cells(.Row, 13)).Interior.ColorIndex = 6 Case Else Range(Cells(.Row, 3), Cells(.Row, 13)).Interior.ColorIndex = 0 End Select End If End With End Sub 台帳を作ってるんですが、リストから選択して”完了”と入力されるとUserForm2が開いて完了日を入力したいと思っております。 UserForm2はスピンボタンでそこそこ完成したんですが、”完了”に切り替えたセルの隣のセルに入力の方法が分からなくて困っております。 どなたか御教授ください。

  • マクロ、カーソルの相対移動

    下記マクロはカーソルの相対移動で教えいいただいたものです。 セルに値を入力しないで、Enterを押下した時もこのように動作させるためにはどのように記述したらいいでしょうか。教えてください。よろしくお願いいたします。 Private Sub Worksheet_Change(ByVal Target As Range) if Target.Column = 2 Then Cells(Target.Row,5).Select if Target.Column = 5 Then Cells(Target.Row,7).Select if Target.Column = 7 Then Cells(Target.Row + 1, 2).Select End Sub

  • Rows("20:20").Selectについて

    よろしくお願いします こんな簡単なことが分かりません どなたか教えてください マクロを記録すると Rows("20:20").Select Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove と記録されました また Private Sub Worksheet_Change(ByVal Target As Range)内のマクロで Debug.Print Target.Row と書くと 20が表示されます そこで Rows("20:20").Select の20をTarget.Rowに置き換えるには、マクロではどう書いたらよいでしょうか 色々試しましたがエラーで進みません うまく表現できていませんが、どなたか教えてください  

  • エクセルVBA プルダウンのリスト 指定範囲以外で

    こんにちは。 現在、業務で案件の簡単な進捗表を作成しています。 VBAで他の、ご質問/回答を基にマクロを組んで遊んで?いますが、 以下の問題に困っています。 現在作成中のエクセルファイルのステータスですが、 (1)A列に”入力規則”でプルダウン(終了,延期)を設けています。 (2)マクロでA列のプルダウンで”終了”の場合はA:AFまでグレーアウト  同様に”延期”の場合はA:AFまで黄色 (3)マクロでC列に”土”ならフォントを青で日なら赤 やりたい事ですが、 (1)の事を”マクロ”でやりたいんです。 リストで元の値を指定してマクロを組む方法は、 いくらでもネット上に転がっているのですが、 元の値を範囲ではない方法、つまり、 入力規則⇒リスト⇒ ”=$A$1:$A$10” ではなく、”りんご,ばなな、みかん”のように、 マクロのコード内で範囲を構成したい、、、 うまくいえませんが、簡単に言うと、プルダウンメニューが2つしかないのに、 わざわざ、データ用の別シートを作ったりしたくない、、、という理由です。 このプルダウンメニューのマクロを今の下記コードに組み込ませたいのですが、 どなたか、ご教授願います。 ※今後の事も考え拡張性(プルダウンメニューの追加とか)を考慮したものを書きたいです。 マクロが面白くなってきたから勉強しているのであって、 入力規則の今のままでいいのでは?という野暮な回答はご遠慮します。 上記の(2)と(3)を他の質問から見よう見まねで組み合わせ、 動作は確認出来ています。 以下が組み合わせたものとなります。 Private Sub Worksheet_Change(ByVal Target As Range) Dim RngA1 As Range Dim RngA2 As Range Dim RngC1 As Range Dim RngC2 As Range Dim RngE1 As Range Dim RngE2 As Range Dim rr As Range Dim i As Long Dim c As Range Dim myColor As Long Dim clr As Integer '#########################Aの処理######################### Set RngA1 = Range("A:A") '判定の対象となる列 Set RngA2 = Range("A:AF") '色を変える列 If Intersect(Target, RngA1) Is Nothing Then GoTo SYORI_C For Each c In Intersect(Target, RngA1) With c Select Case .Value Case "終了": myColor = 48 Case "延期": myColor = 27 Case Else myColor = xlColorIndexNone End Select Intersect(c.EntireRow, RngA2).Interior.ColorIndex = myColor End With Next '#########################Cの処理######################### SYORI_C: Set RngC1 = Range("V:V") '判定の対象となる列 Set RngC2 = Range("V:W") '色を変える列 If Intersect(Target, RngC1) Is Nothing Then GoTo SYORI_E For Each c In Intersect(Target, RngC1) With c Select Case .Value Case "無し": myColor = 48 Case Else myColor = xlColorIndexNone End Select Intersect(c.EntireRow, RngC2).Interior.ColorIndex = myColor End With Next '#########################Eの処理######################### SYORI_E: Set RngE1 = Range("X:X") '判定の対象となる列 Set RngE2 = Range("X:Y") '色を変える列 If Intersect(Target, RngE1) Is Nothing Then GoTo SYORI_G For Each c In Intersect(Target, RngE1) With c Select Case .Value Case "無し": myColor = 48 Case Else myColor = xlColorIndexNone End Select Intersect(c.EntireRow, RngE2).Interior.ColorIndex = myColor End With Next '######################################################## SYORI_G: If Intersect(Target, Range("C:C")) Is Nothing Then Exit Sub For Each rr In Intersect(Target, Range("C:C")) For i = 1 To Len(rr.Value) Select Case Mid$(rr.Value, i, 1) Case "土": clr = 5 Case "日": clr = 3 Case Else: clr = xlAutomatic End Select rr.Characters(i, 1).Font.ColorIndex = clr Next Next '######################################################## End Sub

  • Worksheet_Changeイベントでのセル設定

    マクロ初心者です。Excel2003です。 Sheet1に下記のイベントを記述しましたが、(3)だけ動作してくれません。 シート上では、N27とO27の2つのセルが結合されており、入力規則でリスト選択(3択)する設定になっています。(1)や(2)のように認識してくれるようにするにはどうしたらいいでしょうか? どなたか教えてください。よろしくお願いします!! Private Sub Worksheet_Change(ByVal Target As Range)  Select case Target.Address   (1)Case "$E$5"     ・・・   (2)Case "$E$6", "$E$24", "$N$6"     ・・・   (3)Case "$N$27"     ・・・  End Select End Sub

  • 結合されたセルを列方向に検索したい

    excel2003 結合されたセルを列方向に検索したい Bセルで同じ文字列が入っているセルをダブルクリックすると、順繰りに検索する。 下記が、マクロの内容です。 ------------------------------------------------------------------------- Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) On Err GoTo Myerr: Dim MyRange As Range Dim FirstRow As Integer Application.EnableEvents = False If Target.Column = 2 And Target.Value <> "" Then If Target.Row = Range("B" & Rows.Count).End(xlUp).Row Then FirstRow = 1 Else FirstRow = Target.Row End If With Range("B" & FirstRow & ":B" & Range("B" & Rows.Count).End(xlUp).Row) Set MyRange = .Find(Target.Value, LookIn:=xlValues, After:=ActiveCell) If FirstRow = Target.Row Then Set MyRange = Range("B1:B" & Range("B" & Rows.Count).End(xlUp).Row).Find(Target.Value, LookIn:=xlValues, After:=ActiveCell) MyRange.Select Else MyRange.Select End If End With End If Application.EnableEvents = True Myerr: Application.EnableEvents = True End Sub ------------------------------------------------------------------------- 上記内容で、単独セルであれば動作するのですが、 行方向に結合されている(B1とB2が結合されている)セルをダブルクリックすると 実行時エラー’13’: 型が一致しません。 というエラーが発生します。 上記マクロでどこを修正したらよいのか、教えていただきたく。 B列は、結合されたセル、単独のセルが混在しています。

  • Excel2013 ExcelVBAで散布図

    Excel2013 ExcelVBAで散布図を書く方法を教えてください。 Excel2013にてA列とC列で散布図を作成するため excelVBAで以下のコードを書いています。 Sub hogehoge() Dim aa As Range Dim cc As Range Dim aacc As Range Set aa = Range(Cells(1, 1), Cells(6, 1)) Set cc = Range(Cells(1, 3), Cells(6, 3)) Set aacc = Union(aa, cc) aacc.Select ActiveSheet.Shapes.AddChart.Select ActiveChart.ChartType = xlXYScatterLinesNoMarkers End Sub 上記を実行すると左側のグラフになってしまうのですが 右側のグラフを書きたいんですがどうしたらいいのでしょうか? よろしくお願いします。

  • 【Excel VBA】チェンジイベント

    Excel2003を使用しています。 マクロの記録を元に、チェンジイベントを下記のように作成しました。 下記は、B列の11行目以降のセルのデータが変化したら、その行のF列に入力規則を設定するように作成したつもりです。 テストもしてみましたが、きちんと動作しました。 さらに、B列の11行目以降のセルのデータがクリアされたら、その行のF列に設定した入力規則もクリアしたく  If Target.Columns(2).ClearContents And Target.Row >= 11 Then   Cells(Target.Row, 6).Validation.Delete  End If 分からないながらにも、↑このように追加して試してみたのですが、何も動作しなくなりました(^_^;) こういう場合は、どのようにコードを書いたらいいのでしょうか? よろしくお願いします。 -------------------------------------------------- Private Sub Worksheet_Change(ByVal Target As Range)  If Target.Column = 2 And Target.Row >= 11 Then   With Cells(Target.Row, 6).Validation    .Delete    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _    xlBetween, Formula1:="=$F$3:$F$7"    .IgnoreBlank = True    .InCellDropdown = True    .InputTitle = ""    .ErrorTitle = ""    .InputMessage = ""    .ErrorMessage = ""    .IMEMode = xlIMEModeNoControl    .ShowInput = True    .ShowError = False   End With  End If End Sub ------------------------------------------------

専門家に質問してみよう