つい集めてしまうものはなんですか?

j = 7
For i = 10 To 11

If Me.Controls("ComboBox" & i).Text = "低" Then

Sheet1.Cells(j, "D") = Me.Controls("ComboBox" & i).Text
Sheet1.Range("E7").Value = ""
Sheet1.Range("F7").Value = ""
Sheet1.Range("E8").Value = ""
Sheet1.Range("F8").Value = ""

ElseIf Me.Controls("ComboBox" & i).Text = "中" Then
Sheet1.Cells(j, "E") = Me.Controls("ComboBox" & i).Text
Sheet1.Range("D7").Value = ""
Sheet1.Range("F7").Value = ""
Sheet1.Range("D8").Value = ""
Sheet1.Range("F8").Value = ""

ElseIf Me.Controls("ComboBox" & i).Text = "高" Then
Sheet1.Cells(j, "F") = Me.Controls("ComboBox" & i).Text
Sheet1.Range("D7").Value = ""
Sheet1.Range("E7").Value = ""
Sheet1.Range("D8").Value = ""
Sheet1.Range("E8").Value = ""
ElseIf Me.Controls("combobox" & i).Text = "中間" Then
Sheet1.Cells(j, "E") = Me.Controls("ComboBox" & i).Text
Sheet1.Range("D7").Value = ""
Sheet1.Range("F7").Value = ""
Sheet1.Range("D8").Value = ""
Sheet1.Range("F8").Value = ""

End If
Next i
j = j + 1
としています。
combobox10とcombobox11の条件によって入力させるセルを指示しているつもりなのですが、この場合、combobox10が"低"でcombobox11が”高”の場合ですと、F7だけ”高"の表記で終わってしまいます。
やりたいのは、combobox10が低の場合はD7、中の場合はE7、高の場合はF7、中間の場合はE7
combobox10が低の場合はD8、中の場合はE8、高の場合はF8、中間の場合はE8に入力したいです。
For nextがいまいちマスターできません。ご教授お願いいたします。

A 回答 (7件)

やりたい事が反映しているかどうか確信が持てませんが、


参考にしてみて下さい。

Private Sub CommandButton1_Click()
'対象のシートをセット
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1")

'対象のセルをまとめてクリア
ws.Range("D7:F8").ClearContents

'2回繰り返す
Dim i As Long
For i = 1 To 2

Dim txt As String

'コンボボックス10 => 10 = 1 + 9
'コンボボックス11 => 11 = 2 + 9
txt = Controls("ComboBox" & i + 9).Text

   'コンボボックス10 => 7行目 = 1 + 6
'コンボボックス11 => 8行目 = 1 + 2
Select Case txt
Case "低": ws.Range("D" & i + 6) = txt
Case "中", "中間": ws.Range("E" & i + 6) = txt
Case "高": ws.Range("F" & i + 6) = txt
End Select
Next
End Sub
「VBA for next」の回答画像4
    • good
    • 1
この回答へのお礼

ありがとうございます。
Select Caseを使えばいいんですね。
変数が複数あると自分には指示することができていなかったんですが、ご提示されたものを使えばなんとなく理解できました。説明も詳しくいただきありがとうございます。

お礼日時:2020/12/08 16:49

No.5&6です。



少し気になったと言うところで。
Comboboxは実際にはもっと存在しているとの事。
ならば1つのComboboxに使われている値は実際にはどれ程?

コード内でComboboxの値を用いた判定方法ですと、実際の数が多いならその行数も増えますでしょうし値に変更が生じれば修正も必要となります。
修正漏れやミスは痛手を受けるかもと感じました。

と初級レベルは思いました。
あとは重複する列を使用する値についての扱いなら、

ElseIf Me.Controls("ComboBox" & i).Text = "中" Then
Sheet1.Cells(j, "E") = Me.Controls("ComboBox" & i).Text
Sheet1.Range("D7").Value = ""
Sheet1.Range("F7").Value = ""
Sheet1.Range("D8").Value = ""
Sheet1.Range("F8").Value = ""

'~略~

ElseIf Me.Controls("combobox" & i).Text = "中間" Then
Sheet1.Cells(j, "E") = Me.Controls("ComboBox" & i).Text
Sheet1.Range("D7").Value = ""
Sheet1.Range("F7").Value = ""
Sheet1.Range("D8").Value = ""
Sheet1.Range("F8").Value = ""



ElseIf Me.Controls("ComboBox" & i).Text = "中" or Me.Controls("combobox" & i).Text = "中間" Then '★纏めてしまう
Sheet1.Cells(j, "E") = Me.Controls("ComboBox" & i).Text
Sheet1.Range("D7").Value = ""
Sheet1.Range("F7").Value = ""
Sheet1.Range("D8").Value = ""
Sheet1.Range("F8").Value = ""

ElseIf Me.Controls("ComboBox" & i).Text = "高" Then
Sheet1.Cells(j, "F") = Me.Controls("ComboBox" & i).Text
Sheet1.Range("D7").Value = ""
Sheet1.Range("E7").Value = ""
Sheet1.Range("D8").Value = ""
Sheet1.Range("E8").Value = ""

