• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excel VBAについて)

Excel VBAについて

このQ&Aのポイント
  • Excel VBAでダブルクリックイベントを使用して特定の列の値を他のシートにコピーする方法について教えてください。
  • 指示ではF列の値を人件費シートにコピーするように指定されていますが、G列の値を外注費シートにコピーする方法がわかりません。
  • 書き方が間違っている可能性があるので、正しい方法を教えていただけないでしょうか。

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

  • ベストアンサー
  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.1

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

Eccentrici
質問者

お礼

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

その他の回答 (3)

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.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 みたいな。 #でも「行先のシートを開く」ってホントに必要ですかね。

Eccentrici
質問者

お礼

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

回答No.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 ' ' ==============================

Eccentrici
質問者

お礼

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

回答No.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 ' ' ==============================

Eccentrici
質問者

補足

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

関連するQ&A