マクロで空白のところをスルーする方法

このQ&Aのポイント
  • マクロを使用してセルU2の値をワークシート名に自動変換する際、セルU2が空白の場合に変換しない方法について質問しています。
  • 特に、2月、4月、6月、9月、11月などの月の場合、セルU2が空白になることがあり、エラーが発生してしまうことが問題です。
  • 質問者は、どのように記述を追加または削除すれば、セルU2が空白の場合に変換しないようにすることができるのかを知りたいとしています。初歩的な質問ですが、ご教授いただけませんか?
回答を見る
  • ベストアンサー

マクロで空白のところをスルーするには?

いつも、お世話になりありがとうございます。 下記のマクロはあるところから、引用してきたセルU2の値(月日)をワークシート名に自動変換しているものですが、31日に満たない2月、4月、6月、9月、11月は、セルU2が空白になり、エラーになってしまう月があります。(1月から2月に変更する時など) セルU2が空白の場合、変換しない様にするには、 下記の記述の「どこに」「どの様な」記述と追加するか、或いは、削除するのかわかりません。 どなたか、ご教授いtだけないでしょうか? 初歩的な質問で、恐縮致しますが、よろしくお願いいたします。 Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) If Sh.Name = "勤務表""勤務表データ""マクロリスト表""マニュアル" Then Exit Sub On Error GoTo ERR: If Target.Cells(1, 1).Address = "$U$1" Then Sh.Name = Target.Cells(1, 1).Text End If Target.Cells(1, 1).Select Exit Sub ERR: MsgBox "その名前には変更出来ません。", vbCritical + vbOKOnly, "ERROR" Resume Next End Sub

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.2

変更前: =IF(DATE($B$1+1988,$D$1,ROW(A21))>DATE($B$1+1988,$D$1+1,20),"",HYPERLINK("#"&DAY(DATE($B$1+1988,$D$1,ROW(A21)))&"日!A1",DATE($B$1+1988,$D$1,ROW(A21)))) 変更後: =IF(DATE($B$1+1988,$D$1,ROW(A21))>DATE($B$1+1988,$D$1+1,20),"",HYPERLINK("#"&TEXT(DATE($B$1+1988,$D$1,ROW(A21)),"mmdd")&"!A1",DATE($B$1+1988,$D$1,ROW(A21)))) 新しい困りごとは「ついでに聞いちゃえ」じゃなくて、それぞれ新しいご相談として投稿してください。 他の回答者さん達からも、適切な回答がタイムリーに寄せられるはずです。

yamagou
質問者

お礼

いつものことながら、大変お世話になりました。 完璧にリンクいたします。 今回は、ご指摘ありがとうございます。 つい、keithin様に直にお聞きしたくて、補足欄にて問い合わせてしまいました。 これからは、ご指摘の様にさせた頂きます。 今後共、よろしくお願い致します。 本当にいつもながら、ありがとうございました。

その他の回答 (1)

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

ThisWorkbookシートに。 private sub Workbook_SheetChange(Byval Sh as object, byval Target as excel.range)  if sh.name = "勤務表" or sh.name = "勤務表データ" or sh.name = "マクロリスト表" or sh.name = "マニュアル" then exit sub  if target.address <> "$U$1" then exit sub  ’以前やったとおり、マクロをトリガする「実入力セル」の番地を記載する事  if sh.range("U2") = "" then exit sub  on error goto errhandle  sh.name = sh.range("U2").text  exit sub errhandle:  msgbox "BAD SHEET NAME" end sub

yamagou
質問者

お礼

毎度、毎度お世話になりありがとうございました。 見事に成功致しました。完璧です。!! さすがでございます。 何からなにまで、ほんとうにありがとうございました。 m(._.)m <m(__)m>

yamagou
質問者

補足

「変化するワークシート名にハイパーリンクで移動したい」で教えていただきました関数式でリンクする際に、リンク先名の形式が変わったせいか、ハイパーリンクが「参照が正しくありません。」とエラーになります。 自分なりにちょっと変えてみたのですが、基本がわかってない為にうまく行きません。 今回は、「勤務表」シートから「日付」シートのA1セルに =IF(勤務表!A8="","",勤務表!A8)で日付を呼び出し、 更に、T1セルに =IF(COUNTBLANK(A1),"",VALUE(A1)) へ呼び出し、 セルの書式、ユーザー定義で「mmdd」として、4桁の数字に変換しました。 最後に、T1セルをU1セルに「形式を選択して貼り付け→値」で実入力を起こしています。 シート名が「**日」から「0221」とか「0302」のように4桁の半角数字に変わり、恐らく関数式の「…&"日A1!",…」の「日」を4桁の日付を表す記述に変更すれば良いように思うのですが、うまく行きません。 恐れ入りますが、「どこを」「どのように」書き換えたらよいか、教えていただけないでしょうか? よろしく、お願いいたします。 =IF(DATE($B$1+1988,$D$1,ROW(A21))>DATE($B$1+1988,$D$1+1,20),"",HYPERLINK("#"&DAY(DATE($B$1+1988,$D$1,ROW(A21)))&"日!A1",DATE($B$1+1988,$D$1,ROW(A21))))

