• ベストアンサー

Excelのスピンボックスについて

ユーザフォームではなくワークシート上にスピンボックスを配置した場合の話です。 例えばセルB3に入力されている値をスピンボックスを使って、上矢印をクリックすればB3の値が1づつ上がる。逆に下矢印をクリックすればB3の値が1づつ下がる。というようなものにしたいのですが、以下のように値を増やすコードと値を減らすコードを作成しても右クリック->マクロの登録では1つのマクロしか登録できません。 どうすればそれぞれのボタンにマクロを登録することができるのでしょうか。 Dim up As Integer up = Range("F5").Value up = up + 1 Range("F5") = up Dim down As Integer down = Range("F5").Value down = down - 1 Range("F5") = down

  • backs
  • お礼率85% (564/660)

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

  • ベストアンサー
noname#187541
noname#187541
回答No.1

こんばんは。 フォームのスピンボタンであればマクロはいりません。コントロールの書式設定でリンクするセルを設定すればクリックするたびに数値が増減します。 配置したスピンボタンを右クリックして「コントロールの書式設定」を選びます。 コントロールタブで「リンクするセル」をクリックし、希望のセルをクリックします。 後は最大・最小・変化の増分等色々と設定して試してください。

backs
質問者

お礼

回答ありがとうございます。 コントロールの書式設定で増減値だとかを簡単に設定できたのですね。

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

1つめのスピンボタンの コントロールのプロパティ(右クリック)で LinkedCellにA5セルを指定 SmallChangeプロパテイに2 を設定。 2つめのスピンボタンの コントロールのプロパティで LinkedCellにA6セルを指定 SmallChangeプロパテイに5 を設定。 これで1つめをクリックするとA5の値が2づつ 2つめをクリックするとA6の値が5づつアップ(ダウン)します。 質問は、こういうことでしょう。 もちろんコードで指定もできるはずですが。 Sub test01() Worksheets("Sheet4").SpinButton1.SmallChange = 3 End Sub

backs
質問者

お礼

回答ありがとうございます。 1つづつ丁寧な説明をありがとうございます、とても参考になりました。

