
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がいまいちマスターできません。ご教授お願いいたします。
No.4ベストアンサー
- 回答日時:
やりたい事が反映しているかどうか確信が持てませんが、
参考にしてみて下さい。
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

ありがとうございます。
Select Caseを使えばいいんですね。
変数が複数あると自分には指示することができていなかったんですが、ご提示されたものを使えばなんとなく理解できました。説明も詳しくいただきありがとうございます。
No.7
- 回答日時:
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/
を用いるのも手ではありますかね。
No.6
- 回答日時:
No.5です。
>Listindex使ったことないのでどうやったらいいかわからないです。
書き出したい列順とComboboxに追加している順番が同じであると言う事でなければ、この方法はスル~ですけどね。
それにComboboxの値で実はセルに書き込むことが出来ない場合とかもダメではありますので、その辺を考えると既出の回答の方がわかりやすいのかもです。
なんせジジィの考え方ですから、No.5のやり方は古いのかも知れませんし。
No.5
- 回答日時:
初級レベル故に考え方がボケている自信はありますが。
Comboboxは2つですし、それぞれで書き込む『行』は同じで『列』と『書き込む値』を変えたいのでしょうから、
.ListIndex
.Text
を使って基準列からのOffsetと書き込む値を指定すれば宜しいのでは?
と検証できない初級者は考えてしまいます。
⇒For~Nextいるのかな?とか。
実際はもっとComboboxは存在している?
ありがとうございます。
Comboboxは複数あります。自分でなんとかしようと思いましたがわからないところだけを学んであとは自分でなんとかしてみたかったので質問させていただきました。
Listindex使ったことないのでどうやったらいいかわからないです。
No.3
- 回答日時:
>End ifの後にj=j+1を指示する事がわからないです。
>素人考えですが、条件を満たす為にEnd ifの前と感じるのですが違うのですね。
i=10の時、j=7
i=11の時、j=8
にする必要があります。
その為、Next jの1行前で、jに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
としてやってできたのですが、なんかスッキリしません。
No.2
- 回答日時:
動作確認していませんが、以下でどうでしょうか。
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
いつもお世話になります。ありがとうございます。
まだ試してないんですが、この様にするのですね。
End ifの後にj=j+1を指示する事がわからないです。
素人考えですが、条件を満たす為にEnd ifの前と感じるのですが違うのですね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) なぜExit Subがあるのかわかりません 4 2023/02/19 12:34
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) 動きっぱなしです。止め方とプロシージャの間違いを教えて下さい! 5 2022/08/15 23:08
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 4 2023/05/26 10:43
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) Sheet「状況」から、分類の年齢別カウント数をSheet「D表」へ転記する下記マクロを作っています 7 2022/12/14 17:57
- Visual Basic(VBA) 他のシートからコピーする下記マクロで貼付け位置をWorksheets(1).Range("A3")の 8 2023/01/30 18:48
- Visual Basic(VBA) excel2021で実行できないマクロ。どこを直したらいいのか 2 2022/03/28 03:40
- Excel(エクセル) vba userformで漢字を全角カタカナに 2 2022/07/24 15:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
二点の座標から距離や角度を求...
-
IsNumeric 配列条件
-
線の太さ
-
C#のループでtextboxに値を入れ...
-
VBについて教えてください。初...
-
VBA public変数はどのようなこ...
-
VB6でマウスのドラッグで範囲を...
-
visual basic初心者です。 visu...
-
VBAのループ
-
Excel VBAでsub,dimは何の略?
-
エクセルVBAでテキストボッ...
-
演奏記号の・・・・
-
VB.NETでのイベントの途中終了
-
VBAで選択箇所がある場合の重複...
-
キャッシュを無効に
-
AccessのVBAで「イベ...
-
VB6のFriendについて
-
Excel VBA: private sub 内の...
-
文字列を配列に…。
-
EXCEL VBA UserForm のご質問
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
二点の座標から距離や角度を求...
-
エクセルのVBAでの7×7の魔方陣...
-
VBA for next
-
線の太さ
-
C#を勉強していて、指定したフ...
-
VB.NET)コンボボックスの連動に...
-
複数条件のオートフィルタ(VBA)
-
4変数の非線形方程式のときかた
-
カラーの16進表記の足し算
-
エクセル・VBAでテキストボック...
-
テキストファイルの読み込みと...
-
VC++2010 大きい桁数をBYTE型配...
-
VC++ (byte)(col & 0xFF) の意味
-
どいつもこいつもbot3かよ
-
ドラゴン曲線を再帰で書く
-
accessの使い方について
-
エクセル ユーザーフォーム ...
-
VBA public変数はどのようなこ...
-
C#のループでtextboxに値を入れ...
-
アクセスできない保護レベルエ...
おすすめ情報