入力されている行を判別する方法

このQ&Aのポイント
  • エクセルVBAを使用して、入力されている行を判別する方法について教えてください。
  • 特定のセルをダブルクリックした場合に別のセルに値を入力する方法について教えてください。
  • 特定のセルに値が入力されている場合に、別のセルに次々と値を入力する方法について教えてください。
回答を見る
  • ベストアンサー

入力されている行を判別する方法

こんにちは。 私の質問に関心を持って下さりありがとうございます。 教えて頂いてばかりで恐縮ですが、エクセルVBAに詳しくて親切な方がいらっしゃいましたら教えていただけないでしょうか。 例えば、Sheet1のセルA1をダブルクリックして、Sheet2のセルC10にSheet1のセルA1の値を入力する場合、以下のコードで処理できます。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Target = Range("A1") Then Cancel = True Worksheets("Sheet2").Range("C10") = Worksheets("Sheet1").Range("A1") End If End SUB でも、このコードだと、Sheet1のセルA1を何度ダブルクリックしてもSheet2のセルC10にしか入力されません。 Sheet2のセルC10に入力されている場合、それを判別して、C10の下のセルC11に入力され、更にC11に入力されている場合にはC12に入力されるようにしたいのですが、よく分かりません。 ご存知の方がいらっしゃいましたら、どうかご教授いただけないでしょうか。 宜しくお願い致します。

noname#151222
noname#151222

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

  • ベストアンサー
  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.2

VBA 最後の行 などで検索するといくつも回答があります。 私たちが最もよく使う方法が、 シートの最終行から上へ移動して空白でない行のひとつ下 といった感じで使いますが MSGBOX=Worksheets("Sheet2").Cells(Rows.Count, 3).End(xlUp).Row+1 とか Msgbox=Worksheets("Sheet2").Range("C" & Rows.Count).End(xlUp).Row+1 で最後の行番号が得られます。 Worksheets("Sheet2").Range("C" & Rows.Count).End(xlUp).).Offset(1).Value = Target.Value http://www.niji.or.jp/home/toru/notes/8.html などを参考にしてください。 それと Range("A1") などとセルを指定した後には、必ず Value などプロパティを指定してください。 エクセルの場合、省略すると自動で Valueになりますが If Target = Range("A1") Then は If Target.Addrrss = Range("A1").Address Then としなければ、おかしいことに気が付くと思います。 No1の方がおっしゃるように If Target.Addrrss = "$A$1" Then でも同じ結果です。 一度、どこかに Msgbox Target.Address と入れてみて表示される内容を確認してみてください。

noname#151222
質問者

お礼

行番号についてのご教授ありがとうございました。 とても参考になりました。なんとか出来そうです。 エクセル初心者なので毎日四苦八苦しています。 皆様のご親切に心から感謝致します。 お一人の方だけをベストアンサーに選ぶのは心苦しいのですが、バージョン違いでも使えるコードをご教授くださったNo.2の方をベストアンサーにさせて頂きます。 皆様、本当にありがとうございました。

その他の回答 (1)

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

今のマクロを削除して,次のマクロに差し替えます。 private sub Worksheet_BeforeDoubleClick(byval Target as excel.range, cancel as boolean) if target.address <> "$A$1" then exit sub worksheets("Sheet2").range("C65536").end(xlup).offset(1).value = target.value cancel = true end sub シート2の「C9セル」に(ストッパーとして)何か「タイトル」を記入しておいてから,シート1のA1をWクリックする。 #補足 アナタの今のマクロでやっている If Target = Range("A1") Then という検査方法は適当ではない(実際には結果オーライになりますが)ので,上述ではそこも参考にしてください。

noname#151222
質問者

お礼

具体的なコードを教えてくださりありがとうございました。 ご指摘も感謝致します。嬉しいです。

