Excel VBA質問箱 IV

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

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


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

【38974】初心者ですがよろしくお願いします taka 06/6/15(木) 15:59 質問[未読]
【38977】Re:初心者ですがよろしくお願いします Blue 06/6/15(木) 16:23 質問[未読]
【38978】Re:初心者ですがよろしくお願いします taka 06/6/15(木) 16:28 質問[未読]
【38979】Re:初心者ですがよろしくお願いします Jaka 06/6/15(木) 16:31 発言[未読]
【38982】Re:初心者ですがよろしくお願いします taka 06/6/15(木) 16:37 質問[未読]
【38983】Re:初心者ですがよろしくお願いします Blue 06/6/15(木) 16:38 発言[未読]
【38988】Re:初心者ですがよろしくお願いします taka 06/6/15(木) 16:49 質問[未読]
【38990】Re:初心者ですがよろしくお願いします Blue 06/6/15(木) 17:02 発言[未読]
【39017】Re:初心者ですがよろしくお願いします taka 06/6/16(金) 9:22 お礼[未読]
【39018】Re:初心者ですがよろしくお願いします Blue 06/6/16(金) 9:25 質問[未読]
【39019】Re:初心者ですがよろしくお願いします taka 06/6/16(金) 9:30 質問[未読]
【39020】Re:初心者ですがよろしくお願いします Blue 06/6/16(金) 9:36 発言[未読]

【38974】初心者ですがよろしくお願いします
質問  taka  - 06/6/15(木) 15:59 -

引用なし
パスワード
   はじめまして

sheets(”入力”)のrange(”A1”)に1を入力するとsheets(”1”)のrange(”B1”)の値がsheets(”入力”)のrange(”B1”)へ出てくる。
sheets(”入力”)のrange(”A1”)に2を入力するとsheets(”2”)のrange(”B1”)の値がsheets(”入力”)のrange(”B1”)へ出てくる。
                 ・
                 ・
                 ・
                 ・

sheets(”入力”)のrange(”A1”)に50を入力するとsheets(”50”)のrange(”B1”)の値がsheets(”入力”)のrange(”B1”)へ出てくる。

ボタンへどのように入力すればよいですか?

kaoruさんの質問と同じ内容だと思うのですが、うまく実行できませんでした。
よろしくお願いします。

【38977】Re:初心者ですがよろしくお願いします
質問  Blue  - 06/6/15(木) 16:23 -

引用なし
パスワード
   ▼taka さん:
>ボタンへどのように入力すればよいですか?
ボタンへ入力するとは?

シート上のボタンを使って処理したいということでしょうか?

> sheets(”入力”)のrange(”A1”)に1を入力するとsheets(”1”)のrange(”B1”)の値がsheets(”入力”)のrange(”B1”)へ出てくる。
「入力すると」というタイミングであるならば、ボタンを使う出番が無いのですけど。

【38978】Re:初心者ですがよろしくお願いします
質問  taka  - 06/6/15(木) 16:28 -

引用なし
パスワード
   ▼Blue さん:
>▼taka さん:
>>ボタンへどのように入力すればよいですか?
>ボタンへ入力するとは?
>
>シート上のボタンを使って処理したいということでしょうか?
>
>> sheets(”入力”)のrange(”A1”)に1を入力するとsheets(”1”)のrange(”B1”)の値がsheets(”入力”)のrange(”B1”)へ出てくる。
>「入力すると」というタイミングであるならば、ボタンを使う出番が無いのですけど。

なるほど、ありがとうございます。
入力してenterを押した時に動作するには?
どうすればよいですか?

【38979】Re:初心者ですがよろしくお願いします
発言  Jaka  - 06/6/15(木) 16:31 -

引用なし
パスワード
   シート名が数字のまんまってのは、インデックス番号と間違えるから、
あまり使いたくないけど...。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim st As String
If Target.Address(0, 0) = "A1" Then
  If IsNumeric(Target.Value) Then
   If Target.Value > "0" And Target.Value <= "50" Then
     st = Target.Value
     Application.EnableEvents = False
     Range("B1").Value = Sheets(st).Range("B1").Value
     Application.EnableEvents = True
   End If
  End If
End If
End Sub

【38982】Re:初心者ですがよろしくお願いします
質問  taka  - 06/6/15(木) 16:37 -

引用なし
パスワード
   ▼Jaka さん:
