下記のようなコードを作成しました。
これを簡略化するにはどうすれば良いのでしょうか?
よろしくお願いします。
Private Sub CommandButton1_Click()
Sheets("sheet2").Select
Select Case UserForm1.ComboBox1.Text
Case Is = Sheets("sheet2").Range("A1").Value
Sheets("sheet2").Range("B1").Value = "X"
Case Is = Sheets("sheet2").Range("A2").Value
Sheets("sheet2").Range("B2").Value = "X"
Case Is = Sheets("sheet2").Range("A3").Value
Sheets("sheet2").Range("B3").Value = "X"
Case Is = Sheets("sheet2").Range("A4").Value
Sheets("sheet2").Range("B4").Value = "X"
Case Is = Sheets("sheet2").Range("A5").Value
Sheets("sheet2").Range("B5").Value = "X"
・
・
・
End Select
End Sub
No.5
- 回答日時:
#4です。
>A列にコンボボックスで選択した文字と同じ文字があったら、該当行のB列に"X"を設定する」ということです。
これで少しはっきりしましたが、私にはまだ2,3の状況のバリエーションがあると思うが。
ーー
ということなら
(1)ForNext繰り返し法(コード行数約5行
(2)Findメソッド利用法(10行近く
(3)Match関数利用法(コード行数約3行
などがある。
(2)は初心者には難しい。例はWEB照会すると沢山載ってます。
(3)の例を挙げます。
ーー
Private Sub CommandButton1_Click()
x = ComboBox1.Value
y = Application.WorksheetFunction.Match(x, Range("A1:A5"), 0)
Cells(y, "B") = "X"
End Sub
ーー
このようにエクセルやそのVBA固有の知識によるコードは、VB6.0式のコードに比べ、簡潔で、一見してやっていることが見えやすいものが多い(エクセルの知識があってのことだが)。
えくせるVBAをやるなら、VBのForNextなど繰り回し一本でなく、上記で言う(2)(3)も無いか、その都度調べてください。質問するのも良い。
ーー
エラー対策を入れて
Private Sub CommandButton1_Click()
On Error GoTo errrtn
x = ComboBox1.Value
y = Application.WorksheetFunction.Match(x, Range("A1:A5"), 0)
Cells(y, "B") = "X"
Exit Sub
errrtn:
MsgBox "A列に該当なし "
End Sub
ご回答ありがとうございます。
>えくせるVBAをやるなら、VBのForNextなど繰り回し一本でなく、上記で言う(2)(3)も無いか、その都度調べてください
はい、わかりました。
関数はあまりわからないので、努力してみます。
No.4
- 回答日時:
疑問点。
(1)ISを必要とするのか
初等解説書では比較演算子以上などを使うときに使われていて、相等のケースは
Case 1
で相等のケースを担っている。
(2)こういう書き方をすると変数間の比較は、左辺の全ての値のケースを列挙し尽くして、書かなければならなくなる。
ちょっと奇妙。プログラムはそれをしないように考えるものだと思う。
(3)エクセルVBAで、セルのことを問題にするとき
同一行の項目(データ)は、何かの主題の記述という点でつながっていて、無関係ではないことが多い。
その際右列は、OFFSETプロパティや、Cells(i,c+1)のようなのを使って、指し示せる。
こういうのを使ったらどうですか。
ーー
<質問一般論>
一般に、質問で、例示して説明するとき、
(1)例を列挙型
(2)特徴説明するため、文章記述型
があり、ケースバイケースでそれぞれ威力を発揮する。
(1)->(2)が読者にたやすいケースもある。
この質問は(1)の型だが、(2)の型で説明するとどうなるか、
説明を添えてほしかった。
回答者読者も忙しいし、質問の背景がわからないし、波長が合わない記述で(2)が帰納できないこともある。
我流でまさかという考え方で取り組んで質問しているケースもある。
ーー
本件質問も、何をしたいのか、文章で特徴を書いてくれれば、短いコードが紹介できるかもしれないと思いました。
システムを作る方は、両方の力が必要と思う。
ご回答ありがとうございます。
>説明を添えてほしかった。
「A列にコンボボックスで選択した文字と同じ文字があったら、該当行のB列に"X"を設定する」ということです。
よろしくお願いします。
No.2
- 回答日時:
こんにちは、
例えば、100行あれば、
以下のようでは、駄目でしょうか。
Private Sub CommandButton1_Click()
Dim r As Integer
For r = 1 To 100
If UserForm1.ComboBox1.Text = Sheet2.Cells(i, 1) Then Sheet2.Cells(i, 2) = "X"
Next
End Sub
No.1
- 回答日時:
> これを簡略化する
要するに、「A列に、指定した文字と同じ文字があったら、該当行のB列に"X"を設定する」って事ですよね?
「Findメソッドで検索する」とか・・・
例えば
-----------------------------
Private Sub CommandButton1_Click()
Dim F As Range
Dim T As Range
Dim s As String
Sheets("sheet2").Select
s = UserForm1.ComboBox1.Text
Set T = Sheets("Sheet2").Range("A:A")
Set F = T.Find(s, , , xlWhole)
If Not (F Is Nothing) Then
F.Offset(0, 1) = "X"
End If
End Sub
-----------------------------
とか・・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【変更】ファイルを閉じてダイアログで保存した時、更新したシートだけの処理の実行をする 5 2022/03/26 18:31
- Excel(エクセル) vba userformで漢字を全角カタカナに 2 2022/07/24 15:38
- Visual Basic(VBA) エクセルのVBAでダブルクリックでチェックを入れたあと 1 2022/10/26 20:30
- Visual Basic(VBA) いつもお世話になります 下記のコード実行すると エラーになります わかるかた教えてくれませんでしょう 6 2022/12/17 15:01
- Excel(エクセル) 並べ替え、ソートの構文がわからない。 お世話になります。VBA超初心者です。 エクセルでワークシート 2 2023/06/28 21:00
- Visual Basic(VBA) Sheet「状況」から、分類の年齢別カウント数をSheet「D表」へ転記する下記マクロを作っています 7 2022/12/14 17:57
- Excel(エクセル) エクセル VBAでシートのコピーを作りたい 1 2023/05/18 07:42
- Visual Basic(VBA) vbaのvlookup関数エラー原因を教えていただけないでしょうか。 3 2022/04/25 16:16
- Visual Basic(VBA) ExcelVBAでDo Until loopのネスト、IF文を使って一致する物と一致しない物としたい 11 2022/12/24 17:46
- Excel(エクセル) マクロで行を追加、削除すると行位置がずれますが、解決方法はありませんか?。 5 2022/05/28 16:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
IIF関数の使い方
-
Worksheets メソッドは失敗しま...
-
Excelで、あるセルの値に応じて...
-
エクセルVBA シートモジュール...
-
データグリッドビューの一番最...
-
B列の最終行までA列をオート...
-
vba 2つの条件が一致したら...
-
VBAのFind関数で結合セルを検索...
-
URLのリンク切れをマクロを使っ...
-
文字列の結合を空白行まで実行
-
Cellsのかっこの中はどっちが行...
-
VBAを使って検索したセルをコピ...
-
vbaでシートより100より大きい...
-
Changeイベントでの複数セルの...
-
VBA UserFormからの転記で
-
VBA 値と一致した行の一部の列...
-
【VBA】2つのシートの値を比較...
-
エクセルVBAにて =A1=B1とすれ...
-
targetをA列のセルに限定するに...
-
VBA 何かしら文字が入っていたら
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Worksheets メソッドは失敗しま...
-
Cellsのかっこの中はどっちが行...
-
VBAのコードを教えてください
-
VBAを使って検索したセルをコピ...
-
B列の最終行までA列をオート...
-
エクセルvbaについて
-
vba 2つの条件が一致したら...
-
Excelで、あるセルの値に応じて...
-
VBA UserFormからの転記で
-
VBAのFind関数で結合セルを検索...
-
文字列の結合を空白行まで実行
-
IIF関数の使い方
-
VBA 何かしら文字が入っていたら
-
マクロ 最終列をコピーして最終...
-
Changeイベントでの複数セルの...
-
エクセルVBAにて =A1=B1とすれ...
-
【VBA】2つのシートの値を比較...
-
データグリッドビューの一番最...
-
VBマクロ 色の付いたセルを...
-
VBAで指定範囲内の空白セルを左...
おすすめ情報