関連するQ&A

  • excel vbaでの質問になります

    このようなマクロを作成したのですが、セルに数式が入れてあると、どうしてもその下の空白の行に値を入力されてしまいます。 数式が入っているセルにもそのままセルに値を入れたいのですが・・ 宜しくお願いします。 Dim wb1 As Worksheet, r1 As Range Dim N As Integer, i As Integer Dim mycount As Long   Set wb1 = ThisWorkbook.Worksheets("請求書") mycount = Range("B111").CurrentRegion.Rows.Count Cells(111 + mycount, 2).Select ActiveCell.Offset(0, 0).Value = wb1.Range("C60").Value ActiveCell.Offset(0, 1).Value = wb1.Range("C61").Value ActiveCell.Offset(0, 12).Value = wb1.Range("C66").Value ActiveCell.Offset(0, 13).Value = wb1.Range("C74").Value ActiveCell.Offset(0, 14).Value = wb1.Range("C75").Value ActiveCell.Offset(0, 15).Value = wb1.Range("C84").Value ActiveCell.Offset(0, 16).Value = wb1.Range("C85").Value ActiveCell.Offset(0, 20).Value = wb1.Range("C69").Value ActiveCell.Offset(0, 22).Value = wb1.Range("C68").Value ActiveCell.Offset(0, 23).Value = wb1.Range("C76").Value ActiveCell.Offset(0, 24).Value = wb1.Range("C77").Value Exit Sub

  • エクセルVBA

    Sub PlusA001() Dim a As Range Dim b As Integer Range("e1").Value = "氏名" Range("e2").Value = "甲" Range("e2").AutoFill Destination:=Range("e2:e10"), Type:=xlFillDefault Range("f1:j1").Value = Array("国", "数", "理", "社", "英") Set a = Range("f2") For i = 1 To 5 Do Until b = 9 a.Value = Int(100 * Rnd) + 1 b = b + 1 Set a = a.Offset(1, 0) Loop b = 0 Set a = a.Offset(-9, 1) Next i End Sub サンプルコードの例ですが、どうも実行しても納得できない部分があります。それはSet a=a.offset(-9,1)の部分です。Set a = Range("f2")においてf2を始点としているのは判りますが、f2からであればa=a.offset(-9、5) とすればいいのかと思い実行したのですが、ぐちゃぐちゃになります。なぜ(-9、5)ではなく(-9、1)何ですか?いくら読み解いても判りません。教えてください。

  • Excelのontimeについて

    a1に数式が入っています。 c3からd3,e3,f3…に一定時間ごとにa1の値を入力するマクロがあります。 Sub 入力() Sheets("Sheet1").Select Range("a3").End(xlToRight).Offset(0, 1).Select ActiveCell.Value = Cells(1, 1).Value End Sub Sub スタート() Dim MyTime As Date Dim Jikan As Date Dim i As Integer Jikan = TimeValue("13:59:00") For i = 0 To 5 MyTime = Jikan + TimeSerial(0, 0, 5) * i Application.OnTime MyTime, "入力" Next End Sub で、教えていただきたいのですが、"入力"を動かしている途中で 上記のマクロをとめるにはどうしたらよいのでしょう? ご教授ください。

  • エクセルVBAを教えて下さい

    エクセルの表で -AB C D E F 1年月--1801 2------ 3------ 4------ (-)は空欄でセルE1=18、F1=1とします。 コントロールボックスをつかって Private Sub Command登録_Click() Dim d1 As Long Dim d2 As Long Dim ret As Variant Dim FindValue As String Dim TotalAddress As String If Range("E1").Value = "" Or Range("F1").Value = "" Then MsgBox "該当する場所にデータが入っていません。", vbCritical Exit Sub End If d1 = Range("A65536").End(xlUp).Offset(1).Row d2 = Range("B65536").End(xlUp).Offset(1).Row FindValue = """" & Range("E1").Value & Range("F1").Value & """" TotalAddress = Range("A1").Resize(d1).Address & "&" & Range("B1").Resize(d1).Address ret = Evaluate("MATCH(" & FindValue & "," & TotalAddress & ",0)") If IsError(ret) Then Cells(d1, 1) = Range("E1").Value Cells(d2, 2) = Range("F1").Value Else MsgBox "既に同じ組み合せがあります。", vbInformation End If End Sub というものを作ったのですが、E1=18、F1=1及びコマンドボタンを別シートに作成し、上記の表への登録をできるようにしたいのですが、なにかいい方法はありませんか?

  • excel スピンボタンのサイズについて

    excel2010利用です。よろしくお願いします。 下記の通り、各セルにリンク対応したスピンボタンが出来るようなマクロを作ってみました。(セルC4から始まって下に31セル分スピンボタンが作成される) しかし各一つのセルの大きさが小さいためか、スピンボタンでセルが埋め尽くされてしまいます。 スピンボタンのサイズを 幅:ギリギリまで小さく 高さ:セルの高さちょうど といった大きさに調整する方法はありますでしょうか? 対応セルはみな同じ大きさです。 ご意見ご教授のほどよろしくお願いします。 Sub test() Dim i As Integer Rows.RowHeight = 50 For i = 4To 34 With ActiveSheet.Spinners.Add(Range("c4").Left, Range("c" & i).Top, 20, 50) .LinkedCell = "c" & i End With Next End Sub ちなみに、C列から、AL列まで(C4からAL34まで)スピンボタンを作りたいと思っており、 私、まだVBA未熟なため現段階では、 上記のマクロをCからALまで文字を変えて複数回実行する方法しかできないのですが、なにか良案ありますでしょうか? 宜しくお願い致します。

  • テキストボックスの日付の変更時のみマクロ実行する

    Windows7とExcel2007でマクロ作成中の、初心者です。 (1)ブックAにマクロ書き込み、Bブックに処理データがあります。 (2)Bブックは毎月一回だけ、書式の変更マクロを実行します。 (3)そのため、苦肉の策として Range("E3")が0のときは、実行するが、1のときはマクロ実行しないように しています。 (4)以上の方法では、更新するときは、いちいちRange("E3")の値を手動で0に する必要があります。面倒です。 (5)そこでAブックのユーザーフォームに日付の入ったテキストボックスを取り付け ここの日付けが変更されたときだけ、マクロを実行するようにしたいのですが。 難しくて出来ません。教えていただきたいです。お願いします。 Sub 書式の変更操作() Application.ScreenUpdating = False Dim n As Long Dim myBtn As Integer Dim myMsg As String, myTitle As String Dim mydate As Date mydate = Worksheets("集計").Range("D2").Value If Range("E3").Value = 0 Then myMsg = "この" & Format(Range("D2").Value, "m月") & "分 表の書式等を更新します。" myTitle = "書式変更の確認" myBtn = MsgBox(myMsg, vbOKOnly + vbExclamation, myTitle) 書式更新のマクロ実行 Range("E3").Formula = "1" ’ここで次回起動時マクロ実行しない MsgBox "書式を更新しました。" Else MsgBox "既に変更済みです。", vbOKOnly + vbExclamation Exit Sub End If Application.ScreenUpdating = True End Sub

  • コンボボックスのvba 作成の仕方

    私は、月別にデータを作っています。なので、月ごとにデータを見られるようなボタンを作成したいです。 現在組んでいるマクロは、ボタン(普通の四角いもの)を押すごとに、翌月データをコピペするというものになっています。 (以下、現在のコード記載) Sub auto_open() Dim wkm As Long Dim wkn As Long Dim wkt As Variant Dim wks As Variant Dim dt As Date Dim mi As Integer dt = Date mi = Month(dt) wkt = Array(0, 10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9) wks = Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12) wkm = wkt(mi) Call Macro1(wkm) Sheets("住宅資金").Range("A3") = wks(mi) End Sub Sub Next_Month() Dim wks As Variant Dim dt As Date Dim mi As Integer wks = Array(0, 10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9) If Sheets("住宅資金").Range("A3") = 12 Then wkm = 10 Else wkm = wks(Sheets("住宅資金").Range("A3") + 1) End If Call Macro1(wkm) wks = Array(0, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2, 3) Sheets("住宅資金").Range("A3") = wks(wkm) End Sub Sub Macro1(ByVal wkm As Long) With Sheets("入力") Sheets("住宅資金").Range("D5:D23").Value = .Range("C5:C23").Offset(, wkm - 1).Value Sheets("住宅資金").Range("J5:J23").Value = .Range("C28:C46").Offset(, wkm - 1).Value Sheets("住宅資金").Range("P5:P23").Value = .Range("T28:T46").Offset(, wkm - 1).Value Sheets("住宅資金").Range("O5:O23").Value = .Range("T5:T23").Offset(, wkm - 1).Value Sheets("住宅資金").Range("F5:F23").Value = .Range("O5:O23").Value Sheets("住宅資金").Range("L5:L23").Value = .Range("O28:O46").Value End With With Sheets("目標") Sheets("住宅資金").Range("C5:C23").Value = .Range("B4:B22").Offset(, wkm - 1).Value Sheets("住宅資金").Range("I5:I23").Value = .Range("B27:B45").Offset(, wkm - 1).Value End With With Sheets("前年同期") Sheets("住宅資金").Range("H5:H23").Value = .Range("C5:C23").Offset(, wkm - 1).Value Sheets("住宅資金").Range("N5:N23").Value = .Range("C28:C46").Offset(, wkm - 1).Value Sheets("住宅資金").Range("Q5:Q23").Value = .Range("T5:T23").Offset(, wkm - 1).Value End With End Sub さて、現在作りたいと思っているものを以下に記述します。 普通の四角いボタンではなく、コンボボックスを使用して、矢印(▼)を押すことによってリストが表れ、 「1月」に合わせたら1月のデータがコピペされる、「8月」に合わせたら8月のデータがコピペされる、というものを作りたいと思っています。 以下のような空欄の表を作成したシートがあります。        A    B    C   D 1      目標  実績  …   … 2 ○支所   3 △支所 4  ・ 5  ・ 6  ・ 別のシートに、手入力した月別のデータがあります。 空欄のシートのどこかにコンボボックスを作り、別シートの○月のデータを貼り付けられるようにしたいと思っています。 コンボボックスの作り方がわからず、後一歩のところでつまずいてしまいました。 知恵をお貸しください。 よろしくお願いいたします。

  • エクセルで100以上のシートからデータを読み込むのに時間がかかり困っています

    エクセル2003でAuto_Open時にデータの更新をしてみましたが、一々画面を読んでしまい時間がかかってしまいます。 まだコードがよく理解できていませんので、どなたかよい方法を教えてください。 コードは以下のようです。 シートは180あり、一覧表にシート名の表を作りました。 よろしくお願いします。 Sub Auto_Open() 'シートオープンで一覧表のデータ更新 '変数の宣言 Dim MyDA As Integer Dim MyDB As String Dim MyDC As String Dim MyDD As String Dim MyDE As String Dim MyDF As String Dim MyDG As String Dim MyDH As String Dim MyDI As String Dim MyDJ As String Dim MyDK As String For MyDA = 3 To 173 '一覧表を呼びシート名の代入 Worksheets("一覧表").Activate MyDB = Range("T" & MyDA).Value '必要なデータの代入 Worksheets(MyDB).Activate MyDC = Range("J3").Value MyDD = Range("J4").Value MyDE = Range("B6").Value MyDF = Range("F6").Value MyDG = Range("K6").Value MyDH = Range("C9").Value MyDI = Range("B8").Value If MyDI = "" Then MyDI = "-" End If MyDJ = Range("F8").Value If MyDJ = "" Then MyDJ = "-" End If MyDK = Range("K8").Value If MyDK = "" Then MyDK = "-" End If Sheets("一覧表").Activate Range("B" & MyDA) = MyDC Range("C" & MyDA) = MyDD Range("D" & MyDA) = MyDE Range("E" & MyDA) = MyDF Range("F" & MyDA) = MyDG Range("G" & MyDA) = MyDH Range("H" & MyDA) = MyDI Range("I" & MyDA) = MyDJ Range("J" & MyDA) = MyDK Next MyDA End Sub

  • エクセルマクロで教えてください

    マクロ初心者です。アドバイスをお願いします。以下のマクロですとB列の100行目までの塗りつぶしのセルのカウントは出来るのですが、シート上の全てをカウントしたいのです。1TO 100の100の部分をどう変更したら良いのか教えてください。 Sub セルの色数1() Dim I As Integer Dim Count As Integer Count = 0 For I = 1 To 100 If Cells(I, 2).Interior.ColorIndex <> xlNone Then Count = Count + 1 Next I Range("C1").Value = Count End Sub

  • エクセル・スピンボタンを使った時にイベントマクロを発生させたい

    エクセルでスピンボタンを使って数値を上下させたときに イベントマクロを発生させたいです セルC1の入力規則のリストから氏名を選択するとグラフが表示されるのですが いちいちリストから選択するのが面倒なので スピンボタンでリストの上から順番に見ていけるようにもしたいのです スピンボタン(セルA1にリンク)を操作 A1…スピンボタンにリンクして数字が変わる B1…INDEX関数でA1の数字とリストから氏名が選択される B1の値をC1に貼り付ける←ここをマクロにしたい イベントマクロで Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("A1")) Is Nothing Then Exit Sub Range("B1").Copy Range("C1").Select ActiveSheet.Paste End Sub としてもうまくいきません スピンボタンにリンクしたセルの値が変わったと時は Worksheet_Changeだと無理なので、どうしたらいいでしょう わかりにくい説明で申し訳ありません

専門家に質問してみよう