Excel VBA質問箱 IV

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

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


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

【39311】コードを省略したい 初心者 06/6/22(木) 10:04 質問[未読]
【39313】Re:コードを省略したい Jaka 06/6/22(木) 10:41 回答[未読]
【39322】Re:コードを省略したい 初心者 06/6/22(木) 11:43 お礼[未読]
【39314】Re:コードを省略したい Statis 06/6/22(木) 10:41 回答[未読]
【39323】Re:コードを省略したい 初心者 06/6/22(木) 11:44 お礼[未読]
【39330】Re:コードを省略したい Statis 06/6/22(木) 12:22 回答[未読]
【39333】Re:コードを省略したい 初心者 06/6/22(木) 13:05 お礼[未読]
【39335】Re:コードを省略したい 初心者 06/6/22(木) 13:29 質問[未読]
【39343】Re:コードを省略したい Statis 06/6/22(木) 14:49 発言[未読]
【39344】Re:コードを省略したい 初心者 06/6/22(木) 14:52 発言[未読]
【39361】Re:コードを省略したい Statis 06/6/22(木) 16:09 回答[未読]
【39362】Re:コードを省略したい 初心者 06/6/22(木) 16:12 お礼[未読]
【39363】Re:コードを省略したい 初心者 06/6/22(木) 16:24 質問[未読]
【39379】Re:コードを省略したい Statis 06/6/23(金) 8:43 回答[未読]
【39381】Re:コードを省略したい 初心者 06/6/23(金) 8:47 お礼[未読]

【39311】コードを省略したい
質問  初心者  - 06/6/22(木) 10:04 -

引用なし
パスワード
   おはようございます。
いつもお世話になっています。
現在フォーム上にコンボボックス・テキストボックス・チェックボックスなどをはりつけ、sheetには50人分を作り、フォームと同じような様式のsheetを作っています。名前のコンボボックスより、選択すると、フォーム上にその人の情報が現れます。そこで打ち替えてボタンを押すと、その人のsheetに上書きされます。
下記のコード(一部分)は登録する際使うものです。オプションボタンやチェックボタンが沢山あり、ややこしく感じるのですが、もっと省略できる方法はありますか?

Dim MyS As String
MyS = Me.ComboBox1.Value

Worksheets(MyS).Range("I7").Value = TextBox4.Value
Worksheets(MyS).Range("AK3").Value = ComboBox2.Value

If OptionButton1 = True Then
  Worksheets(MyS).Range("BB8").Value = "1"
 ElseIf OptionButton2 = True Then
  Worksheets(MyS).Range("BB8").Value = "2"
 ElseIf OptionButton3 = True Then
  Worksheets(MyS).Range("BB8").Value = "3"
 ElseIf OptionButton4 = True Then
  Worksheets(MyS).Range("BB8").Value = "4"
 ElseIf OptionButton5 = True Then
  Worksheets(MyS).Range("BB8").Value = "5"
End If

Worksheets(MyS).Range("BB66").Value = CheckBox1.Value
Worksheets(MyS).Range("BC66").Value = CheckBox2.Value
Worksheets(MyS).Range("BD66").Value = CheckBox3.Value
Worksheets(MyS).Range("BE66").Value = CheckBox4.Value
              ・
              ・    
              ・ 
              ・
              ・

【39313】Re:コードを省略したい
回答  Jaka  - 06/6/22(木) 10:41 -

引用なし
パスワード
   For i = 1 To 6
 If Me.Controls("OptionButton" & i) = True Then
   Worksheets(MyS).Range("BB8").Value = i
 End If
Next

For i = 1 To 6
  Worksheets(MyS).Cells(66, 53 + i).Value = Me.Controls("CheckBox" & i).Value
Next

【39314】Re:コードを省略したい
回答  Statis E-MAIL  - 06/6/22(木) 10:41 -

引用なし
パスワード
   こんにちは

すべてUserFormのコントロールですね。

こんな感じです(コードをまとめただけですので)

Private Sub CommandButton1_Click()
Dim i As Long

On Error GoTo End_Len
With Worksheets(Me.ComboBox1.Value)
   On Error GoTo 0
   .Range("I7").Value = Me.TextBox4.Value
   .Range("AK3").Value = Me.ComboBox2.Value
   For i = 1 To 5
     If Me.Controls("OptionButton" & i) = True Then
      .Range("BB8").Value = i
      Exit For
     End If
   Next i
   For i = 1 To 10
     .Cells(66, 53 + i).Value = Me.Controls("CheckBox" & i).Value
   Next i
