エクセルマクロでチェックボックスを作成する際の縦距離がずれる問題

このQ&Aのポイント
  • エクセルマクロを使ってチェックボックスを指定の位置に移動しようと思ったのですが、なぜか縦距離がずれます。
  • 数式上縦距離が正しく設定されているにもかかわらず、実行してみるとチェックボックスが予想とは異なる位置に作られます。
  • この問題の修正方法やアドバイスをお願いします。
回答を見る
  • ベストアンサー

エクセルマクロ チェックボックスの作成

こんにちわ エクセルマクロを使ってチェックボックスを指定の位置に移動しようと思ったのですが、なぜかずれます。 作ったマクロは↓ For i = 0 To 2 Step 1 For j = 1 To 6 Step 1 ActiveSheet.CheckBoxes.Add(444, 153 + j * 18 + i * 198, 24, 18).Select Selection.Characters.Text = "" Next j next i 数式上縦距離j=1の時点で 171 369 567 (↑この値にしたい) しかし、実行してみると i=2の時点で縦距離が567のはずが563.25の位置にチェックボックスが作られます。 なぜこうなるのか、どうしたら修正できるかわからないので、アドバイスお願いいたします。 ちなみに使っているのはoffice2003エクセルです

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

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

やってみると 縦に 間隔 6個 間隔 6個 間隔 6個 となるが良いか。 'left=444 top=変動 width=24 height=18 だから縦に一列になるが。 ーーー Sub test01() For i = 0 To 2 'Step 1 For j = 1 To 6 'Step 1 'Cells(i+1, j) = 444 Cells(i + 1, j) = 153 + j * 18 + i * 198 'Cells(i+1, j) = 24 'Cells(i+1, j) = 18 Next j Next i End Sub を実行すると、TOPの値は 171 189 207 225 243 261 369 387 405 423 441 459 567 585 603 621 639 657 となるが。小数点は出てこないが。 ーー またはチェックボックスのシートの位置関係に対応すると Sub test03() For i = 0 To 2 'Step 1 For j = 1 To 6 'Step 1 x = i * 6 + j 'Cells(i+1, j) = 444 Worksheets("Sheet2").Cells(x, "A") = 153 + j * 18 + i * 198 'Cells(i+1, j) = 24 'Cells(i+1, j) = 18 Next j Next i End Sub で、TOPの値は 171 423 189 441 207 459 225 567 243 585 261 603 369 621 387 639 405 657 右列が左列の下に続く がおかしいか。 こういう風にチェックルーチンを作って自分でテストして、自分で考えること。 ーーー エクセルで在れば、セルの状態にあわせて(全セル等しい高さとして) Sub test04() 'left=G列のLEFT, top=変動 width=24 height= セルの高さ ActiveSheet.DrawingObjects = Delete For i = 0 To 2 'Step 1 For j = 1 To 6 'Step 1 lt = Cells(1, "G").Left r = 10 + i * (6 + 5) + j tp = Cells(r, "A").Top ht = Cells(r, "A").Height ActiveSheet.CheckBoxes.Add(lt, tp, 24, ht).Select Selection.Characters.Text = "" Next j Next i End Sub のような方法もあると思う。

osarusan0214
質問者

お礼

なるほど~こんなやり方もあるんですね~ いじ繰り回して原因がわかりました。 画面のサイズをctrl+ドラッグで操作しているんですが、これが小さくなっているとずれるみたいです。 ご回答ありがとうございました!

