Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1201 / 13645 ツリー ←次へ | 前へ→

【75678】ダブルクリックでシート移動 hamako 14/6/12(木) 19:55 質問[未読]
【75679】Re:ダブルクリックでシート移動 γ 14/6/12(木) 20:35 発言[未読]
【75683】Re:ダブルクリックでシート移動 hamako 14/6/12(木) 23:15 回答[未読]
【75685】Re:ダブルクリックでシート移動 γ 14/6/13(金) 7:07 回答[未読]
【75687】Re:ダブルクリックでシート移動 γ 14/6/13(金) 7:40 発言[未読]
【75690】Re:ダブルクリックでシート移動 hamako 14/6/13(金) 9:36 質問[未読]
【75691】補足 hamako 14/6/13(金) 10:58 発言[未読]
【75692】Re:補足 γ 14/6/13(金) 21:13 回答[未読]
【75699】Re:補足 hamako 14/6/16(月) 9:02 発言[未読]
【75703】Re:補足 γ 14/6/16(月) 19:57 回答[未読]
【75705】Re:補足 hamako 14/6/17(火) 9:32 発言[未読]
【75706】Re:補足 kanabun 14/6/17(火) 12:12 発言[未読]
【75707】Re:補足 kanabun 14/6/17(火) 12:43 発言[未読]
【75708】本当にありがとうございました。 hamako 14/6/17(火) 15:00 お礼[未読]
【75710】Re:本当にありがとうございました。 γ 14/6/18(水) 8:39 発言[未読]
【75711】Re:本当にありがとうございました。 kanabun 14/6/18(水) 9:44 発言[未読]

【75678】ダブルクリックでシート移動
質問  hamako  - 14/6/12(木) 19:55 -

引用なし
パスワード
   初めて利用します。よろしくお願いします。
★やりたい事★★★★★★★
エクセルは2010使用。
1.シート1のA1をダブルクリックするとシート2移動→シート2で選択したセルをダブルクリックすると
選択したセルの内容がシート1のA1に入る。
2.シート1のB1をダブルクリックすると今度はシート3に移動→シート3で選択したセルをダブルクリックすると
選択したセルの内容がシート1のB1に入る。
★★★★★★★★★★★★★★

1.については Alt+F11の画面の
「ThisWorkbook」の中に下記を入れたらできました。
(よくわからずネットからコピペしたらできてしまいました)

Dim ToCell As Range
Const shName2 As String = "シート2"


Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
Cancel = True
If Sh Is Sheets(shName2) Then
If ToCell Is Nothing Then
MsgBox "先に転記先のセルをクリックしてから、このシートでダブルクリックしてください"
Exit Sub
End If
ToCell.Value = Target.Value
Application.Goto ToCell
Set ToCell = Nothing
Else
Set ToCell = Target
Sheets(shName2).Activate
End If
End Sub

しかし、
これだと1.は私の望み通りの事ができるのですが
シート1内のセルをダブルクリックするとすべてシート2に飛んでしまうのです。
B1をダブルクリックした場合はシート3に飛んで2.のような事をしたいのです。
さらに欲をいうと
シート1のA1、B1以外のセルをダブルクリックした場合は
他のシートに飛ばないようにしたいです。

お手数ですがご教授ください。

【75679】Re:ダブルクリックでシート移動
発言  γ  - 14/6/12(木) 20:35 -

引用なし
パスワード
   ▼hamako さん:
基本的な事をお尋ねしますが、
シート1の操作を経由せずに、直接、シート2のセルをダブルクリックしたときは、
どのように考えるのですか?
履歴を考えるのかどうか、ということです。

【75683】Re:ダブルクリックでシート移動
回答  hamako  - 14/6/12(木) 23:15 -

引用なし
パスワード
   今、私がネットからコピペした
マクロだと、シート1の操作をせずにシート2の引用したいセルを
ダブルクリックすると、
"先に転記先のセルをクリックしてから、このシートでダブルクリックしてください"
と出るのでできればそのようにしたいです。

質問の回答になってるでしょうか。。。m(__)m

ちなみに、
売上伝票を発行する為のエクセルで、
シート1が売上伝票作成画面で
売上伝票はA1に得意先コード、
B1に作業コードの記載が必要であり、
シート2が得意先コード一覧
シート3が作業コード一覧というエクセルを作ってます。

どうかよろしくお願いしますm(__)m

【75685】Re:ダブルクリックでシート移動
回答  γ  - 14/6/13(金) 7:07 -

引用なし
パスワード
   こういうことですか。