End With
Exit Sub

End_Len:
  MsgBox Me.ComboBox1.Value & "と言うシートがありません", vbCritical
End Sub

【39322】Re:コードを省略したい
お礼  初心者  - 06/6/22(木) 11:43 -

引用なし
パスワード
   ▼Jaka さん:
>For i = 1 To 6
> If Me.Controls("OptionButton" & i) = True Then
>   Worksheets(MyS).Range("BB8").Value = i
> End If
>Next
>
>For i = 1 To 6
>  Worksheets(MyS).Cells(66, 53 + i).Value = Me.Controls("CheckBox" & i).Value
>Next

ありがとうございます。
もしよろしければ説明を記入していただければ助かります。
初心者でコードの意味があまりわからないので・・・。

【39323】Re:コードを省略したい
お礼  初心者  - 06/6/22(木) 11:44 -

引用なし
パスワード
   ▼Statis さん:
>こんにちは
>
>すべてUserFormのコントロールですね。
>
>こんな感じです(コードをまとめただけですので)
>
>Private Sub CommandButton1_Click()
>Dim i As Long
>
>On Error GoTo End_Len
>With Worksheets(Me.ComboBox1.Value)
>   On Error GoTo 0
>   .Range("I7").Value = Me.TextBox4.Value
>   .Range("AK3").Value = Me.ComboBox2.Value
>   For i = 1 To 5
>     If Me.Controls("OptionButton" & i) = True Then
>      .Range("BB8").Value = i
>      Exit For
>     End If
>   Next i
>   For i = 1 To 10
>     .Cells(66, 53 + i).Value = Me.Controls("CheckBox" & i).Value
>   Next i
>End With
>Exit Sub
>
>End_Len:
>  MsgBox Me.ComboBox1.Value & "と言うシートがありません", vbCritical
>End Sub

ありがとうございます。
初心者な者で、できれば説明を記入していただければ助かります。

【39330】Re:コードを省略したい
回答  Statis  - 06/6/22(木) 12:22 -

引用なし
パスワード
   こんにちは


Private Sub CommandButton1_Click()
Dim i As Long
'On Error GoToステートメントにてErr処理
'コンボボックスの値のシートが無い場合「End_Len」に飛ぶ
On Error GoTo End_Len
With Worksheets(Me.ComboBox1.Value)
  'Err処理を初期化
   On Error GoTo 0
   '該当のセルに値を代入
   .Range("I7").Value = Me.TextBox4.Value
   .Range("AK3").Value = Me.ComboBox2.Value
   'どのボタンにチェックがあるかオプションボタンの個数分ループにて確認
   For i = 1 To 5
     If Me.Controls("OptionButton" & i) = True Then
      'チェックがあったオプションボタンの番号をセルに代入
      .Range("BB8").Value = i
      'ループを抜ける
      Exit For
     End If
   Next i
   'チェックボックスにチェック有無を個数分ループにて確認
   For i = 1 To 10
     'セルBB6か右へ各チックボックスのチェック有無を表示
     .Cells(66, 53 + i).Value = Me.Controls("CheckBox" & i).Value
   Next i
End With
'Subプロシージャを抜ける
Exit Sub
'On Error GoToステートメントErrが出た場合ここに飛んできます
End_Len:
  MsgBox Me.ComboBox1.Value & "と言うシートがありません", vbCritical
End Sub

【39333】Re:コードを省略したい
お礼  初心者  - 06/6/22(木) 13:05 -

引用なし
パスワード
   ▼Statis さん:
>こんにちは
>
>
>Private Sub CommandButton1_Click()
>Dim i As Long
>'On Error GoToステートメントにてErr処理
>'コンボボックスの値のシートが無い場合「End_Len」に飛ぶ
>On Error GoTo End_Len
>With Worksheets(Me.ComboBox1.Value)
>  'Err処理を初期化
>   On Error GoTo 0
>   '該当のセルに値を代入
>   .Range("I7").Value = Me.TextBox4.Value
>   .Range("AK3").Value = Me.ComboBox2.Value
>   'どのボタンにチェックがあるかオプションボタンの個数分ループにて確認
>   For i = 1 To 5
>     If Me.Controls("OptionButton" & i) = True Then
>      'チェックがあったオプションボタンの番号をセルに代入
>      .Range("BB8").Value = i
>      'ループを抜ける
>      Exit For
>     End If
>   Next i
>   'チェックボックスにチェック有無を個数分ループにて確認
>   For i = 1 To 10
>     'セルBB6か右へ各チックボックスのチェック有無を表示
>     .Cells(66, 53 + i).Value = Me.Controls("CheckBox" & i).Value
>   Next i
>End With
>'Subプロシージャを抜ける
>Exit Sub
>'On Error GoToステートメントErrが出た場合ここに飛んできます
>End_Len:
>  MsgBox Me.ComboBox1.Value & "と言うシートがありません", vbCritical
>End Sub

