自宅学習でエクセルVBAの勉強をしています。
コンボボックスを切り替えるとテキストボックスも連動して切り替わるものを作っています。
最初はコンボボックスのリストインデックスの番号を使って
Private Sub ComboBox1_Change()
If ComboBox1.ListIndex = 0 Then TextBox1 = Range("B3").Text
If ComboBox1.ListIndex = 0 Then TextBox2 = Range("C3").Text
If ComboBox1.ListIndex = 0 Then TextBox3 = Range("D3").Text
……
If ComboBox1.ListIndex = 99 Then TextBox40 = Range("AL102").Text
と入力するんですが、リストインデックスが100、テキストボックスが40で
さすがに全部IF文の力業は現実的じゃないということで繰り返し分のFOR文を
使おうとしたんですがコンボボックスとテキストボックスを組み合わせているときの
FOR文のやり方がわかりません。諸先輩方、どうか知恵をお貸しいただけませんか?お願いします。
No.4ベストアンサー
- 回答日時:
こんにちは、
どの様な事を行いたいのかうまく理解できていないかも知れませんが、
例えば、
If ComboBox1.ListIndex = 0 Then TextBox1 = Range("B3").Text
If ComboBox1.ListIndex = 0 Then TextBox2 = Range("C3").Text
If ComboBox1.ListIndex = 0 Then TextBox3 = Range("D3").Text
を考えた時に
Private Sub ComboBox1_Change()
Dim i As Long, n As Long
If ComboBox1.ListIndex = 0 Then
n = 3 + ComboBox1.ListIndex
For i = 1 To 3
Controls("TextBox" & i).Value = Sheets(1).Cells(n, i + 1).Text
Next i
End If
End Sub
のように書くことが出来ます。B3~D3
(シートは暫定でインデックス1のシートにしています)
For i = 1 To 3はTextBoxの添え字なので1 To 40 とすれば、TextBox1~TextBox40が対象となります。
これは、If ComboBox1.ListIndex = 0 Thenに限っていますが、これを外し
Private Sub ComboBox1_Change()
Dim i As Long, n As Long
n = 3 + ComboBox1.ListIndex
For i = 1 To 40
Controls("TextBox" & i).Value = Sheets(1).Cells(n, i + 1).Text
Next i
End Sub
のみにした場合、(IF文を外す)
For i = 1 To 40にしたので
ComboBox1.ListIndex=0の時 B3~AO3
ComboBox1.ListIndex=1の時 B4~AO4
ComboBox1.ListIndex=2の時 B5~AO5
・
・
のようにセルのアドレスを変えていくように出来ます。
>If ComboBox1.ListIndex = 99 Then TextBox40 = Range("AL102").Text
ALになっていますが、B列から40となるとAO列のような気がしますが、、、
更にシート名などを変更する場合も(該当しないかも知れませんが)
String型の変数を加え
strShname="時間割" & ComboBox1.ListIndex +1
Sheets(strShname).Cells(n, i + 1).Text
ComboBox1.ListIndex=0の時 シート名 時間割1 を対象にする事が出来ます
この時 nは定数で良いかもしれませんが。。
ほぼ答えを頂いた上にわかりやすい解説ありがとうございます。
IF文にこだわりすぎてFor文だけのほうが簡単だったんですね。
私の説明不足な質問に返事を頂きありがとうございました!
No.3
- 回答日時:
恐らくですが、時間割タブの各テキストボックスに反映される値を
Excelシート上から取ってくるわけですよね?
ということは、Excelシートでは、時間割1~4、選択したコンボボックスの種類に
応じて整形された形で定義がされているかと思います。
例えば時間割1の0時はA1、時間割2の0時はB1、のように。
更に時間割やコンボボックスごとに、Excelシートが複数あるとか。
そのルールが定まっているならば、基準となるセル位置から、コンボボックスの種類などによって位置増減をさせることで、目的のセル位置を確定させることはできませんか?
そうすると多分、ifもforもいらないと思いますね。
Excelシートの実際の状態、コンボボックスの内容の例などがなければ正解を回答することはできません。
私のエクセルのルール等が後出しになってすみませんが、
まずは回答ありがとうございます。
番号(コンボボックスインデックス0)
名前(テキストボックス1セルB3)
0時(テキストボックス2セルC3)
……
23時(テキストボックス25セルZ3)
コンボボックスを変更することで名前と時間割セルB3~Z3を
B4~Z4、B5~Z5、……B100~Z100と切り替えています
いまはIF文の力業でやっているんですが現実的じゃないってことで
For文でできないかと思ってたんですが、コンボボックスで目的のセル位置増減や確定なんて方法もあるんですね。
For文とあわせて自分にできるやり方を検討していきたいと思います。
ありがとうございました。
No.2
- 回答日時:
それ以前にまず
If ComboBox1.ListIndex = 0 Then TextBox1 = Range("B3").Text
If ComboBox1.ListIndex = 0 Then TextBox2 = Range("C3").Text
If ComboBox1.ListIndex = 0 Then TextBox3 = Range("D3").Text
これって
If ComboBox1.ListIndex = 0 Then TextBox1 = Range("B3").Text:TextBox2 = Range("C3").Text:TextBox3 = Range("D3").Text
こうゆう事?
それもだけどリストインデックスと『TextBox ・ 代入するセル番地』の関係がわかりません。
リストインデックスによってどこかのセルを起点にOffsetするのならそれもFor~Nextとかに組み込まないとダメでしょ?
ルールを明確にすべきではないかな。
起点のセルを決めてからのOffset、For~Nextですか!
ヒントありがとうございます。
命令文の組み合わせをどうすればいいのかまだわかっていませんが検索しながら
勉強していきたいと思います。ありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/20 16:59
- Visual Basic(VBA) エクセルのマクロについて教えてください。 3 2023/02/22 08:53
- Visual Basic(VBA) エクセルのマクロについて教えてください。 3 2023/02/17 11:59
- Excel(エクセル) EXCEL マクロで行を挿入して貼り付けようとするとエラーになる。 2 2022/05/24 09:43
- Visual Basic(VBA) VBAの繰り返し処理について教えてください。 3 2022/08/02 13:21
- その他(プログラミング・Web制作) ボールの動きがスムーズに動いてかつ目盛り線描画を維持するためには 4 2023/05/31 10:01
- Excel(エクセル) マクロでテキストファイルを読み込んだ際の最終セルにデータと改行が含まれる問題の改善方法 2 2022/03/25 16:50
- その他(ギャンブル) BOって何歳でも始めれるんですか?当たる確率的には競馬より全然高い50%とかなんですか? 2 2022/09/06 15:13
- Visual Basic(VBA) 動きっぱなしです。止め方とプロシージャの間違いを教えて下さい! 5 2022/08/15 23:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
別のシートから値を取得するとき
-
【ExcelVBA】全シートのセルの...
-
Excel マクロについての相談
-
Excelマクロのエラーを解決した...
-
ユーザーフォームに入力したデ...
-
実行時エラー'1004': WorkSheet...
-
excelのマクロで該当処理できな...
-
【Excel VBA】Worksheets().Act...
-
同じ作業を複数のシートに実行...
-
XL:BeforeDoubleClickが動かない
-
VBAで、シート間の転記するコー...
-
ブック名、シート名を他のモジ...
-
シートが保護されている状態で...
-
エクセルのマクロについて教え...
-
ExcelのVBAのマクロで他のシー...
-
実行時エラー1004「Select メソ...
-
VBA 最終行まで数式をコピーする
-
【ExcelVBA】動的にボタン、ボ...
-
【VBA】指定した検索条件に一致...
-
VBA 検索して一致したセル...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
別のシートから値を取得するとき
-
ユーザーフォームに入力したデ...
-
【ExcelVBA】全シートのセルの...
-
同じ作業を複数のシートに実行...
-
Excelマクロのエラーを解決した...
-
excelのマクロで該当処理できな...
-
XL:BeforeDoubleClickが動かない
-
ExcelVBA シート名を複数セルか...
-
実行時エラー'1004': WorkSheet...
-
VBA 存在しないシートを選...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
ブック名、シート名を他のモジ...
-
【Excel VBA】Worksheets().Act...
-
ExcelのVBAのマクロで他のシー...
-
エクセルのシート名変更で重複...
-
特定の文字を含むシートだけマ...
-
シートが保護されている状態で...
-
Excel マクロについての相談
-
VBA 検索して一致したセル...
おすすめ情報