• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:繰返した処理分、コマンドボタンをシート上に配置するには?)

繰返し処理でコマンドボタンをシート上に配置する方法

このQ&Aのポイント
  • VBAを使用して、繰返し処理でコマンドボタンをシート上に配置する方法について質問があります。
  • 現在の考えでは、for文を使用してコマンドボタンを配置しようとしていますが、うまくいきません。
  • どのようにすればコマンドボタンを繰返し処理で配置することができるのでしょうか?

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

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

可能ですよ Sub Macro1   dim btn as CommandButton   dim n as integer, r as Range   Set r = Range("a1")   for n = 0 to 5     Set btn = OLEObjects.Add( "Forms.CommandButton.1" )     ' ここでボタンの位置や大きさ、キャプションなどを設定しましょう     btn.top = r.Top     btn.left = r.Left     btn.caption = "Command" & n     set r = r.Offset(2)   next End Sub # やりたいことをマクロの記録を使って どのようなコードになるか確認してみましょう

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

関連するQ&A

  • ワークシート上に配置したコマンドボタンの操作

    OS:WinXP-Home Office:Excel2000 を使用して、VBAのマクロを作成しています ワークシートに複数のコマンドボタンを配置して 各ボタンのcaptionに複数のワークシート名をそのまま代入したいと思っているのですが 以下のソースでは実行できませんでした 記述先はコマンドボタンを貼り付けたシートです 試しに11枚のワークシートと10個のコマンドボタンで実行してみました Private Sub Worksheet_Activate() For i = 1 To 10 Controls("CommandButton" & i).Caption = Sheets(i + 1).Name Next i End Sub 以下のように一つずつ指定すればうまく行くのですが CommandButton1.Caption = Sheets(2).Name CommandButton2.Caption = Sheets(3).Name ・ ・ ユーザフォーム上のコントロールと違って 「Controls()」での操作は出来ないのでしょうか? 自力で検索したところ OLEObjects("CommandButton" & i).Caption = Sheets(i + 1).Name Controls.Item("CommandButton" & i).Caption = Sheets(i + 1).Name の方法も試してみましたがやはりうまく行きませんでした よろしくお願いします

  • ユーザーフォーム内のコマンドボタンを一括処理する

    いつもお世話になっています。 ありがとうございます。 下のようなことがしたいのですがうまくいきません。 どのようにしたらよいのでしょうか。お教えください。 Dim u As Long For u = 4 To 15 入力フォーム(CommandButton & u).ForeColor = RGB(0, 0, 0) Next u

  • シート名をループに

    質問を簡単にする為に以下のマクロがあるとします。 シート名が1~31とあるのですが、これをfor loopで 使うにはinteger等の定義が違うのでしょうか。 Sub bbb() Dim ws As Worksheet Dim 曜日 As String Dim i As Integer For Each ws In Worksheets For i = 1 To 31 If ws.Name = i Then  <----------ここでエラー  (コマンド) End If Next i Next End Sub

  • コマンドボタン名の設定で

    お世話になります。 現在EXCELシート上に複数のコマンドボタンを置き、 そのコマンドボタン名をセルの値からとってこようとしています。 これがVBの考えでしたら ************************************************* Dim i as integer 'ループ用変数 '対象セルに値が存在しなくなるまでループ Do While Worksheets("Sheet1").Cells(i, 1) <> "" 'セルの値をコマンドボタン名に代入 Worksheets("Sheet1").CommandButton(i).Caption = Worksheets("Sheet1").Cells(i, 1).Value i = i + 1 Loop ************************************************* のようにできるのではないかと考え、いろいろと試行錯誤しているのですがうまくいきません。 VBAではこのようなやり方はできないのでしょうか? vbのように変数名でループさせるということは出来ないというような情報もあるのですが、出来ればこの考えに似たような感じのプログラムの組み方がしたいと考えております。 どなたかご教授よろしくお願いいたします。

  • EXCELのシート上に埋め込んだチェックボックスの一括処理方法について

    EXCEL VBAのコード記載方法について教えていただきたいことがあります。 Sheets("Test")上にコントロールツールボックスのチェックボックスを 100個とコマンドボタンを1個配置する。 コマンドボタンをクリックすると、CheckBox1~100を全てTrueにする。 これを、 Private Sub CommandButton1_Click() Sheets("Test").CheckBox1 = True Sheets("Test").CheckBox2 = True ・ ・ ・ End Sub と100回書くのではなく、配列化して記載することは可能なのでしょうか。 ユーザーフォームのチェックボックスであれば Dim i As Integer For i = 1 To 100 UserForm1.Controls("CheckBox" & i) = True Next i で出来ると思うのですが、シート上に埋め込むチェックボックスですと、どうにも上手く動いてくれません。 丁寧に全部書いていけばいいのですが、行が沢山増えてしまい見にくいのと、数字の書き間違いが出たりして作業が煩瑣なので、 可能であればまとめて処理してしまいたいと考えています。 どうぞよろしくお願いいたします。

  • VBAとVB6.0とC#の速度比較

    ■VBA(Excel2002)でユーザーフォームを追加し、extboxとCommandButtonを1つずつ設置しました。 Buttonを押すと↓が動き出します。 dim i as integer for i= 0 to 10000 TextBox1.text = i next i ■VisuaBasic 6.0 Proでフォーム上にTextboxとCommandButtonを1つずつ設置しました。 EXEファイルを生成し、Buttonを押すと↓が動き出します。 dim i as integer for i= 0 to 10000 TextBox1.text = i next i ■Visual C# 2005 Express Editionで フォーム上にTextboxとCommandButtonを1つずつ設置しました。 EXEファイル生成後、Buttonを押すと↓が動き出します。 for (int i = 0; i <= 10000; i++) textBox1.Text = i.ToString(); 結果、一番速く表示されたのがVBAだったのですが、 一般的に遅いとされるVBAが一番速くなった原因(要因?)は何でしょうか? よろしくお願いします。

  • [Excel VBA]コマンドボタンの入力待ち方法

    コマンドボタンの入力を待つ方法についてご教示願います、 以下に詳しい状況と、具体的な質問を記載します。 【構成】 ・ユーザーフォーム上に5つのコマンドボタン(CommandButton1~CommandButton5) 【やりたいこと】 ・CommandButton1を押したらスタート ・1ラウンドにつき1回、CommandButton2~CommandButton5のいずれかのボタンが押せる。  そして、押されたボタンが何かを毎ラウンド判定する。  これを10ラウンドまで繰り返す。 (つまり、どのボタンが押されたかを10回判定する) なお、「ボタンが押されるまでは勝手にループしないこと」。 【コード】(UserFrom1に記載。質問用として、変数名は仮に日本語にしてあります) Public 押された As Long Dim 現在のラウンド As Long Dim 最終ラウンド As Long Private Sub ラウンド処理() 最終ラウンド = 10 For 現在のラウンド = 1 To 最終ラウンド ボタン判定 Next 現在のラウンド End Sub Private Sub ボタン判定() MsgBox 現在のラウンド & ":" & 押された End Sub Private Sub CommandButton1_Click() ラウンド処理 End Sub Private Sub CommandButton2_Click() 押された = 2 End Sub Private Sub CommandButton3_Click() 押された = 3 End Sub Private Sub CommandButton4_Click() 押された = 4 End Sub Private Sub CommandButton5_Click() 押された = 5 End Sub 【詰まっている点】 ボタンの入力待ちになるような文が入っていないため、 「1:0」「2:0」「3:0」…「10:0」とmsgboxが出るだけの状態です。 (当然ですが…) VBAの 【質問】 毎ラウンドごとにボタンの入力待ちのような状態を 「できるだけこの形を崩さずに」組み込むためには、どのような処理を加えればいいでしょうか。

  • 【Excel VBA】コマンドボタンの選択&移動

    Excel2003を使用しています。 以前、こちらで教えていただいて、1クリックで1ページ分移動するコマンドボタンを作成しました。 左クリックでDown、右クリックでUpし、Sheet2モジュールに下記のコードを記述しています。 このコマンドボタン自体を選択して、現在配置している場所(セル上)から移動させたい場合、どのように操作すればいいでしょうか? 右クリック、左クリック両方にページ移動が設定されているため、コマンドボタン自体を選択することができません…。 マクロが動作しないよう、一旦、コードを削除して、ボタンをクリックしてみたのですが、選択状態になりませんでした。 よろしくお願いします。 ------------------------------------------------------- Private Sub CommandButton1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)  '左クリック-進む-Down  '右クリック-戻る-Up   CommandButton1.Caption = "左-Down, 右-Up"   Dim WinTop As Long   Dim i As Long   i = Int((ActiveCell.Row) / 26) + 1   If Button = 1 Then     Application.Goto Cells(i * 26 + 1, 1), True   ElseIf Button = 2 Then     If i > 1 Then       Application.Goto Cells((i - 2) * 26 + 1, 1), True     End If   End If    WinTop = ActiveWindow.VisibleRange.Top + 2 '(2は縦の位置調整)    CommandButton1.Top = WinTop End Sub

  • シートにデータがなければ削除するVBA

    こんばんは、VBAについて質問させてください(^O^) あるブックに32個のシートが入っています。 32個のシートのうち、セルA2にデータの入っているシートとそうでない シートがあります。(毎回変動します。) これを踏まえて、セルA2にデータが入っていればそのまま、 入っていなければそのシートを削除。 という作業をVBAでやろうと思って以下の通りVBAを記述したのですが、 シートが削除されるとシートの数が変わってしまうので、これではだめだと 思ったのですが、どのように記述すればいいのか分かりません(T_T) どなたかご教授いただけないでしょうか、よろしくお願いいたします。 Sub Macro1() Application.DisplayAlerts = False Dim i As Integer For i = 1 To 32 Sheets(i).Select If Range("A2").Value = "" Then Sheets(i).Delete End If Next i End Sub

  • VBA 選択された離れたセルの値の取得について

    EXCELのVBAでどうしても前に進めず困っております。 目的としているコードは、離れたセル(複数)をあらかじめCtrlキーで選択状態にしておき、選択されたセルの値のみをVBAが別のセルに並べていくというものです。 以下が私の作ったコードなのですが、思ったとおりの動作をしてくれません。 VBA初心者なもので、おかしな記述がたくさんあると思うのですが、どなたかアドバイスお願いします。 Public Sub xx() Dim SelectArea As String Dim TargetCell As Range Dim a As Integer Dim Row As Integer Dim Column As Integer Dim CNT1 As Integer a = 0 Row = 0 Column = 0 For CNT1 = 1 To 10 Row = Row + 1 SelectArea = Selection.Address Set TargetCell = Range("B3").Cells(Row - 1, Column) If Intersect(Range(SelectArea), TargetCell) Is Nothing Then Else Range("A30").Cells(a, 0) = Range("B3").Cells(Row - 1, Column).Value a = a + 1 End If Next End Sub