エクセルでCheckBoxのTOP位置を取得する方法

このQ&Aのポイント
  • エクセルのワークシート上に配置されたチェックボックスのTOP位置をセル番地で取得する方法について紹介します。
  • チェックボックスのTOP位置は、登録されたマクロを使用して簡単に取得することができます。
  • また、セルの右隣の値を取得する方法も紹介します。セル番地が取得できなくても、右隣の値を取得することができます。
回答を見る
  • ベストアンサー

エクセルでObjectがあるセル番地を取得するマクロは?

エクセルのワークシート上にフォームのチェックボックスが多数配置されています。そのチェックボックスのTOPにあたる位置がセル番地で言えばどこになるのかを取得する方法はないでしょうか? TOP位置は以下のようにチェックボックスに登録したマクロで簡単に取得できるのですが・・・。 セル番地を取得して、やりたいことは、そのセルの右隣のセルの値を取得することです。もし、そのセルの右隣のセルの値を簡単に取得できるなら別にTOP位置のセル番地が取得できなくともかまいません。 Sub test01() MsgBox ActiveSheet.CheckBoxes(Application.Caller).Top End Sub

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんばんは。 >チェックボックスのTOPにあたる位置がセル番地 MsgBox ActiveSheet.CheckBoxes(Application.Caller).TopLeftCell.Address >セル番地を取得して、やりたいことは、そのセルの右隣のセルの値を取得することです MsgBox ActiveSheet.CheckBoxes(Application.Caller).TopLeftCell.Offset(1, 1).Value 前も、どこかで相談を受けた覚えがあるのですが、フォームのチェックボックスって、実は、見かけよりもずっと大きな範囲を持っていて、その近辺の領域を取ってしまいます。だから、位置的には、2行目にあっても、実際のTop位置は、1行目にあることが多いのです。 おっしゃっている質問の意味が違っていたらすみません。

merlionXX
質問者

お礼

Wendy02さん、いつもありがとうございます。 TopLeftCellという呪文があったんですねえ。勉強になりました。 これで思ったことができそうです。 ありがとうございました。

