• ベストアンサー

VBA コマンドボタンにおけるコードについて

imogasiの回答

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答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

taka1012
質問者

お礼

ご回答ありがとうございます。 >えくせるVBAをやるなら、VBのForNextなど繰り回し一本でなく、上記で言う(2)(3)も無いか、その都度調べてください はい、わかりました。 関数はあまりわからないので、努力してみます。

関連するQ&A

  • VBAでオプションボタン変更によって・・・

    エクセルVBAのユーザーフォーム内にあるコンボボックス3つを選択することによりデータ入力を行っています。 この度選択肢を増やすことになり、オプションボタンを2つ追加しようと思っています。 オプションボタンはどちらかを決定することで、コンボボックスの選択内容を変更する予定です。 コンボボックスは大中小分類としており、シート2から抽出したものをシート1に落としている現状をオプションボタン新設により、ボタン1は従来通りシート2から、ボタン2選択時はシート3にあるリストからコンボボックスへ繁栄させようとしたいのですが、方法が分かりません。 どなたか、教えていただけると助かります。 よろしくお願いします。 現在のコードを下記に記します。 Private Sub UserForm_Activate() With UserForm3 .OptionButton1 = True *この段階でボタン2を選択時は、シート3にあるリストよりコンボボックスの内容を抽出したい。 以下中小分類も同様としたい。 .ComboBox1.RowSource = "シート2!A3:A15" .ComboBox1.SetFocus End With End Sub Private Sub ComboBox1_Change() Dim myLlist As String myLlist = ComboBox1 With UserForm3 .ComboBox2.Text = "" .ComboBox3.Text = "" Select Case myLlist Case "大1" .ComboBox2.RowSource = "シート2!B21:B26" Case "大2" .ComboBox2.RowSource = "シート2!B27:B28" End Select End With End Sub Private Sub ComboBox2_Change() Dim myMlist As String myMlist = ComboBox2 With UserForm3 .ComboBox3.Text = "" Select Case myMlist Case "中1" .ComboBox3.RowSource = "シート2!C101:C111" Case "中2" .ComboBox3.RowSource = "シート2!C121:C124" End Select End With End Sub Private Sub OKボタン_Click() With UserForm3 ActiveSheet.Unprotect 行 = ActiveCell.Row 列 = ActiveCell.Column Cells(行, 列) = UserForm3.ComboBox1.Value Cells(行, 列 + 1) = UserForm3.ComboBox2.Value Cells(行, 列 + 2) = UserForm3.ComboBox3.Value ActiveSheet.Protect End With End Sub

  • VBAで最終行の取得について

    UserFormのConboBoxで「○○」を選んで、 UserFormのTextBoxで『あいう』と入力すると、ワークシートに A      B 1 ○○   ×× 2 あいう と表示され、 UserFormのConboBoxで「××」を選んで、 UserFormのTextBoxで『アイウ』と入力すると A      B 1 ○○   ×× 2 あいう  アイウ 3 :    : と表示されるようにしたいと思います。 以下のプログラムまではできています。 ********************************************* Private Sub UserForm_Initialize()  Dim lasClm As Integer, i As Integer  lasClm = Sheet1.Range("A1").End(xlToRight).Column   For i = 1 To lasClm   ComboBox1.AddItem Sheet1.Cells(1, i).Value   Next i End Sub ********************************************* Private Sub CommandButton1_Click()  Select Case ComboBox1.Text  Case Sheet1.Cells(1, 1).Value '「○○」が選択  Sheet1.Cells(2, 1).Value = TextBox1.Text ・・・(1)  Case Sheet1.Cells(1, 2).Value '「××」が選択  Sheet1.Cells(2, 2).Value = TextBox1.Text ・・・(2)  End Select  UserForm1.Hide End Sub ********************************************** 今は(1)、(2)のように直接セルを指定しているのですが、 この部分を各列(A列、B列)の最終行の値を取得して、 最終行+1のセルに順次TextBoxに入力された値を代入していきたいのですが、 どのようにしたらよいのでしょうか。 しかし、A列とB列は同じように値が増えていくとは限りません。 例)    A     B 1 ○○   ×× 2 あいう  アイウ 3 かきく 4 さしす となる場合もあるので、A列とB列それぞれの最終行の値を取得したいと思っています。

  • コマンドボタンが実行されません…

    簡単な命令文だと思うんですが、Rangeクラスのselectメゾットが失敗ってエラーが出ます。どうしてなんでしょう?よろしくお願いします。 Private Sub CommandButton1_Click() Sheets("1").Select Range("A1").Select Selection.Copy Sheets("2").Select End Sub

  • エクセル VBA シートの選択 

    windows XP でエクセル2000を使っています。 Sub aaa() Sheets("Sheet1").Select Dim a As String a = Cells(2, 4) Sheets(a).Select Range("A1").Select End Sub というマクロだと セルに入っている値のシート名を探してくれます。 ですが Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) If Intersect(Target, Range("B11:b683")) Is Nothing Then Exit Sub Worksheets("Sheet1").Range("C2").Value = Target.Value Dim b As String b = Range("C2).value (←ここをcellsにしてもダメ) Sheets(b).Select Range("A1").Select End Sub これだとsheets(b)を選びません。Sheets(b).Selectのところが黄色くなります。 何処が間違えているのでしょうか。 全くの素人ですが、仕事で必要に迫られています。 わかりやすく回答・解説くれると助かります。

  • エクセルVBA ユーザーフォームの表示内容を選択条件によって変更する

    ExcelVBA初心者です。 ユーザーフォーム1でsheet1を選択した場合→次のユーザーフォーム2ではsheet1の内容を、 sheet2を選択した場合→sheet2の、sheet3を選択した場合→sheet3の 内容をそれぞれキャプションとして表示したいのですが、 なかなか上手く出来ません。 Private Sub UserForm_Initialize() If UserForm1.ComboBox1 = Worksheets("Sheet1").Select Then UserForm2.Caption = Worksheets("Sheet1").Range("B3").Value ElseIf UserForm1.ComboBox1 = Worksheets("Sheet2").Select Then UserForm2.Caption = Worksheets("Sheet2").Range("B3").Value Else UserForm1.ComboBox1 = Worksheets("Sheet3").Select UserForm2.Caption = Worksheets("Sheet3").Range("B3").Value End If End Sub としてみたのですが、どのシートを選択してもsheet3の内容が ユーザーフォーム2のキャプションとして表示されてしまいます。 どのようにしたら良いでしょうか? よろしくお願い致します。

  • エクセルのマクロ コンボボックス他について

    下記のプログラムでユーザーフォームを作成しました。 まったく同じ記述で、他のブックでは、最終処理として、所定の箇所に選択した記号が表示(コピー)されるのですが、このブックでは表示されません。 しかし、エラーは出ていないので文法的には合っているようにおもいます。 それだけに、どこが違うのか尚更わかりません。 なお、Unload UserForm1 を Unload UserForm にした場合、 Sheets("基本データ作成").Range("C3") = UserForm1.ComboBox1.Value の UserForm1 を UserForm にした場合、 「実行時エラー424、オブジェクトが必要です。」のエラーが出ます。 どこが悪いのかわかりません。 どなたか、教えてください。 なお、エクセルは2003、OSはXPです。 Private Sub ComboBox1_Change() End Sub Private Sub ComboBox2_Change() End Sub Private Sub ComboBox3_Change() End Sub Private Sub CommandButton1_Click() Unload UserForm1 Sheets("基本データ作成").Range("C3") = UserForm1.ComboBox1.Value Unload UserForm1 Sheets("基本データ作成").Range("C4") = UserForm1.ComboBox2.Value Unload UserForm1 Sheets("基本データ作成").Range("C5") = UserForm1.ComboBox3.Value End Sub Private Sub UserForm_initialize() With ComboBox1 .AddItem "U" .AddItem "K" .AddItem "E" End With With ComboBox2 .AddItem "A" .AddItem "B" .AddItem "C" End With With ComboBox3 .AddItem "D" .AddItem "E" .AddItem "F" End With End Sub

  • VBAでコマンドボタン操作で他のシートにコピーする方法を教えてください。

    エクセルのVBAでコマンドボタン操作でセルの値を他のシートのセルへコピーしたいのですが、やり方がわかりません。 自分なりに作ってみたのですが何が悪いのか教えてください。 Private Sub CommandButton1_Click() ' Range("A1").Select Selection.Copy Sheets("Sheet2").Select Range("A1").Select Selection.End(xlDown).Select ActiveCell.Offset(1, 0).Select ActiveCell.PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False End Sub Private Sub が怪しいのですが対処もわかりません。 ちなみにsheets2のA1には値がはいっています。 よろしくおねがいします。

  • VBAコンボボックスの内容が反映されない

    超初心者で、申し訳ございません。下記のようなコードを入力しましたが、 プルダウンは動くのですが、選択することが出来ません。誤りを指摘していただきたく、ご教授の程よろしくお願いします。 Private Sub UserForm_Initialize() With MainForm.ComboBox1 .List = Sheets("data").Range("A2:A11").Value .ListIndex = 0 End With Private Sub ComboBox1_Change() With MainForm.ComboBox1 .List = Sheets("data").Range("A2:A11").Value .ListIndex = 0 End With End Sub

  • エクセルVBA マクロの記録をコマンドボタンにコピペしても動かないのはなぜ?

    マクロを記録した以下は問題なく動くのですが、 Sub Macro1() Sheets("AAA").Select Range("A39:AQ39").Select Selection.Copy Sheets("BBB").Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False End Sub これをシート”BBB”のコマンドボタンに下記のようにコピペすると Range("A39:AQ39").Selectでエラーが発生し動きません。 どうすれば動くようになるのでしょうか? また、どうしてボタンだとコピペするだけではいけないのでしょうか? Private Sub CommandButton1_Click()    ここにコピペ End Sub

  • このコードが、うまく実行できません!

    下記の実行後のようにしたのですが、うまく出来ません、 何卒、ご教示くださいませ。 EXEL 2002 です。 ------------------------------------ Sub 数に対してマークを付ける() Dim c As Range Workbooks(1)..Sheets(1).AutoFilter.Range.Cells(1, 5).Select For Each c In Range(Selection, Sheets(1).AutoFilter.Range.Cells(1, 5).End(xlDown)).Select Select Case c.Value Case Is = 0 c.Offset(0, -3).Value = "×" Case Is = 1 c.Offset(0, -3).Value = "△" Case Is = 2 c.Offset(0, -3).Value = "○" Case Else MsgBox "対象の数字がありません" End Select Next End Sub --実行前-------------------  A B C D E F G H 1 ・ ・ ・▼▼▼▼▼▼▼▼←オートフィルターのマーク ・       0 ・       2  ・       1 ・       0 50 ・ --実行後------------------  A B C D E F G H 1 ・ ・   ・▼▼▼▼▼▼▼▼←オートフィルターのマーク ・  ×    0 ・  ○    2  ・  △    1 ・  ×    0 50 ・ ---------- よろしくお願い致します。