Dim ToCell As Range
Const shName1 As String = "Sheet1"
Const shName2 As String = "Sheet2"
Const shName3 As String = "Sheet3"

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
  Cancel = True
  If Sh Is Sheets(shName2) Then
    If ToCell Is Nothing Then
      MsgBox "先に転記先のセルをクリックしてから、このシートでダブルクリックしてください"
      Exit Sub
    End If
    ToCell.Value = Target.Value
    Application.Goto ToCell
    Set ToCell = Nothing
  ElseIf Sh Is Sheets(shName3) Then
    If ToCell Is Nothing Then
      MsgBox "先に転記先のセルをクリックしてから、このシートでダブルクリックしてください"
      Exit Sub
    End If
    ToCell.Value = Target.Value
    Application.Goto ToCell
    Set ToCell = Nothing
  ElseIf Sh Is Sheets(shName1) Then
    Set ToCell = Target
    Select Case Target.Address
    Case "$A$1"
       Sheets(shName2).Activate
    Case "$B$1"
       Sheets(shName3).Activate
    End Select
  End If
End Sub

【75687】Re:ダブルクリックでシート移動
発言  γ  - 14/6/13(金) 7:40 -

引用なし
パスワード
   ちょっと恥ずかしいコードだったかな。
  Select Case Sh.Name
  Case shName2, shName3
  Case shName1
  End Select
で分岐するとよかった。

【75690】Re:ダブルクリックでシート移動
質問  hamako  - 14/6/13(金) 9:36 -

引用なし
パスワード
   返信、本当にありがとうございます。
ここまで教えて頂いてお恥ずかしく、大変申し訳ないのですが
まだできません・・・

すみません。コードの解読ができないんです。
ネットからコピペして、なんとなく加工して
なんとなくできるというばかりで。

★★★
教えて頂いた事を下記の通りにやってみたのですが、
間違っている箇所を訂正して
再度コードを送っていただけないでしょうかm(__)m
★★★

Alt+F11画面で
ThisWorkbookをダブルクリックし、そこに
頂いたコードを貼り付け(←貼り付ける場所あってますか?)

それから
質問を簡素にするために
「シート1」「A1・B1」などと書いたのですが、

実際は
シート1は「はじめに」という名前
シート2は「売上伝票」という名前
シート3は「得意先コード」という名前
シート4は「作業コード」という名前


売上伝票(シート2)画面のD12をダブルクリックすると
シート3(得意先コード)へジャンプ希望
売上伝票のC20、C21、C22、C23、C24の5つをダブルクリックすると
シート4(作業コード)へジャンプ希望

が本当の為、自分なりに下記のように加工しました。
(ある程度教えて頂ければ自分でできるかなと思ったのですが
全然だめでしたm(__)m・初めから言ってよ!だったら
ほんとすみません)

Dim ToCell As Range
Const shName1 As String = "はじめに"
Const shName2 As String = "売上伝票"
Const shName3 As String = "得意先コード"
Const shName4 As String = "作業コード"

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
  Cancel = True
  If Sh Is Sheets(shName3) Then
    If ToCell Is Nothing Then
      MsgBox "先に転記先のセルをクリックしてから、このシートでダブルクリックしてください"
      Exit Sub
    End If
    ToCell.Value = Target.Value
    Application.Goto ToCell
    Set ToCell = Nothing
  ElseIf Sh Is Sheets(shName4) Then
    If ToCell Is Nothing Then
      MsgBox "先に転記先のセルをクリックしてから、このシートでダブルクリックしてください"
      Exit Sub
    End If
    ToCell.Value = Target.Value
    Application.Goto ToCell
    Set ToCell = Nothing
  ElseIf Sh Is Sheets(shName2) Then
    Set ToCell = Target
    Select Case Target.Address
    Case "$D$12"
       Sheets(shName3).Activate
    Case "$C$20"
       Sheets(shName4).Activate
    End Select
  End If
End Sub


よろしくお願いしますm(__)m

【75691】補足
発言  hamako  - 14/6/13(金) 10:58 -

引用なし
パスワード
   さきほどの「このように加工してやってみました」というマクロだと

下記の事はできました。
D12をまずダブルクリックした後、
自分でシートを移動し、シート3の任意のセルをダブルクリックすると
シート2の画面に戻ってD12に挿入される(C20・C20・C21・・も同様)

しかし下記の事ができません。
シート2(売上伝票画面)のD12をダブルクリック→シート3(得意先コード)へ飛ぶ
シート2(売上伝票画面)のC20をダブルクリック→シート4(作業コード)へ飛ぶ


一番最初に
ネットからコピペしてできたという時のように
D12をダブルクリックでシート3へ飛ぶようにしたいのです
(一番最初のはどこのセルを選んでもシート3に飛んでしまうのですが)