わかりやすいご説明ありがとうございました。
またわからないことがありましたらお願い致します。

【39335】Re:コードを省略したい
質問  初心者  - 06/6/22(木) 13:29 -

引用なし
パスワード
   ▼初心者 さん:
>▼Statis さん:
>>こんにちは
>>
>>
>>Private Sub CommandButton1_Click()
>>Dim i As Long
>>'On Error GoToステートメントにてErr処理
>>'コンボボックスの値のシートが無い場合「End_Len」に飛ぶ
>>On Error GoTo End_Len
>>With Worksheets(Me.ComboBox1.Value)
>>  'Err処理を初期化
>>   On Error GoTo 0
>>   '該当のセルに値を代入
>>   .Range("I7").Value = Me.TextBox4.Value
>>   .Range("AK3").Value = Me.ComboBox2.Value
>>   'どのボタンにチェックがあるかオプションボタンの個数分ループにて確認
>>   For i = 1 To 5
>>     If Me.Controls("OptionButton" & i) = True Then
>>      'チェックがあったオプションボタンの番号をセルに代入
>>      .Range("BB8").Value = i
>>      'ループを抜ける
>>      Exit For
>>     End If
>>   Next i
>>   'チェックボックスにチェック有無を個数分ループにて確認
>>   For i = 1 To 10
>>     'セルBB6か右へ各チックボックスのチェック有無を表示
>>     .Cells(66, 53 + i).Value = Me.Controls("CheckBox" & i).Value
>>   Next i
>>End With
>>'Subプロシージャを抜ける
>>Exit Sub
>>'On Error GoToステートメントErrが出た場合ここに飛んできます
>>End_Len:
>>  MsgBox Me.ComboBox1.Value & "と言うシートがありません", vbCritical
>>End Sub
>
>わかりやすいご説明ありがとうございました。
>またわからないことがありましたらお願い致します。


もしも、上記コードがsheet1で行い、各名前のsheetへ登録するのであれば、
どこを変更すればよいですか?

【39343】Re:コードを省略したい
発言  Statis  - 06/6/22(木) 14:49 -

引用なし
パスワード
   こんにちは

>もしも、上記コードがsheet1で行い、各名前のsheetへ登録するのであれば、
どこを変更すればよいですか?

良く解かりません。何処のシートでUserFormを開いても
コードではSheet名をComboBox1で選択しているわけですから
選択されたシートに登録されますが?

何をしたいのでしょうか?

【39344】Re:コードを省略したい
発言  初心者  - 06/6/22(木) 14:52 -

引用なし
パスワード
   ▼Statis さん:
>こんにちは
>
>>もしも、上記コードがsheet1で行い、各名前のsheetへ登録するのであれば、
>どこを変更すればよいですか?
>
>良く解かりません。何処のシートでUserFormを開いても
>コードではSheet名をComboBox1で選択しているわけですから
>選択されたシートに登録されますが?
>
>何をしたいのでしょうか?

すみません、userformは使わずに、sheet1上にコンボボックス等を貼り付けてあります。そこから各名前のシートへ登録する形です。

【39361】Re:コードを省略したい
回答  Statis  - 06/6/22(木) 16:09 -

引用なし
パスワード
   ▼初心者 さん:


>すみません、userformは使わずに、sheet1上にコンボボックス等を貼り付けてあります。そこから各名前のシートへ登録する形です。

シート上でしたらコードのコードの変更が必要ですよ。
当初はUserFormでなかったですか?

Private Sub CommandButton1_Click()
Dim i As Long

On Error GoTo End_Len
With Worksheets(Me.ComboBox1.Value)
   On Error GoTo 0
   .Range("I7").Value = Me.TextBox4.Value
   .Range("AK3").Value = Me.ComboBox2.Value
   For i = 1 To 5
     If Me.OLEObjects("OptionButton" & i).Object = True Then
      .Range("BB8").Value = i
      Exit For
     End If
   Next i
   For i = 1 To 10
     .Cells(66, 53 + i).Value = Me.OLEObjects("CheckBox" & i).Object.Value
   Next i
End With
Exit Sub

