• ベストアンサー

Excel VBA UserForm button

ExcelVBAのことで教えてください。 classmoduleは使ったことはありませんが、今回使うのではないかと・・・ 知りたいことは、 シート(目次)のセルA1~A36に名前を入力するとこがあります。 例えばA1に名前を入力すると UserFormにA1の値のCommandbuttonが追加されるようにし 13個目で1個横にずれていく(画像参照)には どのようにすればいいのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

> シート(目次)のセルA1~A36に名前を入力するとこがあります。 ・名前を変更した時は、どうなるのでしょう? ・名前を削除した時は、どうなるのでしょう? > 13個目で1個横にずれていく(画像参照)には ・その状態でA1を空白にしたら? 歯抜けになってOKなら、あらかじめ36個、13個目で横にずれるようにCommandButton1~36を配置しといて、 UserForm1.CommandButton1.Caption = Sheets("Sheet1").Range("A1").Text UserForm1.CommandButton2.Caption = Sheets("Sheet1").Range("A2").Text ~ UserForm1.CommandButton36.Caption = Sheets("Sheet1").Range("A36").Text UserForm1.CommandButton1.Visible = (Sheets("Sheet1").Range("A1").Text<>"") UserForm1.CommandButton2.Visible = (Sheets("Sheet1").Range("A2").Text<>"") ~ UserForm1.CommandButton36.Visible = (Sheets("Sheet1").Range("A36").Text<>"") とか。

r-h-a-o
質問者

お礼

ありがとうございます。

r-h-a-o
質問者

補足

そうですよね・・ 色々説明が不足しているとこがあります・・ 名前を変更したときは、それに変更する 名前を削除したときは、ボタンがなくなり、 1個ずつずれる。 空白の場合はボタンは残るだけで、押しても無反応 予めある場合はNo1様も回答してくださったようにVisible を使うのですね

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • mt2015
  • ベストアンサー率49% (258/524)
回答No.1

追加するのではなく、予めボタンを作成してVisibleオブジェクトをFalseにして見えないようにしておきます。 セルに入力されたら対応するボタンのVisibleをTrueにします。

r-h-a-o
質問者

お礼

ありがとうございます。

r-h-a-o
質問者

補足