可能なのでしょうか。

【75692】Re:補足
回答  γ  - 14/6/13(金) 21:13 -

引用なし
パスワード
   ▼hamako さん:
>しかし下記の事ができません。
>シート2(売上伝票画面)のD12をダブルクリック→シート3(得意先コード)へ飛ぶ
>シート2(売上伝票画面)のC20をダブルクリック→シート4(作業コード)へ飛ぶ

それは出来ていると思います。

> 売上伝票のC20、C21、C22、C23、C24の5つをダブルクリックすると
のところでしょう。

Select Caseのヘルプをよく確認して下さい。
    Case "$C$20", "$C$21", "$C$22", "$C$23", "$C$24"
       Sheets(shName4).Activate
のようにまとめて記述することができます。

なお、
   Select Case Target.Address(False,False) としておけば、      
   Case "C20", "C21", "C22", "C23", "C24"
   のように$は不要となります。

【75699】Re:補足
発言  hamako  - 14/6/16(月) 9:02 -

引用なし
パスワード
   返信遅くなり申し訳ございません。

シート2(売上伝票画面)のD12をダブルクリック→シート3(得意先コード)へ飛ぶ
シート2(売上伝票画面)のC20をダブルクリック→シート4(作業コード)へ飛ぶ

>>> それは出来ていると思います。
→やはりできないのですがなぜでしょうか。。


>>> 売上伝票のC20、C21、C22、C23、C24の5つをダブルクリックすると
>のところでしょう。
>Select Caseのヘルプをよく確認して下さい。
>    Case "$C$20", "$C$21", "$C$22", "$C$23", "$C$24"
>       Sheets(shName4).Activate
>のようにまとめて記述することができます。


→シート4には飛ばないのですが、
C20、C21、C22、C23、C24のいずれかをダブルクリックした後、
自分で手動でシートをシート4に移動すれば、シート4内のセルをダブルクリックすると
挿入&シート2に戻るようになりました!!
あとは一番初めにダブルクリックでシート4に飛べば完璧なのですが・・・


以下、今のコードです。
どこがおかしいかわかりますでしょうか。。


Dim ToCell As Range
Const shName1 As String = "はじめに"
Const shName2 As String = "売上伝票"
Const shName3 As String = "得意先コード"
Const shName4 As String = "作業コード"

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
  Cancel = True
  If Sh Is Sheets(shName3) Then
    If ToCell Is Nothing Then
      MsgBox "先に転記先のセルをクリックしてから、このシートでダブルクリックしてください"
      Exit Sub
    End If
    ToCell.Value = Target.Value
    Application.Goto ToCell
    Set ToCell = Nothing
  ElseIf Sh Is Sheets(shName4) Then
    If ToCell Is Nothing Then
      MsgBox "先に転記先のセルをクリックしてから、このシートでダブルクリックしてください"
      Exit Sub
    End If
    ToCell.Value = Target.Value
    Application.Goto ToCell
    Set ToCell = Nothing
  ElseIf Sh Is Sheets(shName2) Then
    Set ToCell = Target
    Select Case Target.Address
    Case "$D$12"
       Sheets(shName3).Activate
    Case "$C$20", "$C$21", "$C$22", "$C$23", "$C$24"
       Sheets(shName4).Activate

    End Select
  End If
End Sub

【75703】Re:補足
回答  γ  - 14/6/16(月) 19:57 -

引用なし
パスワード
   Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
の直ぐ次の行に
  Debug.Print Target.Address
を挿入してみてください。

> 売上伝票のC20、C21、C22、C23、C24の5つをダブルクリックすると
を実行したときに、イミディエイトウインドウに表示される結果を教えて下さい。

# 思い当たる節が無いわけではないが、ここは一つ正攻法で行きましょう。
# 問題解決の手法自体も勉強する価値があるものだからです。

【75705】Re:補足
発言  hamako  - 14/6/17(火) 9:32 -

引用なし
パスワード
   お手数をおかけして申し訳ございません。
返信ありがとうございます。

>Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
>の直ぐ次の行に
>  Debug.Print Target.Address
>を挿入してみてください。


挿入してみたのですが、変化ありません・・


>> 売上伝票のC20、C21、C22、C23、C24の5つをダブルクリックすると
>を実行したときに、イミディエイトウインドウに表示される結果を教えて下さい。

$C$20:$H$20
$C$21:$H$21
$C$22:$H$22
$C$23:$H$23
$C$24:$H$24

↑回答の仕方、あってますでしょうか
C20,C21,C22,C23、C24をダブルクリックした後、
Alt+F11画面の 表示→イミディエイトウインドウに表示されたものです。