関連するQ&A

  • エクセルマクロの質問です

    大量の計算をさせるときに「中断ボタン」等を表示することは可能でしょうか? 例えば下記のマクロで Sub tes() For i = 1 To 250 Step 1 For j = 1 To 65530 Step 1 Cells(j, i) = 1 Next j Next i End Sub ↑を実行すると作業に時間がかかりますが、その待ち時間中に「中断は下記をクリック(Msgbox的な表示)」のように表示したいです。 ちなみにエクセル2003です! アドバイスの程よろしくお願いいたします。

  • エクセルマクロでチェックボックスを作成する方法

    下記の方法でExcel起動時にE1~E50にチェックボックスを 作成しています。 (F列にはチェックの結果を表示させています) Sub Auto_open() Dim i As Integer Dim cbx As CheckBox With Selection.Parent For i = 1 To 50 Set cbx = .CheckBoxes.Add(Left:=Cells(i, 5).Left, _ Top:=Cells(i, 5).Top, _ Height:=Cells(i, 5).Height, _ Width:=Cells(i, 5).Width) cbx.Text = "" cbx.LinkedCell = "F" & i cbx.Display3DShading = True Next i End With Set cbx = Nothing End Sub チェックボックスにチェックされたら チェックされた行のA~Dの色を変更したいのですが、 どのようにやるのか分からなく困っています。 (チェックボックスのクリックイベントを50個つくるわけにも いかないですし・・・) 何か少しでもアイデア等ございましたら ご教授お願いします。

  • Excel VBA チェックボックスの判断

    下記のようなマクロでチェックボックスを作成したのですが、その作成したチェックボックスをクリックしたときに、ある処理を実行させるようにするにはどうすればいいのでしょうか? よろしくお願いします。 Dim Max as Long Dim Cell as Range Dim Check as CheckBox ・ ・ ・ For i = 0 To Max   With Cell.Offset(i)   Set Check = ActiveSheet.CheckBoxes.Add_     (Left:=.Left,Top:=.Top, Width:=.Width, Height:=.Height)   End With   With Check   .LinkedCell = Cell.Address   .Caption = ""   .Value = False   End With Next

  • エクセルのマクロを用いてチェックボックスをまとめてチェックする方法

    エクセルを用いてチェックボックスが縦に並んだ書類を作っているのですが、チェックする項目のパターンが決まっているので毎回同じところにチェックするのが面倒です。 ワンクリックで複数のチェックがかけられるようにしたいのですが、 ツール→マクロ→新しいマクロの記録 で複数のチェック「レ」ができるようにマクロのを登録してみたのですがチェックがかかりません。 何かよい方法は無いでしょうか?

  • チェックボックスの値を取得したい。

    アンケートシートにコントロールツールボックスからチェックボックスを60個作りました。 その値を取得するため、次の構文を作りましたが、 実行時エラー1004 「WorksheetクラスのCheckBoxesプロパティを取得できません。」というMsgboxが出ます。 何方か良い知恵をお貸し下さい。 <エラーのでる構文> Sub AAA() Dim A Sheets(1).Select For A = 1 To 60 Cells(A, 5) = Sheets(1).CheckBoxes(A).Value Next A End Sub Excelは2003です。

  • Excel マクロ:変数を複数使う場合

    マクロ初心者です。 For文で、変数を2つ定義し、それぞれが1つずつ増えてくれるような マクロを組みたいのですが、うまくいきません。 例えばA列の並んだ数字を、B列に一個とばしで入力するとして・・・ 例) Dim i As Integer Dim j As Integer For j = 2 To 10 Step 2 For i = 1 To 9 Cells(j, 2).Value = Cells(i, 1).Value Next i, j ではだめですよね。iが1つ増える時に、jも1つ増える、 というようにVBAを組むことが可能なのでしょうか? ど素人な質問ですみませんが、教えてください。

  • Excel VB のチェックボックスの処理について

    Excel VB のチェックボックスの処理について すみません。チェックボックスのチェックの状態を条件に処理をしたいです。 うまくいきません。 Dim strcheckBox As String For i = 0 To 100 strcheckBox = "CheckBox1_" & i   celleSe = "A" & i If Worksheets("test1").Controls(strcheckBox).Value = True Then Worksheets("test2").Range(celleSe).Value = "真" End If Next

  • Excel マクロでチェックボックスに枠線

    エクセルマクロについて教えて下さい。 Excel2003を使用しています。 1つのシートに、フォームツールボックスからチェックボックスを沢山(300個以上)配置しました。 チェックボックスをクリック(オン)するのと同時にチェックボックスに赤い枠線を付けたいのですが、1つのマクロでチェックボックスのオブジェクト名を取得しながら枠線を付けることは出来ませんでしょうか? 以下のマクロを試してみたのですが、Application.Callerの所でエラーになってしまいました。 Sub checkon() ActiveSheet.Shapes(Application.Caller).Select Selection.ShapeRange.Line.Weight = 3# Selection.ShapeRange.Line.DashStyle = msoLineSolid Selection.ShapeRange.Line.Style = msoLineSingle Selection.ShapeRange.Line.Transparency = 0# Selection.ShapeRange.Line.Visible = msoTrue Selection.ShapeRange.Line.ForeColor.SchemeColor = 10 i = ActiveCell.Address(False, False, xlA1) Range(i).Select End Sub 特定のチェックボックスを指定した場合は、問題ないのですが・・。 (例)ActiveSheet.Shapes("Check Box 1").Select どなたか詳しい方、宜しくお願い致します。

  • エクセルマクロの部分比較について

    こんばんわ! エクセルマクロのLike演算子を使用した部分比較をしようとしたのですが下記のtes1は動いたのですが、tes2が動きません。 動くマクロ Sub tes1() For i = 5 To 20 Step 1  If Cells(i, 1) Like "*" & Range("b1") & "*" Then   Cells(i, 3) = 1  End If Next i End Sub 動かないマクロ Sub tes2() Dim name As String name = Range("b1") For i = 5 To 20 Step 1 If name Like "*" & Cells(i, 1) & "*" Then Cells(i, 3) = 1 End If Next i End Sub まだ、理解が足りていないところが多く、動かない理由が分からないですが、よろしければ、説明を兼ねてアドバイスのほどよろしくお願いいたします。

  • マクロの行列の掛け算ができません

    エクセルでマクロ勉強中の初心者です。 マクロで行列A(3行4列)、行列B(4行2列)の掛け算のプログラム(下記)を作っているのですが 「インデックスが有効範囲にありません」というエラーメッセージが出てしまいます。 エクセルで関数(MMULT)で同様の計算をするときちんと計算できるのですが・・・。 どなたか教えてください。 よろしくお願いいたします。 Sub s1() ' 次元の設定 Dim A(3, 4), B(4, 2), C(3, 2) N1 = 3: N2 = 4: N3 = 3 ' データの入力 (行列AとBの設定) For I = 1 To N1: For J = 1 To N2 A(I, J) = Worksheets("s1").Cells(I, J) Next J: Next I For I = 1 To N2: For J = 1 To N3 B(I, J) = Worksheets("s1").Cells(I, J + 5) Next J: Next I ' ベクトルの内積 For I = 1 To N1 For J = 1 To N3 For K = 1 To N2 C(I, J) = C(I, J) + A(I, K) * B(K, J) Next K Next J Next I ' 結果の出力 For I = 1 To N1 For J = 1 To N3 Worksheets("s1").Cells(I + 6, J + 7) = C(I, J) Next J Next I End Sub

専門家に質問してみよう