こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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列ダブルクリックで外注費シートに同じようにやろうと思いましたが出来ません。
たぶん根本的に書き方が間違っているのかと思われますが、ご指導のほどお願いします。

投稿日時 - 2015-02-24 10:39:57

QNo.8923755

困ってます

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

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, cancel As Boolean)
は1シートに付き一つしか設定できません。
ですのでIf文での制御にするしかないでしょうね。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, cancel As Boolean)
COL_F:
If Intersect(Target, Range("F:F")) Is Nothing Then Goto COL_G
Application.Goto Worksheets("人件費").Range("A1")
Worksheets("人件費").Cells(Rows.Count, "A").End(xlUp).Offset(1).Value = Target.Offset(, -5).Value
cancel = True
Goto COL_END
COL_G:
If Intersect(Target, Range("G:G")) Is Nothing Then Goto COL_END
Application.Goto Worksheets("外注費").Range("A1")
Worksheets("外注費").Cells(Rows.Count, "A").End(xlUp).Offset(1).Value = Target.Offset(, -5).Value
cancel = True
COL_END:
End Sub

投稿日時 - 2015-02-24 11:02:55

お礼

有り難う御座います。
VBAを一生懸命覚えたいと思っておるんですがなかなか覚えられません・・・
ちょっと入れてみたのですが、人件費の方は問題無いのですが、外注費の方はシートはひらくのですが、A1セルの値の代入ができませんでした
もしこのプログラムが間違っているならご教授いただければ幸いです

投稿日時 - 2015-02-24 11:22:13

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

private sub Worksheet_BeforeDoubleClick(byval Target as excel.range, cancel as boolean)
 if application.intersect(target, range("F:G")) is nothing then exit sub
 application.goto worksheets(iif(target.column = 6, "人件費", "外注費")).range("A65536").end(xlup).offset(1)
 activecell.value = cells(target.row, "A").value
 cancel = true
end sub
みたいな。


#でも「行先のシートを開く」ってホントに必要ですかね。

投稿日時 - 2015-02-25 00:10:22

お礼

有り難う御座います
書き方によっていろんな事出来るんですね
勉強になります

投稿日時 - 2015-02-25 16:03:14

ANo.3

#2です。補足拝見しました。

どちらの列であっても、
ダブルクリックした行のA列の値を採る、ということでしたら、
例えばこんな風にします。

' ' ==============================

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean)
Dim sShNm As String
  If Intersect(Target, Range("F:G")) Is Nothing Then Exit Sub
  Select Case Split(Target.EntireColumn.Address(0, 0), ":")(0)
  Case "F"
    sShNm = "人件費"
  Case "G"
    sShNm = "外注費"
  End Select
  Application.Goto Worksheets(sShNm).Range("A1")
  Worksheets(sShNm).Cells(Rows.Count, "A").End(xlUp).Offset(1).Value = Target.EntireRow.Cells(1).Value
  Cancel = True
End Sub

' ' ==============================

投稿日時 - 2015-02-24 17:29:43

お礼

有り難う御座います!
できました

投稿日時 - 2015-02-25 16:02:36

ANo.2

こんにちは。

イベントを扱うプロシージャは、ひとつにまとめないとなりません。
ご提示の内容ですと、以下ののような例にまとめる事ができます。

また、シート上のイベントプロシージャでは、ご提示のように
  If 条件 Then Exit Sub
という書式で処理を中止して抜ける記述がお奨めです。

Select Case を使って、F列とG列と相違点だけをまとめています。
たまたまシート名以外はすべて共通の記述でしたので、
このような書き方をしていますが、他に相違がある場合は
相違する処理内容を
  Case "F"
  Case "G"
の配下に書いて分岐させます。

' ' ==============================

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean)
Dim sShNm As String
  If Intersect(Target, Range("F:G")) Is Nothing Then Exit Sub
  Select Case Split(Target.EntireColumn.Address(0, 0), ":")(0)
  Case "F"
    sShNm = "人件費"
  Case "G"
    sShNm = "外注費"
  End Select
  Application.Goto Worksheets(sShNm).Range("A1")
  Worksheets(sShNm).Cells(Rows.Count, "A").End(xlUp).Offset(1).Value = Target.Offset(, -5).Value
  Cancel = True
End Sub

' ' ==============================

投稿日時 - 2015-02-24 15:45:21

補足

realbeatinさんありがとうございます。
Worksheets(sShNm).Cells(Rows.Count, "A").End(xlUp).Offset(1).Value = Target.Offset(, -5).Value
F列の場合はOffset(, -5)でいいのですがG列の場合はOffset(, -6)がほしいのですがどうしたらよいでしょうか
本当に何も分からなくて申し訳ありません。

投稿日時 - 2015-02-24 17:01:28

あなたにオススメの質問