関連するQ&A

  • エクセルVBAでセル番地を指定してオブジェクト名取得

    いつも大変おせわになり、ありがとうございます。 先日、エクセルシート内に貼り付けたオブジェクトの左上の角が位置するセル番地は、 ActiveSheet.Shapes("Check Box 1").TopLeftCell.Address で求められることをご教示いただきましたが、逆に、セル番地を指定して、そこにオブジェクトの左上の角があるオブジェクト名を取得する方法はありますでしょうか? ご教示いただければ幸いです。

  • VBA シート上のチェックボックスの値の取得

    (作業環境 windowsXP Excel2007 作業対象のブックは.xls) シート上に1ブックにつき3000個ほどのチェックボックスがあります。 このブックが現在約1000個、すでに配布・回収されております。 これからチェックボックスの選択状況やセルに入力された値をマクロで収集するのです。 大半のチェックボックスにはすでに「リンクするセル」の設定がされており、そのセルの値を参照すればチェック状態の取得は容易なのですが、 最初にこのブックを作った方が一部のチェックボックス群(3000個中500個程度)にリンクの設定をするのを忘れていたのです。 このリンク設定のされていないチェックボックスの値の取得についてご質問です リンクセルの設定をするのであれば sub a() ActiveSheet.Shapes("Check Box 1").Select Selection.LinkedCell = "$A$1" ・ end sub でいいのでしょうが、これだとselectのはずみで チェックボックスがTrueになってしまします。 リンクせずに直接チェックボックスの値をブール型で取得しようと思い dim a as boolern a = Activesheet.checkboxes(1).value としましたが、ためしに別ブックのシート上に1つだけチェックボックスを作って実行すると、チェック状態にかかわらずTrueが返ります。 checkboxesの使い方がダメなんでしょうか? 求める回答としては (1)上記のやり方でもできるが、間違っている部分がある (2)上記以外のやり方でもっと簡単な(早い)やりかたがある のどちらかのようなアドバイスをいただけると幸甚です。 よろしくおねがいします

  • エクセル セル番地の取得について

    A1~A50のセルに関数式(条件式)が入っており、このA1~A50のセルの値が1又は0と表示されます。その時1が表示されているセル番地を取得したい(知りたい)のですがどうすれば良いのですか?1が表示されるセルは複数あります。 たぶんマクロになると思うのですがご教示お願いします。

  • エクセルVBAで2種類のCheckboxについて

    ワークシート上に配置したチェックボックスですが、 フォームから挿入したものなら Sub TEST01() ActiveSheet.CheckBoxes.Value = xlOn End Sub で、全てのチェックボックスがオンになります。 コントロールツールボックスから貼り付けたチェックボックスの場合はどのように記述するのでしょうか?

  • excelで検索値の入っているセル番地を取得するには?

    お世話になります。 Excelの関数に関して質問させていただきます。 特定の範囲からある値を検索し、そのセルの番地(または行・列番号)を取得したいのですが、関数で可能でしょうか。 検索値は:ぢ --------------------------------------- |  あ  |  い  |  う  |  え  |  を  | --------------------------------------- |  だ  |  ぢ  |  づ  |  で  |  ど  | --------------------------------------- このとき"う"の入っているセルの番地(または行・列番号)を取得したい。 既出でしたらすいません。 よろしくお願いいたします。

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

    アンケートシートにコントロールツールボックスからチェックボックスを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です。

  • フォームのCheck boxとOLEObjectのCheckboxのマクロの違い?

    エクセル2003です。 ワークシート上に複数個のチェックボックスを配置し、オンの場合、その左隣のセルの値を返すマクロを作成する場合についての質問です。 普段はフォームのCheck boxを使っています。 フォームのCheck boxなら Sub ChkBx() With ActiveSheet.CheckBoxes(Application.Caller) If .Value = xlOn Then MsgBox .TopLeftCell.Offset(0, -1).Value End If End With End Sub と、標準モジュールに一つだけプロシージャを書いて、複数個のCheck boxに同一のマクロを登録すれば簡単に出来ます。 ところがこれをOLEObjectのCheckboxでやってみようと思ったところ、フォームのように一つのプロシージャを使いまわすことができず、シートモジュールに以下のように各Checkboxごとのマクロを書かなくてはいけないようです。 Private Sub CheckBox1_Click() With OLEObjects("CheckBox1") If .Object.Value Then MsgBox .TopLeftCell.Offset(0, -1).Value End If End With End Sub Private Sub CheckBox2_Click() With OLEObjects("CheckBox2") If .Object.Value Then MsgBox .TopLeftCell.Offset(0, -1).Value End If End With End Sub Private Sub CheckBox3_Click() With OLEObjects("CheckBox3") If .Object.Value Then MsgBox .TopLeftCell.Offset(0, -1).Value End If End With End Sub 3つや4つくらいならどうってことはないのですが十数個もあるとかなり面倒です。 OLEObjectのCheckboxでももっと簡単にする方法はないのでしょうか? それともわたしが何かOLEObjectのCheckboxの使い方について思い違いをしているのでしょうか? ご教示をお願いいたします。

  • 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 どなたか詳しい方、宜しくお願い致します。

  • エクセルVBA Dialogsheetについて

    何をいまさらダイアログシートなどとおっしゃらないで下さいませ。 今現在表示されているダイアログシートの名前を取得したいのです。 たとえばワークシート上にフォームのボタンを配置し、ボタンに以下のマクロを登録しておけば正しくシート名を返します。 Sub test01() MsgBox ActiveSheet.Name '1 MsgBox ActiveSheet.Shapes(Application.Caller).Parent.Name '2 End Sub ところが同じボタンをDialogsheetに配置し、そのダイアログを DialogSheets("Dialog1").Show  で、ワークシート上に表示した段階でボタンをクリックすると、1.ではワークシート名が帰り、2ではシート名が違うのでエラーになってしまいます。 (ワークシートをアクティブにしないで、ダイアログシート上で右クリックして「ダイアログの実行」でダイアログを表示させれば1,2ともにDialog1とDialogSheet名を返しますが) もちろん以下のようにDialogsheet名を明記すれば正しく返りますが、Application.Callerからダイアログシートの名前を取得したいのにDialogsheet名を明記するのでは無意味です。 Sub test02() MsgBox ActiveSheet.Name '1 MsgBox DialogSheets("Dialog1").Shapes(Application.Caller).Parent.Name '2 End Sub 何か良い方法はないでしょうか? 現在はやむをえずダイアログを表示させる際、以下のように変数に格納していますが、これもApplication.Callerからダイアログシートの名前を取得するにはあまり意味がないように思います。 Dim DS Sub D1_Start() DS = "Dialog1" DialogSheets("Dialog1").Show End Sub Sub test03() MsgBox ActiveSheet.Name '1 MsgBox DialogSheets(DS).Shapes(Application.Caller).Parent.Name '2 End Sub エクセル2000です。 宜しくお願いします。

  • Vlookupの値のセル番地の表示

    エクセルのVlookup関数で、値を返したのですが、右隣の列にその値がどのセル番地にあったか表示させる方法はあるでしょうか? よろしくお願いいたします。

専門家に質問してみよう