- ベストアンサー
Excel VBAについて
- Excel VBAでダブルクリックイベントを使用して特定の列の値を他のシートにコピーする方法について教えてください。
- 指示ではF列の値を人件費シートにコピーするように指定されていますが、G列の値を外注費シートにコピーする方法がわかりません。
- 書き方が間違っている可能性があるので、正しい方法を教えていただけないでしょうか。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
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
その他の回答 (3)
- keithin
- ベストアンサー率66% (5278/7941)
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 みたいな。 #でも「行先のシートを開く」ってホントに必要ですかね。
お礼
有り難う御座います 書き方によっていろんな事出来るんですね 勉強になります
- real beatin(@realbeatin)
- ベストアンサー率82% (174/211)
#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 ' ' ==============================
お礼
有り難う御座います! できました
- real beatin(@realbeatin)
- ベストアンサー率82% (174/211)
こんにちは。 イベントを扱うプロシージャは、ひとつにまとめないとなりません。 ご提示の内容ですと、以下ののような例にまとめる事ができます。 また、シート上のイベントプロシージャでは、ご提示のように 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 ' ' ==============================
補足
realbeatinさんありがとうございます。 Worksheets(sShNm).Cells(Rows.Count, "A").End(xlUp).Offset(1).Value = Target.Offset(, -5).Value F列の場合はOffset(, -5)でいいのですがG列の場合はOffset(, -6)がほしいのですがどうしたらよいでしょうか 本当に何も分からなくて申し訳ありません。
お礼
有り難う御座います。 VBAを一生懸命覚えたいと思っておるんですがなかなか覚えられません・・・ ちょっと入れてみたのですが、人件費の方は問題無いのですが、外注費の方はシートはひらくのですが、A1セルの値の代入ができませんでした もしこのプログラムが間違っているならご教授いただければ幸いです