コメントありがとうございます。 隠すのはVisibleを使うのですね!

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Excell(2003) VBA UserForm上のSheetの参照方法は

    Excell2003にてuserForm1にコントロールとしてスプレッドシートを載せています。 このuserForm1には、別にテキストボックス(textbox1)とコマンドボタンが二つ(commandButton1とCommandButton2)があります。 commandButton1がクリックされたとき、textbox1に入力された値をチェックしたのち、Me(userForm)上のSheet1の適当なセル(たとえばA2)にその値を入力したい。  また、CommandButton2がクリックされたときは、Sheet2のA2に入力したい。その場合Sheet2を表示する動作も必要です。  この場合 Q:本体のSheetではなく、フォーム上のSheetを指定する方法 Q:複数のSheetからなるフォーム上のspledSheetのいずれかを表示する方法  はどのようにしたら良いのでしょう。

  • エクセル2007VBAで連続データ(文字列)の入力

    ●質問の主旨 エクセル2007のVBAでマクロを作成して 同じ列に次々と文字を入力していくにはどうすればよいでしょうか? ●質問の補足 ワークシートのA列に文字列を入力していくマクロを 作成しようとしています。コードの概要は以下の通りです。 1.1回目の入力でA1セルには文字列を入力 2.1のあとフォーカスがテキストボックスに戻る。 3.2回目の入力でテキストボックスに文字列を入力 4.2回目の文字列がA2セル入力 5.以下2~5が続く ところが4のところでA1セルの内容を消去して 2回目の文字列をそのままA1セルに入力してしまいます。 コードに問題があると考えられますが、 どこに問題があるでしょうか? 以下のコードと添付画像をご参照の上、 ご教示くだされば幸いです。 なお添付画像の内容は、作成目標である A列に次々と文字列が入力されていく「模範解答」です。 ●コード (General)-連続データ入力 Sub 連続データ入力() UserForm1.Show vbModal End Sub (General)-(Declaration) Dim CelNo As String Dim Pos As Integer (UserForm1:UserForm_Initialize) Private Sub UserForm_Initialize() Pos = 1 CelNo = "A" & Pos End Sub (UserForm1:InputBtn_Click) Private Sub InputBtn_Click() With Worksheets("sheet1") .Range(CelNo) = UserForm1.TextBox1.Text Pos = 1 CelNo = "A" & Pos .Range(CelNo).Activate End With UserForm1.TextBox1.Text = "" UserForm1.TextBox1.SetFocus End Sub (UserForm1:CommandButton2_Click) Private Sub CommandButton2_Click() Unload UserForm1 End End Sub

  • Excel VBA ユーザフォーム

    Excel VBAのユーザフォームについて質問です。 UserForm1の枠の中に、CommandButton1とCommandButton2を追加し  Private Sub CommandButton1_Click()  Range("AA3").Select  Range("AA3").Activate  End Sub とし、AA3のセルへデータ入力をしたいと試みましたが、CommandButton1から カーソルが移動しますが、データ入力ができません。 また、この他にも、CommandButton2をクリックすると、AB4のセルへ移動してデータを 入力したいのですが・・・ どなたか、ご教授をお願いいたします。

  • UserFormのTextBoxに入力した値を保存する方法がありますか

    UserFormのTextBoxに入力した値を保存する方法がありますか? 具体的には、UserFormのTextBoxに2010/6/10と入力したときに シートのセルT13に表示されるように以下のマクロを作成しました。 Private Sub CommandButton1_Click() Range("T13").Value = 日付.Value If CloseMode = vbFormControlMenu Then Cancel = True Me.Hide End If End Sub 再度UserFormを開くと前の入力内容があるのですがExcelを保存 して閉じて再度シートを開くと空白になってしまいます。 UserFormを開いたタイミングで出力させたT13の値を返すという ようなマクロにするにはどうしたらよいでしょうか。 初心者なので詳しく教えていただけませんか。

  • エクセル上のVBA

    当方、VBAまるっきり初心者です(触りはじめて3日くらい)。 エクセルはある程度理解しているつもりですが… バージョンはエクセル2000です。 他シートのセルのひとつに入力すれば、 別シートのセルがそれを参照したうえで 値として表示出来るようにならないでしょうか。  今のところ、以下のような状況です。 step01 sheet1のセルA1に任意の数値(整数限定です)を入力。 step02 sheet2のセルA1に、sheet1のセルA1の数値を用いて     MOD関数で余りを出す。 step03 sheet2のセルB2に以下のVBAによって     step02の余りを値として表示。      Private Sub Worksheet_Change(ByVal Target As Range)        Range("b2").Value = Range("a1")      End Sub  これだとsheet1の数字を変えても、 sheetの切替後sheet2のセルB2に 表示される値が変わってくれません。  最初の入力(step01の入力)をおこなえば sheet2のセルB2まで値が変わってくれるような方法を 教えていただけないでしょうか。  拙い説明で申し訳ありませんが、よろしくお願いします。

  • エクセル2007VBA 連続データ(文字列)の入力

    エクセル2007VBA 連続データ(文字列)の入力 ●質問の内容 エクセル2007のVBAでマクロを作成して 同じ列に次々と文字を入力していくには どうすればよいでしょうか? ●質問の補足 ワークシートのA列に文字列を入力していくマクロを 作成しようとしています。コードの 概要は以下の通りです。 1.1回目の入力でA1セルには文字列は入力 2.1のあとフォーカスがテキストボックスに戻る。 3.2回目の入力でテキストボックスに文字列を入力 4.2回目の文字列がA2セル入力 しかし4のところでA1セルの内容を消去して 2回目の文字列をそのままA1セルに入力してしまいます。 コードに問題があると考えられますが、どこに 問題があるでしょうか?以下のコードと添付画像を ご参照の上、ご教示くだされば幸いです。 なお添付画像の内容は、作成目標である A列に次々と文字列が入力されていく 「模範解答」です。 ●コード (General)-連続データ入力 Sub 連続データ入力() UserForm1.Show vbModal End Sub (General)-(Declaration) Dim CelNo As String Dim Pos As Integer (UserForm1:UserForm_Initialize) Private Sub UserForm_Initialize() Pos = 1 CelNo = "A" & Pos End Sub (UserForm1:InputBtn_Click) Private Sub InputBtn_Click() With Worksheets("sheet1") .Range(CelNo) = UserForm1.TextBox1.Text Pos = 1 CelNo = "A" & Pos .Range(CelNo).Activate End With UserForm1.TextBox1.Text = "" UserForm1.TextBox1.SetFocus End Sub (UserForm1:CommandButton2_Click) Private Sub CommandButton2_Click() Unload UserForm1 End End Sub

  • UserFormを利用してシートからシートへコピー

    お世話になっています。 UserFormに日付を入力したら、シート1に入力してあるデータをシート2にコピーをさせたいのですが出来ますでしょうか? シート1には、下記のようなデータがあります。 UserFormを作成し、その中には【TextBox】・【CommandButton】があり【TextBox】に日付を入力し【CommandButton】をクリックすると、シート2にそのデータがコピーされるようにしたいのですが・・・ (ちなみに、日付はバラバラに入っています) シート1   A   B      C     D    E ・ ・ ・ 7 No.   日付    商品名    金額   仕入先 8 1  2008/03/10   ○○○ 9 2  2008/03/10   ○○○ 10 3  2008/03/14   ○○○ 11 4  2008/03/13   ○○○ 12 5  2008/03/12   ○○○ 13 6  2008/03/11   ○○○ 14 7  2008/03/12   ○○○ 15 8  2008/03/13   ○○○ ・ ・   ・ ・ ・   ・ ・ ・   ・ 2008/03/12を入力した場合、 シート2   A   B      C     D    E ・ ・ ・ 7   日付    商品名    金額   仕入先 8  2008/03/12   ○○○ 9  2008/03/12   ○○○ 10 11 12 13 14 15 ・ ・   ・ ・ ・   ・ ・ ・   ・

  • Excelの条件付き書式、直接入力と参照した数値は違う?

    Excelの条件付き書式、直接入力と参照した数値は違う? Sheet1のA1セルの数値を Sheet2のA1セルが「=IF(Sheet1!A1="","",Sheet1!A1)」という数式で参照しています。 数値に、「%以上」という文字列を追加したいので、 Sheet2のA1セルの書式設定を、ユーザー定義で「0"%""以""上"」としています。 Sheet1のA1セルに数値を入力 → Sheet2のA1セルが参照 → ユーザー定義で「○%以上」と表示させる。 ・・・ここまでは簡単にできました。 さらに、数値が表示されたときにセルの色を赤くしようと、 条件付き書式で、 「セルの値が 次の値以上 0」 と設定したのですが、入力が無くても赤いままになってしまいます。 設定を、 「セルの値が 次の値以上 ="0"」とか、 「セルの値が 次の値より大きい 0」とか、 いろいろとやってみましたがどうしてもうまくいきません。 参照ではなく、セルに直接入力するのであればこれでうまくいっていましたので、簡単に出来るものだと思っていたのですが、 これはたぶん、私が根本的なことをわかっていないのだと思います。 ご教授頂けましたら助かります。

  • 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列それぞれの最終行の値を取得したいと思っています。

  • ExcelでVBAで選択範囲の値のみを挿入

    始めて質問いたします。よろしくお願いします。 Excel2010にて作成された選択範囲(Sheet1)のセルを同じブックの別シート(Sheet2"A1:AB20")で参照しています。その参照部分をVBAにてコピーして、そのすぐ下("A21:AB40")に挿入していきます。自分で作成したコードでは、数式もコピーするので当然参照しているセルからずれてしまいます。(Sheet1)の数値はその度に変わりますので絶対参照にすることもできません。 作成したVBAに値のみをコピーするコードを追加したいので教えて下さい。 Private Sub CommandButton1_Click() Sheets("Sheet2").Range("A1:AB20").Copy Sheets("Sheet2").Range("A21:AB40").Insert Shift:=xlDown Application.CutCopyMode = False End Sub このコードだと、参照している "A1:AB20" がテキストなどの場合はうまくいきます。数式が入っていると当然ですが、数式をコピーしてしまいます。 いろいろなサイトを見ていると Paste:=xlPasteValues  が、値のみペーストだと書いてありますが、適応の仕方がわかりません。 Insert の場合はどうなるのかもわかりません。 同じような質問も探しましたが見つからなくて困っています。 よろしくお願いいたします。

このQ&Aのポイント
  • Lenovo G500でWindows 10にアップグレードしたところ、Wi-Fiの接続が頻繁に切れる問題が発生しています。
  • 解決策として、「WLAN ドライバー Windows 10 (64bit) - Lenovo ideapad 530S-14ARR」のドライバーを試してみることができます。
  • また、「Intel WLAN ドライバー Windows 8 (64bit) - Lenovo G400, G500」のドライバーも問題の解決に役立つ可能性があります。
回答を見る

専門家に質問してみよう