>シート名が数字のまんまってのは、インデックス番号と間違えるから、
>あまり使いたくないけど...。
>
>Private Sub Worksheet_Change(ByVal Target As Range)
>Dim st As String
>If Target.Address(0, 0) = "A1" Then
>  If IsNumeric(Target.Value) Then
>   If Target.Value > "0" And Target.Value <= "50" Then
>     st = Target.Value
>     Application.EnableEvents = False
>     Range("B1").Value = Sheets(st).Range("B1").Value
>     Application.EnableEvents = True
>   End If
>  End If
>End If
>End Sub

ありがとうございます。私は本当に初心者なのでよくわかりませんが。
教えていただいたコマンドはどこへ記述すればよいのですか?

【38983】Re:初心者ですがよろしくお願いします
発言  Blue  - 06/6/15(木) 16:38 -

引用なし
パスワード
   ▼taka さん:
>入力してenterを押した時に動作するには?
>どうすればよいですか?
ということは、該当シートのChangeイベントあたりの作業になります。

プロジェクトエクスプローラの該当のシートモジュールを選択して
Worksheet_SelectionChangeの中にコードを書くことになります。

これは、コードエディタの上にあるコンボボックスを
┌─────────┬─┬─────────┬─┐
│Worksheet     │▼│Change      │▼│
├─────────┴─┴─────────┴─┤

とすることで、

Private Sub Worksheet_Change(ByVal Target As Range)

End Sub

というコードが自動生成されます。
引数の Target は変更しているセルの情報です。
それを見ることによって、どこのセルを変更したか等確認できます。

また、Changeイベントの中で、そのシート他のセルを変更すると
そのタイミングで Changeイベントが呼ばれてしまいます。
今回のような処理の場合、そうなると都合が悪いので、
Application.EnableEventsプロパティをFalseにして制御してあげます。


と、書いている間にJakaさんがコードを書いてくださったのでそれを参考にしてみてください。

【38988】Re:初心者ですがよろしくお願いします
質問  taka  - 06/6/15(木) 16:49 -

引用なし
パスワード
   ▼Blue さん:
>▼taka さん:
>>入力してenterを押した時に動作するには?
>>どうすればよいですか?
>ということは、該当シートのChangeイベントあたりの作業になります。
>
>プロジェクトエクスプローラの該当のシートモジュールを選択して
>Worksheet_SelectionChangeの中にコードを書くことになります。
>
>これは、コードエディタの上にあるコンボボックスを
>┌─────────┬─┬─────────┬─┐
>│Worksheet     │▼│Change      │▼│
>├─────────┴─┴─────────┴─┤
>〜
>とすることで、
>
>Private Sub Worksheet_Change(ByVal Target As Range)
>
>End Sub
>
>というコードが自動生成されます。
>引数の Target は変更しているセルの情報です。
>それを見ることによって、どこのセルを変更したか等確認できます。
>
>また、Changeイベントの中で、そのシート他のセルを変更すると
>そのタイミングで Changeイベントが呼ばれてしまいます。
>今回のような処理の場合、そうなると都合が悪いので、
>Application.EnableEventsプロパティをFalseにして制御してあげます。
>
>
>と、書いている間にJakaさんがコードを書いてくださったのでそれを参考にしてみてください。


ありがとうございます どうしても上手くうごきません・・・・。

【38990】Re:初心者ですがよろしくお願いします
発言  Blue  - 06/6/15(木) 17:02 -

引用なし
パスワード
   ▼taka さん:
>ありがとうございます どうしても上手くうごきません・・・・。
うまく動かないとは具体的にどうなってしまうのでしょうか?


Jakaさんのコードにコメント+エラー出力を入れました。
これで理解してみてください。

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim st As String
  ' 対象となるセルは"A1"だけ
  If Target.Address(0, 0) = "A1" Then
     ' セルの値が数字である場合
     If IsNumeric(Target.Value) Then
       ' セルの値が 1〜50 の場合
       If Target.Value > "0" And Target.Value <= "50" Then
         ' セルの値を取得
         st = Target.Value
         ' B1を変更するのでChangeイベントを起こさないようにする
         Application.EnableEvents = False

         On Error Resume Next
         ' B1に A1 の値をシート名に持つシートの B1 の値を入れる
         Range("B1").Value = Sheets(st).Range("B1").Value
        
        If Err.Number <> 0 Then
           MsgBox "'" & st & "'ってシートないやんけ。"
        End If

         On Error GoTo 0
         ' Changeイベントのイベントを抑制したのを元に戻す
         Application.EnableEvents = True
       Else
         MsgBox "1〜50の値じゃないやん。"
       End If
     Else
       MsgBox "数字じゃないやん。"
     End If
  End If