関連するQ&A

  • エクセルのマクロ

    セルの値が変わったら動くマクロですが、2つ書くとエラーが出ます。 どのように直したらいいでしょうか? Private Sub Worksheet_Change(ByVal Target As Range) Select Case Target.Address If Intersect(Target, Range("EK22")) Is Nothing Then Exit Sub Else Range("EK24:EM28").Select Selection.ClearContents End If End Sub Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("EK24")) Is Nothing Then Exit Sub Else Range("EK27:EM28").Select Selection.ClearContents End If End Sub

  • マクロコードの変更

    以下のサンプルコードをネットでみつけました。 "D$7"セルに入れた文字と同じ文字を見つけてセルを移動させてくれるコードだと思いますが 私のエクセル表はD7セルに6桁の数字(111101)を入れますが 検索先は'111101とシングルコーテーションが入っています。 サンプルコードのD7セルのところをどのように変更したらいいでしょうか。 Private Sub Worksheet_Change(ByVal Target As Range) Dim myR As Range If Target.Address <> "$D$7" Then Exit Sub If Target.Value = "" Then Exit Sub Set myR = Cells.Find(What:=Target.Value, _ After:=ActiveCell, LookIn:=xlFormulas, LookAt _ :=xlWhole, SearchOrder:=xlByRows, _ SearchDirection:=xlNext, MatchCase:=True) If myR.Address = Target.Address Then MsgBox "同じ値はありません" Else myR.Activate End If End Sub どうぞよろしくおねがいします。

  • VBAで入力ミスの時、空白に戻すには

    いつもお世話になります WINDOWS7 EXCELL2010 です。 何れかのセルで入力ミスを、 例えば I13 に 1 を入力した時 「日」が 当然表示されますがこれがミスで空白に戻したい時に 「0」 で空白できると考えていましたが実際は空白でないみたいです。 見た目では空白ですが空白のセルのカウント COUNTBLANLK では1つ少なくなっています。 このようなミスの時に空白に戻す方法はどのようにすればいいかご教授いただけませんか。 よろしくお願いします。 参考 空白のセルのカウント AO13 =IF($B13="","",COUNTBLANK($I13:$AM13)) 入力のVBA Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("I13:AM27")) Is Nothing Then Exit Sub 'ココで範囲指定 Application.EnableEvents = False If Target.Value = 0 Then Target.Value = " " If Target.Value = 1 Then Target.Value = "日" If Target.Value = 2 Then Target.Value = "△" If Target.Value = 3 Then Target.Value = "▼" If Target.Value = 4 Then Target.Value = "前" If Target.Value = 5 Then Target.Value = "夜" If Target.Value = 6 Then Target.Value = "明" If Target.Value = 7 Then Target.Value = "有" Application.EnableEvents = True End Sub

  • エクセルマクロで複数列のセルを選択した時でも正しく動作するようにしたい

    エクセルマクロで複数列のセルを選択した時でも正しく動作するようにしたい。 今、3列目に入力された値によって15列から17列の値を自動入力するように次の マクロを作りました。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column <> 3 Then Exit Sub For Each r1 In Selection If r1.Cells(1, 1) <> "部品表" Then Cells(r1.Row, 15) = "-" Cells(r1.Row, 16) = "-" Cells(r1.Row, 17) = "-" End If Next End Sub 3列目のみのセルをペーストすると正しく動作しますが、1列目から3列目のセルにペーストすると何も動きません。 正しく動くようにするには、どう修正すればいいでしょうか?

  • マクロを複数のシートに適用する記述を教えて下さい

    またまた、お世話になります。 いつも、丸投げの状態で申し訳ありません。 下記の「ワークシート名を日付を変更することで変えられる記述」を検索して見つけ、引用させて頂きました。 これを、度々変わるワークシート名に対応して、31枚のシート(Sheetno3~33)に適用したいのですが、 「どこに」 「どのような」 記述を加えたら、よろしいでしょうか? どなたか、解る方がおられましたら、是非、ご教授いただけないでしょうか? 毎度、カンニングで答えを見るような質問で恐縮しますが、よろしくお願いいたします。 Private Sub Worksheet_Change(ByVal Target As Excel.Range) On Error GoTo ERR: If Target.Cells(1, 1).Address = "$V$1" Then Me.Name = Target.Cells(1, 1).Text & "日" End If Target.Cells(1, 1).Select Exit Sub ERR: MsgBox "その名前には変更出来ません。", vbCritical + vbOKOnly, "ERROR" Resume Next End Sub

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

    下記マクロはカーソルの相対移動で教えいいただいたものです。 セルに値を入力しないで、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

  • マクロ。セルを空白にした時の処理

    セルをDeleteで空白にした時の処理について教えて下さい。 まず現在下記のようなマクロがあります。 Private Sub SubProc1(ByVal Target As Range) Dim str1 As String Dim str2 As String  On Error Resume Next  If Application.Intersect(Target, Range("B18")) Is Nothing Then Exit Sub  If Range("B18") = "" Then Exit Sub  Application.ScreenUpdating = False str1 = "T-POT #" str2 = " G1 G2 MEST計測を行いました。" Range("A7").Value = str1 & Range("B18") & str2 End Sub B18セルに数字や文字も入力するとA7セルにB18セルの入力内容を含めた 文字が表示されるのですが、B18セル内の文字をDeleteで削除しても A7セルは特に反応なしです。 やりたいことはB18セルから文字をDeleteで削除した場合 A7セルからもB18セルの入力内容を削除したいです。( str1、str2だけが残るイメージ) 宜しくお願いします。

  • メッセージボックスを表示させるエクセルマクロ

    こんにちは。マクロ初心者です。 エクセル(Excel2003)でメッセージボックスを 表示させるマクロが思うようにいかず困っています。 B列に「○○会社」と入力されれば、 「取引先です。」 とメッセージボックスを表示させたいと思い、 次のとおりマクロを作成しました。 -------------------------------- Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 2 And Target Like "*会社" Then MsgBox "取引先です。" End If End Sub -------------------------------- しかし、コピーなどで複数のセルを貼り付ける(入力)行為をすると、 「実行エラー'13': 型が一致しません」と出てしまいます。 Worksheet_Change(ByVal Target As Range)を使っているので、 -------------------------------- Private Sub Worksheet_Change(ByVal Target As Range) If Target.Count > 1 Then Exit Sub If Target.Column = 2 And Target Like "*会社" Then MsgBox "取引先です。" End If End Sub -------------------------------- と、「If Target.Count > 1 Then Exit Sub 」を入れれば、 メッセージは出なくなるのですが、 これだと、A列セルに、コピー&ペーストで複数セルを貼り付けた場合、 「○○会社」があっても、マクロが効いてきません。 複数セルの貼り付けにも対応させるには、 どのようにすればよろしいでしょうか? 基本的なところが理解できていないのだと自覚しておりますが、 どうかご教授願います。 長々とわかりづらい文章ですみません。よろしくお願いします。

  • エクセル2003のVBAについて

    次のコードのように、初めにクリックしたセルに、次にクリックしたセルの内容をコピーするVBAを書いたのですが、コピー先の列を、複数指定する方法がわかりません。 たとえば、C~O列(3~15)のように指定できればと思っています。 このようなことは可能でしょうか? ご教授いただけます方、よろしくお願い申し上げます。 -------------------------------------------------- Dim FrstCell As Range Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.MergeCells = False And Target.Count > 2 Then Exit Sub On Error Resume Next '想定しないエラーを無視 If Target.Cells(1) = "" Then If Target.Column <> 3 Then Exit Sub 'C列 コピー先 Set FrstCell = Target.Cells(1) Else If Target.Column <> 18 Then Exit Sub 'R列 コピー元 Target.Copy FrstCell.MergeArea End If On Error GoTo 0 'エラートラップ終了 End Sub

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

    お世話になります。 下記コードで、セルごとにクリアをすると、エラーなくうごくのですが、セルをまとめてセルを消すと実行時エラー13型が一致しません。とでてIf Target.Value = "" Thenがだめだよとでてしまいます。 どなたか、回避の方法をご教授ください。 宜しくお願いいたします。 Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("B2:E2,G2:J2")) Is Nothing Then Exit Sub If Target.Value = "" Then Exit Sub x = Target.Value With Application .ScreenUpdating = False .EnableEvents = False .Undo 'Range("B2").Value = x + Z Z = Target.Offset(1, 0).Value y = Target.Value Target.Value = x + y .EnableEvents = True .ScreenUpdating = True End With Target.Offset(1, 0).Value = x + Z End Sub

専門家に質問してみよう