End_Len:
  MsgBox Me.ComboBox1.Value & "と言うシートがありません", vbCritical
End Sub

【39362】Re:コードを省略したい
お礼  初心者  - 06/6/22(木) 16:12 -

引用なし
パスワード
   ▼Statis さん:
>▼初心者 さん:
>
>
>>すみません、userformは使わずに、sheet1上にコンボボックス等を貼り付けてあります。そこから各名前のシートへ登録する形です。
>
>シート上でしたらコードのコードの変更が必要ですよ。
>当初はUserFormでなかったですか?
>
>Private Sub CommandButton1_Click()
>Dim i As Long
>
>On Error GoTo End_Len
>With Worksheets(Me.ComboBox1.Value)
>   On Error GoTo 0
>   .Range("I7").Value = Me.TextBox4.Value
>   .Range("AK3").Value = Me.ComboBox2.Value
>   For i = 1 To 5
>     If Me.OLEObjects("OptionButton" & i).Object = True Then
>      .Range("BB8").Value = i
>      Exit For
>     End If
>   Next i
>   For i = 1 To 10
>     .Cells(66, 53 + i).Value = Me.OLEObjects("CheckBox" & i).Object.Value
>   Next i
>End With
>Exit Sub
>
>End_Len:
>  MsgBox Me.ComboBox1.Value & "と言うシートがありません", vbCritical
>End Sub


できました。ありがとうございました。

【39363】Re:コードを省略したい
質問  初心者  - 06/6/22(木) 16:24 -

引用なし
パスワード
   ▼初心者 さん:
>▼Statis さん:
>>▼初心者 さん:
>>
>>
>>>すみません、userformは使わずに、sheet1上にコンボボックス等を貼り付けてあります。そこから各名前のシートへ登録する形です。
>>
>>シート上でしたらコードのコードの変更が必要ですよ。
>>当初はUserFormでなかったですか?
>>
>>Private Sub CommandButton1_Click()
>>Dim i As Long
>>
>>On Error GoTo End_Len
>>With Worksheets(Me.ComboBox1.Value)
>>   On Error GoTo 0
>>   .Range("I7").Value = Me.TextBox4.Value
>>   .Range("AK3").Value = Me.ComboBox2.Value
>>   For i = 1 To 5
>>     If Me.OLEObjects("OptionButton" & i).Object = True Then
>>      .Range("BB8").Value = i
>>      Exit For
>>     End If
>>   Next i
>>   For i = 1 To 10
>>     .Cells(66, 53 + i).Value = Me.OLEObjects("CheckBox" & i).Object.Value
>>   Next i
>>End With
>>Exit Sub
>>
>>End_Len:
>>  MsgBox Me.ComboBox1.Value & "と言うシートがありません", vbCritical
>>End Sub
>
>
>できました。ありがとうございました。

例えば、今のやり方ではオプションボタン6〜8をセルのBB9にリンクさせ、6をチェックするとBB9は1・7をチェックするとBB9は2・8で3にしたいのですが、6をチェックで6、7で7というふうになってしまいますよね。
どうすればいいですか?

【39379】Re:コードを省略したい
回答  Statis  - 06/6/23(金) 8:43 -

引用なし
パスワード
   こんにちは

>例えば、今のやり方ではオプションボタン6〜8をセルのBB9にリンクさせ、
>6をチェックするとBB9は1・7をチェックするとBB9は2・8で3にしたいのですが、
>6をチェックで6、7で7というふうになってしまいますよね。
>どうすればいいですか?

う〜ん。コードを見て応用できませんか?
コードを理解いますか?

For i = 6 To 8
     If Me.OLEObjects("OptionButton" & i).Object = True Then
      .Range("BB9").Value = i - 5
      Exit For
     End If
Next i

【39381】Re:コードを省略したい
お礼  初心者  - 06/6/23(金) 8:47 -

引用なし
パスワード
   ▼Statis さん:
>こんにちは
>
>>例えば、今のやり方ではオプションボタン6〜8をセルのBB9にリンクさせ、
>>6をチェックするとBB9は1・7をチェックするとBB9は2・8で3にしたいのですが、
>>6をチェックで6、7で7というふうになってしまいますよね。
>>どうすればいいですか?
>
>う〜ん。コードを見て応用できませんか?
>コードを理解いますか?
>
>For i = 6 To 8
>     If Me.OLEObjects("OptionButton" & i).Object = True Then
>      .Range("BB9").Value = i - 5
>      Exit For
>     End If
>Next i

ありがとうございます。
簡単なことでしたね・・・。

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