End Sub

【39017】Re:初心者ですがよろしくお願いします
お礼  taka  - 06/6/16(金) 9:22 -

引用なし
パスワード
   ▼Blue さん:
>▼taka さん:
>>ありがとうございます どうしても上手くうごきません・・・・。
>うまく動かないとは具体的にどうなってしまうのでしょうか?
>
>
>Jakaさんのコードにコメント+エラー出力を入れました。
>これで理解してみてください。
>
>Private Sub Worksheet_Change(ByVal Target As Range)
>  Dim st As String
>  ' 対象となるセルは"A1"だけ
>  If Target.Address(0, 0) = "A1" Then
>     ' セルの値が数字である場合
>     If IsNumeric(Target.Value) Then
>       ' セルの値が 1〜50 の場合
>       If Target.Value > "0" And Target.Value <= "50" Then
>         ' セルの値を取得
>         st = Target.Value
>         ' B1を変更するのでChangeイベントを起こさないようにする
>         Application.EnableEvents = False
>
>         On Error Resume Next
>         ' B1に A1 の値をシート名に持つシートの B1 の値を入れる
>         Range("B1").Value = Sheets(st).Range("B1").Value
>        
>        If Err.Number <> 0 Then
>           MsgBox "'" & st & "'ってシートないやんけ。"
>        End If
>
>         On Error GoTo 0
>         ' Changeイベントのイベントを抑制したのを元に戻す
>         Application.EnableEvents = True
>       Else
>         MsgBox "1〜50の値じゃないやん。"
>       End If
>     Else
>       MsgBox "数字じゃないやん。"
>     End If
>  End If
>End Sub

おはようございます。昨日はありがとうございました。
上手くいきました。説明もとてもわかりやすかったです。

【39018】Re:初心者ですがよろしくお願いします
質問  Blue  - 06/6/16(金) 9:25 -

引用なし
パスワード
   結局なにが不味かったんでしょうか?

コードの処理内容はうまくいかなかったときと何も変わっていませんので。

【39019】Re:初心者ですがよろしくお願いします
質問  taka  - 06/6/16(金) 9:30 -

引用なし
パスワード
   ▼Blue さん:
>▼taka さん:
>>ありがとうございます どうしても上手くうごきません・・・・。
>うまく動かないとは具体的にどうなってしまうのでしょうか?
>
>
>Jakaさんのコードにコメント+エラー出力を入れました。
>これで理解してみてください。
>
>Private Sub Worksheet_Change(ByVal Target As Range)
>  Dim st As String
>  ' 対象となるセルは"A1"だけ
>  If Target.Address(0, 0) = "A1" Then
>     ' セルの値が数字である場合
>     If IsNumeric(Target.Value) Then
>       ' セルの値が 1〜50 の場合
>       If Target.Value > "0" And Target.Value <= "50" Then
>         ' セルの値を取得
>         st = Target.Value
>         ' B1を変更するのでChangeイベントを起こさないようにする
>         Application.EnableEvents = False
>
>         On Error Resume Next
>         ' B1に A1 の値をシート名に持つシートの B1 の値を入れる
>         Range("B1").Value = Sheets(st).Range("B1").Value
>        
>        If Err.Number <> 0 Then
>           MsgBox "'" & st & "'ってシートないやんけ。"
>        End If
>
>         On Error GoTo 0
>         ' Changeイベントのイベントを抑制したのを元に戻す
>         Application.EnableEvents = True
>       Else
>         MsgBox "1〜50の値じゃないやん。"
>       End If
>     Else
>       MsgBox "数字じゃないやん。"
>     End If
>  End If
>End Sub

おはようございます。昨日はありがとうございました。
上手くいきました。説明もとてもわかりやすかったです。

次なんですが、これを利用して、フォームのコンボボックスを利用して
リンクするセルをA1に設定してやるにはどうすればいいですか?

【39020】Re:初心者ですがよろしくお願いします
発言  Blue  - 06/6/16(金) 9:36 -

引用なし
パスワード
   最初の質問と違う質問であれば、新たにスレッドをたててください。
このスレが関連するのであれば、URLを張ってください。

また、題名は ”見ただけで、質問の内容がわかりやすい” ものにしてください。

初心者であることやお願いしたいということは本文中で説明すればいいことです。
ついでに、他人の文章を引用するとき、なるべく必要最低限になるようにしてください。

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