関連するQ&A

  • ダブルクリックで自動入力

    初心者です。教えて下さい。 一つのBOOKに二つのSheetがあります。 Sheet”データ”のA列に番号が入力してあり、そのセルをダブルクリックすると Sheet”印刷”の(A18)にダブルクリックした番号が入力され、 2回目からは前に入力したセルの一つ下に入力されるようにしたいのですが・・ 下記を自分で作ってみましたが、何度やっても(A18)にしか自動入力されません。 どのようにしたら最終行の下に入力されるようになるのでしょうか? 色々調べてみましたが分かりませんでした・・・宜しくお願い致します。 Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) If Target.Count > 1 Then Exit Sub If Target.Column <> 1 Then Exit Sub Cancel = True With Worksheets("印刷") MyRange = Range("A18").End(xlUp).Offset(1).Address .Range(MyRange).Value = Target.Value Application.Goto .Range(MyRange) End With End Sub

  • どこが間違ってますか? (エクセルVBAです)

    質問をご覧くださりありがとうございます。 どなたか助けていただけないでしょうか。 以下のコードの場合、B2セルをダブルクリックすればシート(1)が開くと思っていたのですが、B2以外のセルをダブルクリックしてもシート(1)が開いてしまいます。 どこが悪いのでしょうか。 詳しい方がいらっしゃいましたら、どうか教えてください。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, cancel As Boolean) If Target = Range("B2") Then cancel = True Worksheets("シート(1)").Activate End If End Sub どうか、宜しくお願いいたします。

  • EXCELマクロでのシート間のデータ同期方法

    質問させていただきます。 EXCELにて、"シート1"のA1~C3と"シート2"のD4~F6を 同期化したく考えております。 ・いわゆる一方のシートが「読み取り専用」になってしまうリンク貼り付けではなく、シート1、シート2相互が書き換え可能の同期化です。 ・A1とD4、B3とE6、のように互いに照合箇所のセル同士を同期反映させたいと考えております。 なお、他の質問を参照したところ、 シート1のA1とシート2のD4の単一セルを同期かする方法は確認できました。(以下参照) ***************************************************************** シート1のコードは Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A$1" Then Worksheets("シート2").Range("D4") = Target End If End Sub シート2のコードは Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$D$4" Then Worksheets("シート1").Range("A1") = Target End If End Sub *************************************************************** これを参考にVBAの シート1のコードエディターに Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A$2" Then Worksheets("シート2").Range("D5") = Target End If End Sub シート2のコードエディターに Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$D$5" Then Worksheets("シート2").Range("A2") = Target End If End Sub というように追記していったのですが、エラーとなってしまいます。 お詳しい方がおられましたらお願いいたします。

  • Excel VBAについて

    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, cancel As Boolean) If Intersect(Target, Range("F:F")) Is Nothing Then Exit Sub Application.Goto Worksheets("人件費").Range("A1") Worksheets("人件費").Cells(Rows.Count, "A").End(xlUp).Offset(1).Value = Target.Offset(, -5).Value cancel = True End Sub Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, cancel As Boolean) If Intersect(Target, Range("G:G")) Is Nothing Then Exit Sub Application.Goto Worksheets("外注費").Range("A1") Worksheets("外注費").Cells(Rows.Count, "A").End(xlUp).Offset(1).Value = Target.Offset(, -5).Value cancel = True End Sub 上の指令はFの列をダブルクリックすると人件費のシートが開いてAある値を人件費の新しいセルのAに代入する指令ですが それをG列ダブルクリックで外注費シートに同じようにやろうと思いましたが出来ません。 たぶん根本的に書き方が間違っているのかと思われますが、ご指導のほどお願いします。

  • Private Sub Worksheet_BeforeDoubleC

    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Target.Column = 4 Then Target.Value = Date End If If Target.Column = 5 Then Target.Value = Date End If End Sub これは、他の方の回答で4列と5列のどこかをダブルクリックすると日付が入力されました。 しかし、シートの保護を入れるとダブルクリックしても入力されません。 それで、例えば、B3セルとかC3セルとかの特定のセルをダブルクリックすると日付が入力されるようにできませんか?宜しくお願いします。

  • Excelでシート名と最終更新日を自動表示したい

    Excelを使って (1)セルA1に入れた名目をシート名にし (2)セルH1には、最終更新日を自動で入れたいです。 調べた結果、 シート名を右クリックして「コードの表示」から (1)は Private Sub Worksheet_Change(ByVal Target As Range) Sheets(1).Name = Range("B1") End Sub を入れてうまくいきましたが、 (2)は Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)  If ThisWorkbook.Saved = False Then   Worksheets("Sheet1").Range("H1").Value = Date  End If End Sub を入れてみましたが(←調べましたもの) うまくいきませんでした。 単純に、 Private Sub Worksheet_Change(ByVal Target As Range) Sheets(1).Name = Range("B1") End Sub Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)  If ThisWorkbook.Saved = False Then   Worksheets("Sheet1").Range("H1").Value = Date  End If End Sub とつなげて入れるのではだめなんでしょうか? それとも、(2)の何かが間違っていますか? ご教授願います。

  • エクセルにてダブルクッリクしたときの動作

    エクセルにて特定のセルをダブルクリックをした時に日付を表示させたくて以下のマクロを組みました。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range,Cancel As Boolean) If intersect(Target, Range("A1")) Is Nothing Then Exit Sub If ActiveCell = "" Then ActiveCell = Format(date, "yyyy") Cancel = True End If End Sub この場合A1セルをダブルクリックした時のみ西暦が入力されるようになっていますが、他のセルで、例えばB1セルでは月、C1セルでは日にちをダブルクリックで入力させるにはどうしたら良いでしょうか? If intersect(Target, Range("A1")) Is Nothing Then Exit Sub のTarget, Rangeを書き換えて複数このマクロを書き込んだのですがうまく動作しなくて。 知恵を貸していただけると助かります。

  • VBA ダブルクリックで行に色をつける方法

    VBAでダブルクリックしたセルを含む行に色をつけたいです。 セルに色をつけるマクロは書いた(下記)のですが、これを行全体に色付けしたいのですが、 うまくいきません。 どなたかご教授ください。 Private Sub Worksheet_BeforeDoubleClick _ (ByVal Target As Range, Cancel As Boolean) If Not Application.Intersect _ (Target, Range("A3").CurrentRegion) _ Is Nothing Then With Target.Interior If .Color = vbRed Then .Color = xlNone Else .Color = vbRed End If End With Cancel = True End If End Sub よろしくお願いします。

  • エクセル マクロを利用して繰り返して入力する方法

    マクロで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 どなたかご存じの方教えて下さい

  • 印刷後のVBAの実行 (2)

    Private Sub Workbook_BeforePrint(Cancel As Boolean)   If ActiveSheet.Name = "Sheet1" Then     If Range("D6").Value = "" Then       Cancel = True       MsgBox ("名前を入力してください")       Range("D6").Select       Exit Sub     End If   Else     If ActiveSheet.Name = "Sheet2" Then       If Range("C11").Value = "" Then         Cancel = True         MsgBox ("受付時間を入力してください")         Range("C11").Select         Exit Sub       End If     Else              Exit Sub     End If   End If   ActiveSheet.Range("A70:Y70").Copy   If Worksheets("Sheet3").Range("A1").Value = "" Then     Worksheets("Sheet3").Range("A1").PasteSpecial Paste:=xlPasteValues   Else     Worksheets("Sheet3").Range("A65536").End(xlUp).Offset(1, 0).PasteSpecial _       Paste:=xlPasteValues   End If   Application.CutCopyMode = False   ActiveSheet.Range("A1").Select End Sub 先日、上記のコードを回答者の方から教えてもらい、とても助かっていますが sheet1のD5に「不要」という文字が入っていた場合、 sheet3への貼り付け(23~30行目の作業)をキャンセルして、最後にsheet1のA1を選択するようにはどの様にしたらいいでしょうか?

専門家に質問してみよう