'以下ナシ
'ElseIf Me.Controls("combobox" & i).Text = "中間" Then
'Sheet1.Cells(j, "E") = Me.Controls("ComboBox" & i).Text
'Sheet1.Range("D7").Value = ""
'Sheet1.Range("F7").Value = ""
'Sheet1.Range("D8").Value = ""
'Sheet1.Range("F8").Value = ""

と『論理演算子』
https://excelwork.info/excel/logical_operator/
を用いるのも手ではありますかね。
    • good
    • 0
この回答へのお礼

ありがとうございます。中と中間をまとめたんですね。

お礼日時:2020/12/12 17:01

No.5です。



>Listindex使ったことないのでどうやったらいいかわからないです。

書き出したい列順とComboboxに追加している順番が同じであると言う事でなければ、この方法はスル~ですけどね。

それにComboboxの値で実はセルに書き込むことが出来ない場合とかもダメではありますので、その辺を考えると既出の回答の方がわかりやすいのかもです。
なんせジジィの考え方ですから、No.5のやり方は古いのかも知れませんし。
    • good
    • 0
この回答へのお礼

とんでもございません。
回答いただけて助かります。何か使うきっかけがあれば勉強させていただきます。

お礼日時:2020/12/08 19:19

初級レベル故に考え方がボケている自信はありますが。



Comboboxは2つですし、それぞれで書き込む『行』は同じで『列』と『書き込む値』を変えたいのでしょうから、

.ListIndex
.Text

を使って基準列からのOffsetと書き込む値を指定すれば宜しいのでは?

と検証できない初級者は考えてしまいます。
⇒For~Nextいるのかな?とか。
実際はもっとComboboxは存在している?
    • good
    • 0
この回答へのお礼

ありがとうございます。
Comboboxは複数あります。自分でなんとかしようと思いましたがわからないところだけを学んであとは自分でなんとかしてみたかったので質問させていただきました。
Listindex使ったことないのでどうやったらいいかわからないです。

お礼日時:2020/12/08 16:52

>End ifの後にj=j+1を指示する事がわからないです。


>素人考えですが、条件を満たす為にEnd ifの前と感じるのですが違うのですね。
i=10の時、j=7
i=11の時、j=8
にする必要があります。
その為、Next jの1行前で、jに1を加算します。
    • good
    • 1
この回答へのお礼

そうなんですね。なんとなくわかった気がします。
”中間”というときだけ”中”と同じE7またはE8を使用します。
ご提示いただいたものを参考に
j = 7
Sheet1.Range("D7:E8").Value = ""
For i = 10 To 11
If Me.Controls("ComboBox" & i).Text = "低" Then
Sheet1.Cells(j, "D") = Me.Controls("ComboBox" & i).Text
ElseIf Me.Controls("ComboBox" & i).Text = "中" Then
Sheet1.Cells(j, "E") = Me.Controls("ComboBox" & i).Text
ElseIf Me.Controls("ComboBox" & i).Text = "高" Then
Sheet1.Cells(j, "F") = Me.Controls("ComboBox" & i).Text
End If
If Me.ComboBox10.Text = "中間" Then
Sheet1.Range("D7:F7").Value = ""
Sheet1.Range("E7") = Me.ComboBox10.Text
End If

If Me.ComboBox11.Text = "中間" Then
Sheet1.Range("D8:F8").Value = ""
Sheet1.Range("E8") = Me.ComboBox11.Text

End If
j = j + 1
Next i
としてやってできたのですが、なんかスッキリしません。

お礼日時:2020/12/07 22:39

動作確認していませんが、以下でどうでしょうか。


j = 7
Sheet1.Range("D7:E8").Value = ""
For i = 10 To 11
If Me.Controls("ComboBox" & i).Text = "低" Then
Sheet1.Cells(j, "D") = Me.Controls("ComboBox" & i).Text
ElseIf Me.Controls("ComboBox" & i).Text = "中" Then
Sheet1.Cells(j, "E") = Me.Controls("ComboBox" & i).Text
ElseIf Me.Controls("ComboBox" & i).Text = "高" Then
Sheet1.Cells(j, "F") = Me.Controls("ComboBox" & i).Text
ElseIf Me.Controls("combobox" & i).Text = "中間" Then
Sheet1.Cells(j, "E") = Me.Controls("ComboBox" & i).Text
End If
j = j + 1
Next i
    • good
    • 1
この回答へのお礼

いつもお世話になります。ありがとうございます。
まだ試してないんですが、この様にするのですね。
End ifの後にj=j+1を指示する事がわからないです。
素人考えですが、条件を満たす為にEnd ifの前と感じるのですが違うのですね。

お礼日時:2020/12/07 20:04

Sheet1.Cells(j, "D")  って何ですか?



Cells表記のルールから勉強しなおしましょう
    • good
    • 2
この回答へのお礼

cellsで違うようですね。うまくできないので試しにやってみました。
すみません。

お礼日時:2020/12/07 22:12

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報