- ベストアンサー
エラーが出てしまいます。
特定の列(C列)に日付が入力されると同じ行の違う列に月名が入力されるマクロをt食ってみました。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Column = 3 Then Cells(Target.Row, 10) = Month(Target.Value) End If End Sub しかしC列の一つのセルに入力したときはきちんと作動したのですが、C列の複数セルを選択したときにエラーが出てしまいました。 このエラーを回避する方法はあるのでしょうか。
- nihonjinn
- お礼率57% (58/101)
- オフィス系ソフト
- 回答数3
- ありがとう数2
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
arget はRangeオブジェクトでセル範囲ですので、Cells(Target.Row, 10) と記述すると Targetが範囲である場合にRowを取得出来ず、「型が一致しません。」エラーになります。 参考までですが、下記のコードにすると複数範囲選択でCtrl+Shift+Enter入力してもOKです。 フィルドラッグコピーにも対応します。 あと、日付を入力(変更)したときということでありば、Changeイベントの方が、 いいのではないかと思います。 Private Sub Worksheet_Change(ByVal Target As Range) Dim Rng As Range Set Target = Application.Intersect(Range("C:C"), Target) If Target Is Nothing Then Exit Sub For Each Rng In Target Application.EnableEvents = False If IsDate(Rng.Value) Then Rng.Offset(, 7) = Month(Rng.Value) If IsEmpty(Rng) Then Rng.Offset(, 7) = vbNullString Application.EnableEvents = True Next Rng End Sub
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17068)
多分こんなことがしたいのかなと言うものをコードにしてみました。実用になるか、通常操作以外をガードしているか自信ありませんが。 C3:C7に 2003/9/1 2003/10/2 2003/5/21 2002/11/3 2003/3/23 が入っているとします。 コードは Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Column = 3 Then t = Target.Range("a1").Row r = Target.Rows.Count For i = t To t + r - 1 If Cells(i, "C") <> "" Then Cells(i, 10) = Month(Cells(i, "c")) End If Next i End If End Sub で、C3:C10(C7を越えて、C8より下までも)を範囲指定すると(越えてしても)、J3:j7に 9 10 5 11 3 と入りました。間にC列の日付けなしブランク行があっても OKです。
- maruru01
- ベストアンサー率51% (1179/2272)
こんにちは。maruru01です。 直接の回答ではありませんが。 マクロではなく、通常のワークシート関数ではダメなんでしょうか。 =IF(ISNUMBER(C1),MONTH(C1),"") とか、 =TEXT(C1,"m;;;") などで。
お礼
回答ありがとうございます。始めは関数を使っていたのですが、何列もデータがあってファイルサイズが大きくなったのでマクロを使ってみようと思ったのです。
関連するQ&A
- VBAでエラートラップがうまくいきません。
VBAで次のようなプロシージャを実行してみました。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Value = " " Then ~コード~ END IF END SUB すると複数のセルが選択されるとエラーがでます。そこで次のようにしてみました。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) On Error GoTo エラー処理 If Target.Value = " " Then On Error GoTo 0 ~コード~ END IF EXIT SUB エラー処理: EXIT SUB END SUB ところがこれでもやっぱりIF文のところでエラーがでます。 当方初心者でなぜエラーがでるのかわかりません。 わかりやすくご教授ください。 よろしくお願いします。
- ベストアンサー
- Visual Basic
- エクセル マクロを利用して繰り返して入力する方法
マクロでA1B1C1D1E1F1セルに入力しF1入力後A2B2C2D2E2F2と 下方向へ繰り返し800行くらいまで入力し、それとB列はスキップしたいのですが下記の方法で別々のシートでは うまくいくのですが同じシ-ト内ではエラ-になってしまいます 次の行への移動 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Column = 7 Then Cells(Target.Row + 1, 1).Select End If End Sub B列のスキップ Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Range("G1") <> "" Then If Target.Column = 2 Then Target.Offset(0, 1).Select End If End If End Sub どなたかご存じの方教えて下さい
- ベストアンサー
- オフィス系ソフト
- SelectionChangeイベント 文字列エラ
エクセルvbaなのですが セルをクリックしたときに、該当する値ならメッセージを表示させる際に Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Value = 1Then MsgBox "" End If End Sub ならエラーにならずに動くのに Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Value = "運賃" Then MsgBox "" End If End Sub のように文字列にすると、型が一致しません。 と言うエラーになります。 If Target.Value = "運賃" Then の時でも、空白セルや数値が入ったセルをクリックした際はエラーになりません。 どのような型にすればいいのでしょうか? 実際、「運賃」と言う値が入ってるセルをクリックしても同じエラーが発生します。
- ベストアンサー
- オフィス系ソフト
- エクセル2003 VBAでセル移動
いつもお世話になります。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Row > 9 Then If Target.Column = 3 Then Cells(Target.Row, 4).Select ElseIf Target.Column > 5 Then Cells(Target.Row + 1, 1).Select End If End If End Sub これで、B列からC列を飛ばしてD列にセル移動して取りあえずの目的は達成しているのですが、 D列からB列には方向キー移動してくれません。Target.Columnが3になるんで当たり前なんですが・・・ B列の入力ミスがあるときマウスで移動させるか、A列まで戻ってから方向キーで上に上がるかです。 何かいい方法ありませんでしょうか。D列から方向キーで戻るときも、出来ればC列を飛ばしてほしいです。 よろしくお願いします。
- 締切済み
- Visual Basic
- Excel VBA セルの値を変更後にVBA作動
Excel VBAを活用して、特定のセルの値が変更されたときに、VBA処理を発動させることになりました。 処理といたしましては、C列(3列目)の4行目以下の空白セルに数値を入力するか、セルに入力されている数値を変更した場合にVBAを発動させたいです。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Column = 3 And Target.Row >= 4 Then MsgBox "セルの値が更新されました" End If End Sub 上記のコードを実行してみたところ、3列目(C列)の4行目を選択した段階でVBAが作動してしまいます。 セルの値変更後に作動するようにするには、どう修正すればよろしいでしょうか?
- ベストアンサー
- Visual Basic
- マクロの疑問
Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address <> "A2" Then Range("A2").Select End If End Sub とすると、どのセルを選んでもA2に飛ぶのに、 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address = "A3" Then Range("A2").Select End If End Sub とすると、A3を選んでも全く移動しないのはなぜでしょうか。 なにか落とし穴がありそうで。。。 よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- エクセルvba (ByVal Target As Range)について
シートのイベントプロシージャーが Private Sub Worksheet_SelectionChange(ByVal Target As Range) End Sub となりますが (ByVal Target As Range)部分は何なのでしょうか? 何のためにあるのかわかりません。 Private Sub Worksheet_SelectionChange() End Sub としたらエラーが返ってきました。 理由を教えてください。 よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- VBAエラー「スタック領域が不足しています」
C2とD2のセルに英文字を入力した時,先頭文字を大文字にするVBAを組んだのですが,いざ実行すると「スタック領域が不足しています」と出てしまいます。以下にコードを示します。 'Sheet1 Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) If Target.Row = 2 And Target.Column = 3 Then Range("C2").Value = StrConv(Range("C2").Value, vbProperCase) End If If Target.Row = 2 And Target.Column = 4 Then Range("D2").Value = StrConv(Range("D2").Value, vbProperCase) End If End Sub なぜこのようなエラーが出るのでしょうか。考えれば考えるほど合っているように思えて仕方なくなったので,ミスがあればご指摘をおねがいします。
- ベストアンサー
- Visual Basic
- シングルクリックでフォームが表示されない
windowsXP Excel2000 でマクロを作成している超初心者です。 あるサイトの暦で日付を入力するマクロですが、1枚のシートに 1)と 2)を併記して実験したところ正常に表示できました。 2)をシングルクリックで表示したいのですができません。なぜでしょうか? 2)はいかにも稚拙です。もっと整理したいのですが方法が分かりません。以上2点よろしくご指導ください。 -------------------------------------------------------------------- 1)シングルクリックで UserForm1を正常に起動できました。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) 'シングルクリックで表示 Cancel = True 'プロシージャ終了後に表示されるショートカットメニューの非表示 If Target.Row > 22 And Target.Column > 2 And Target.Column < 4 Then UserForm1.Show End If If Target.Row > 22 And Target.Column > 13 And Target.Column < 15 Then UserForm1.Show End If End Sub ------------------------------------------------------------------------- 2)ダブルクリックでしか正常に表示されません。 'Private Sub Worksheet_SelectionChange(ByVal Target As Range)’ 起動しない Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) '起動した Cancel = True 'プロシージャ終了後に表示されるショートカットメニューの非表示 If Target.Row > 23 And Target.Column > 1 And Target.Column < 3 Then Call ShowCalendarFromRange2(Target) End If If Target.Row > 23 And Target.Column > 12 And Target.Column < 14 Then Call ShowCalendarFromRange2(Target) End If If Target.Row > 12 And Target.Row < 21 And Target.Column > 12 And Target.Column < 14 Then Call ShowCalendarFromRange2(Target) End If If Target.Row > 12 And Target.Row < 21 And Target.Column > 14 And Target.Column < 16 Then Call ShowCalendarFromRange2(Target) End If If Target.Row > 12 And Target.Row < 21 And Target.Column > 16 And Target.Column < 18 Then Call ShowCalendarFromRange2(Target) End If If Target.Row > 12 And Target.Row < 21 And Target.Column > 18 And Target.Column < 20 Then Call ShowCalendarFromRange2(Target) End If End Sub ----------------------------------------------------------------------- 3)'これがサイトにあった例で、これを元に上のスクリプトを作りました。 'Private Sub Worksheet_SelectionChange(ByVal Target As Range) ' 複数セル選択時は無視 ' If Target.Count <> 1 Then Exit Sub ' A列以外は無視(今回サンプルの例) ' If Target.Column <> 1 Then Exit Sub ' カレンダーフォームを起動する ' Call ShowCalendarFromRange2(Target) 'End Sub ---------------------------------------------------------------
- ベストアンサー
- Visual Basic
- 「更新後処理」のようなものはありますか?
エクセルのシートのイベントで、「更新後処理」のようなものはありますか? 例えば、 該当のセルに「あ」という文字を入力したのなら、「あああ」にする という事をしたいのですが、 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Value = "あ" Then Target.Value = "あああ" End If End Sub これだと、「あ」を入力しただけでは、何も起こらず、 その入力したセルをクリック(入力したセルに移動)すると、「あああ」になります。 これだと2度手間になるので、「あ」が入力されたと同時に、イベントを発生させたいのですが どのイベントを使えばいいのでしょうか?
- ベストアンサー
- オフィス系ソフト
お礼
回答ありがとうございます。 Private Sub Worksheet_Change-- でちゃんとエラーにならずにすみました。