>
># 思い当たる節が無いわけではないが、ここは一つ正攻法で行きましょう。
># 問題解決の手法自体も勉強する価値があるものだからです。

関係ないかもですが、
「D12」は D列からG列を結合・行は12〜15行目を結合して「D12」です
「C20」は D列からH列を結合・行は20行目のみ結合なしで「C20」です
(C21〜同じ)

私の知識不足の為、ご迷惑をおかけし、申し訳ございません。
よろしくおねがいいたします。

【75706】Re:補足
発言  kanabun  - 14/6/17(火) 12:12 -

引用なし
パスワード
   ▼hamako さん:
よこからすみません。

>挿入してみたのですが、変化ありません・・

>$C$20:$H$20
>$C$21:$H$21
>$C$22:$H$22
>$C$23:$H$23
>$C$24:$H$24
>
>↑回答の仕方、あってますでしょうか
>C20,C21,C22,C23、C24をダブルクリックした後、
>Alt+F11画面の 表示→イミディエイトウインドウに表示されたものです。
イミディエイト・ウィンドウにアドレスが表示されたのですから、
それが「変化」なのです。

>関係ないかもですが、
>「D12」は D列からG列を結合・行は12〜15行目を結合して「D12」です
>「C20」は D列からH列を結合・行は20行目のみ結合なしで「C20」です
>(C21〜同じ)

大いに関係あります。
たぶん、γさんの
>>># 思い当たる節が無いわけではないが、
というのも、このことだったのでしょう。

セルを結合していたら、C20単独セルだけのダブルクリックはできない
("C20"というセルアドレスは永久に返ってこない)ということを
あなたのほうから気付いてデバッグしてほしかったのでしょう。

要らぬお節介かもですが...
つぎは Intersect というのを調べてみてください。

  ElseIf Sh Is Sheets(shName2) Then
    Set toCell = Intersect(Range("D12"), Target)
    If Not toCell Is Nothing Then
      MsgBox "D12のときの処理"
       Sheets(shName3).Activate
    Else
      Set toCell = Intersect(Range("C20:C24"), Target)
      If Not toCell Is Nothing Then
        MsgBox "C20:C24 のいずれかのときの処理"
         Sheets(shName4).Activate
      End If
    End If
  End If

【75707】Re:補足
発言  kanabun  - 14/6/17(火) 12:43 -

引用なし
パスワード
   ↑すみません。シートの修飾を忘れてました


  ElseIf Sh Is Sheets(shName2) Then
    Set toCell = Intersect(Sh.Range("D12"), Target)
    If Not toCell Is Nothing Then
      MsgBox "D12のときの処理"
       Sheets(shName3).Activate
    Else
      Set toCell = Intersect(Sh.Range("C20:C24"), Target)
      If Not toCell Is Nothing Then
        MsgBox "C20:C24 のいずれかのときの処理"
         Sheets(shName4).Activate
      End If
    End If
  End If

【75708】本当にありがとうございました。
お礼  hamako  - 14/6/17(火) 15:00 -

引用なし
パスワード
   γ様・kanabun様

お二人に教えて頂いた事を試し、
私の作成したい形のものができました。

本当にお手数をおかけしました。
まだまだたくさん調べ中のマクロがあるのですが
こちらで質問しなくてもできるように
一つ一つ勉強していきたいと思います!

γ様には問いかけを頂き、
私からきちんとした回答がないまま
「できました」となってしまい、申し訳ございません。

本当にありがとうございました。

【75710】Re:本当にありがとうございました。
発言  γ  - 14/6/18(水) 8:39 -

引用なし
パスワード
   解決したようで、なによりです。
kanabunさん、フォローありがとうございました。

結合セルだろうとは思っていましたが、
デバッグ手法を知ってもらいたいと思い、長引きました。
デバッグはデバッグで、コーディングを同じくらい大切ですね。

ちなみに、最小限の修正で済まそうとすれば、
Target(1).Addressのようにして、
一つ目のセルだけで判定する方法もありますね。
それでは。

【75711】Re:本当にありがとうございました。
発言  kanabun  - 14/6/18(水) 9:44 -

引用なし
パスワード
   ▼γ さん:

> kanabunさん、フォローありがとうございました。

γさん、でしゃばりまして、すみません m(_ _)m

>ちなみに、最小限の修正で済まそうとすれば、
>Target(1).Addressのようにして、
>一つ目のセルだけで判定する方法もありますね。

そうか、そのほうが簡単でしたね(^^

> 14/6/18(水) 8:39
# きょうはお仕事先は 創立記念日でお休みでしょうか(^^

1201 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free