• ベストアンサー

VBA チェックボックスをチェックした項目のみ抽出

1.シート1のA列にフォームのチェックボックスを配置 2.B列に名前を並べる 3.チェックボックスでクリックし、チェックマークが出る 4.マクロでシート2のA列から抽出された名前を並べる 以上のことをしたいと思い、検索しましたところ、似たようなものが見つかりました。 https://okwave.jp/qa/q5065347.html ただ、このVBAは抽出先がG列です。抽出先はシート2のA列にしたいのです。 .Cells(i, "G").Value = cb.TopLeftCell.Offset(, 1).Value これをどうしたら良いでしょうか? 宜しくお願いします。

  • nkmyr
  • お礼率67% (403/600)

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1602/2439)
回答No.5

> 「VBEでF8キーでステップ実行」 > 何も起こらないです。 でしたらエラーになっていないという事だと思いますが・・・。 他のコードがエラーとかじゃないですか。

nkmyr
質問者

お礼

Sub test01() With Sheets("Sheets2") For Each cb In CheckBoxes If cb.Value = xlOn Then i = i + 1 .Cells(i, "A").Value = cb.TopLeftCell.Offset(, 1).Value End If Next End With End Sub コードはこれだけで、これ以外はないんです…

nkmyr
質問者

補足

すみません、 Sheets2→Sheet2 名前を間違えました。修正したら解決できました。ありがとうございました。

その他の回答 (4)

  • kkkkkm
  • ベストアンサー率65% (1602/2439)
回答No.4

VBEでF8キーでステップ実行してどこでエラーになりますか。

nkmyr
質問者

お礼

「VBEでF8キーでステップ実行」 何も起こらないです。

  • kkkkkm
  • ベストアンサー率65% (1602/2439)
回答No.3

あと見落としてました For Each cb In .CheckBoxes の.CheckBoxesの前のドットは外してください。 For Each cb In CheckBoxes です。 また、シート1のマクロでなければ For Each cb In Sheets("シート1").CheckBoxes にしておいてください。一応シート1のマクロだったとしても上記のようにしておくと安全です。

nkmyr
質問者

お礼

シート名は「Sheets2」です。 Sub test01() With Sheets("Sheets2") For Each cb In CheckBoxes If cb.Value = xlOn Then i = i + 1 .Cells(i, "A").Value = cb.TopLeftCell.Offset(, 1).Value End If Next End With End Sub このようにドットを外しましたが、 変わらず「インテックスが有効範囲にありません」でした。

  • kkkkkm
  • ベストアンサー率65% (1602/2439)
回答No.2

With Sheets("Sheets2") "Sheets2"でしょうか? 名前の変更をしなければ"Sheet2"だと思います。 With Sheets("Sheet2")

  • kkkkkm
  • ベストアンサー率65% (1602/2439)
回答No.1

With ActiveSheet を With Sheets("シート2") にして .Cells(i, "A").Value = cb.TopLeftCell.Offset(, 1).Value でいけると思いますよ。

nkmyr
質問者

お礼

早急のコメントをありがとうございます。 Sub test01() With Sheets("Sheets2") For Each cb In .CheckBoxes If cb.Value = xlOn Then i = i + 1 .Cells(i, "A").Value = cb.TopLeftCell.Offset(, 1).Value End If Next End With End Sub 結果 「インテックスが有効範囲にありません」 どこが違うのでしょうか?

関連するQ&A

  • VBA チェックボックスをチェックした名前のみ抽出

    数百名のリストからチェックした名前のみ抽出したいと思いまして。 1.シート1のA、C、E…奇数列にフォームのチェックボックスを配置 2.B、D、F…偶数列に名前を並べる 3.チェックボックスでクリックし、チェックマークが出る 4.マクロでSheet2のA列から抽出された名前を並べる 宜しくお願いします。

  • Excel チェックボックスの配置を換えた時

    ご質問させていただきます。 Excel2007を使用しています。 sheet2のA1セルからA190セルまでチェックボックスがあり、下記のmacro1が登録されていました。 そこで、チェックボックスの位置を以下のように変更しました。 sheet2のA1~A10セルまでチェックボックスが10個、その隣のB1~B10セルにsheet1のJ2~J11列への参照式、sheet2のC1~C10セルまでチェックボックスが10個、その隣のD1~D10セルにsheet1のJ12~J21列への参照式、・・・(省略)・・・、sheet2のAK1~AK10セルまでチェックボックスが10個、その隣のAL1~AL10セルにsheet1のJ182~J191への参照式、というふうに変更しました。 変更に伴い、A1~A10セルのチェックボックスには下記のmacro1を登録し、C1~C10セルのチェックボックスには下記のmacro2を登録しました。 問題は次で起こりました。E1~E10セルのチェックボックスに下記macro3を登録したのですが、チェックボックスをONにすると「実行時エラー13 型が一致しません」と表示されてしまいます。デバックボタンを押すと、myCheck.TopLeftCell.Value = Not myCheck.TopLeftCell.Valueが黄色くなります。 そこで、myCheck.TopLeftCell.Value = Not myCheck.TopLeftCell.Valueを削除してE1セルのチェックボックスをONにしてみたところ、なぜかE1セルにSheet1のI22セルの値が表示され、チェックボックスをOFFにしてみたらE1セルに=Sheet1!I22と書かれていることがわかりました。 offsetの数値を色々と試してみたところ、macro3のoffset(0,1)の部分をoffset(0,2)にするとチェックボックスがOFFの時にちゃんとE1セルには=Sheet1!J22と記入されます。 しかし、offset(0,2)の状態でmyCheck.TopLeftCell.Value = Not myCheck.TopLeftCell.Valueを挿入して実行してみたところ、やはり「実行時エラー13 型が一致しません」と表示されてしまいます。 どこをどう直したら良いのか全くわかりません。 教えてください。 よろしくお願いいたします。 Sub macro1()  Dim myCheck As Shape  Set myCheck = ActiveSheet.Shapes(Application.Caller)  myCheck.TopLeftCell.Value = Not myCheck.TopLeftCell.Value  With myCheck.TopLeftCell.Offset(0, 1)   If myCheck.ControlFormat.Value = 1 Then    .Value = .Value   Else    .FormulaR1C1 = "=Sheet1!R[1]C[8]"   End If  End With End Sub Sub macro2() Dim myCheck As Shape Set myCheck = ActiveSheet.Shapes(Application.Caller) myCheck.TopLeftCell.Value = Not myCheck.TopLeftCell.Value With myCheck.TopLeftCell.Offset(0, 1) If myCheck.ControlFormat.Value = 1 Then .Value = .Value Else .FormulaR1C1 = "=Sheet1!R[11]C[6]" End If End With End Sub Sub macro3() Dim myCheck As Shape Set myCheck = ActiveSheet.Shapes(Application.Caller) myCheck.TopLeftCell.Value = Not myCheck.TopLeftCell.Value With myCheck.TopLeftCell.Offset(0, 1) If myCheck.ControlFormat.Value = 1 Then .Value = .Value Else .FormulaR1C1 = "=Sheet1!R[21]C[4]" End If End With End Sub

  • Excel VBA 条件を満たしたセル上にあるチェックボックス

    Excel2003を使用しています。 Sheet1のN4セルの値と同じ値が入力されているセルをSheet2のA列(A1:A50)から検索し、その行のB列に配置されているチェックボックスにチェックをつけたいのですが、そのチェックをつけたいチェックボックスを指定する方法がわかりません。 検索してヒットしたセルの1つ右隣のセルにチェックボックスが配置されているということで myNum = Sheets("Sheet1").Range("N4").Value Rng = Sheets("Sheet2").Range("A1:A50").Find(myNum) としたとして、Rng.Offset(, 1).Address と、チェックをつけたいチェックボックスの左上のセルアドレスを比較すればいいのかな?と思っているのですが、そのチェックボックスをどのようにしたら指定できるでしょうか? また、別の方法もありましたら、アドバイスをいただけると嬉しいです。 よろしくお願いします。

  • フォームの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の使い方について思い違いをしているのでしょうか? ご教示をお願いいたします。

  • エクセルVBAで、シート上で結合されたセルに一つだけチェックボックスを

    エクセルVBAで、シート上で結合されたセルに一つだけチェックボックスを作成したいです。 以前こちらの別の方の質問で、選択されているセルにチェックボックスを作成するプログラムが紹介されており、同じようにやってみたところ、セルが結合されていない場合は問題ないのですが、 セルが複数結合されている場合、結合されているセル分チェックボックスが出来てしまいます。 (例えば、エクセルのシート上で、A3セルからA6セルまでが結合されていた場合、合計4つチェックボックスが結合セル内に出来てしまいます) 結合セル内には一つしかチェックボックスを作りたくありません。 どうしたらよいでのしょうか? 以前紹介されていた、チェックボックスを作るプログラムは下記のようなものでした。 よろしくお願いいたします。 Sub sample() Dim cb As CheckBox For Each cb In ActiveSheet.CheckBoxes cb.LinkedCell = cb.TopLeftCell.Address Next cb End Sub

  • VBA コンボボックスの重複削除

    こんばんわ。 VBAをはじめたばかりで、コンボボックスで困っています。 sheet1にコンボボックスを配置して、sheet2のA列にあるデータ (例) A列          1          1          2 を コンボボックスに          1          2 というようにデータを入れたいのですが、どの様にしたらよいのでしょうか? sheet1.コンボボックス.value=workSheet("sheet2).Range(A1:A3).value とすると1・1・2というようにA列の値がすべて入ってしまいました。 これを1・2というようにコンボボックスに入れたいです。  よろしくお願いいたします。

  • エクセルで、チェックボックスがオンになっているもののみ抽出したい

    こんにちは、とても困っているのでわかる方がいらっしゃいましたら教えてください>< A列にはチェックボックスが入っていて、 B列にリストがあるという形になっています。 A列のチェックボックスにチェックが入っているものだけを抽出する事は 出来ないでしょうか。 ネットで調べてみたら、同じような質問があったのですが、 どれもマクロを使えば出来るのでは?という回答だけで、 実際の方法が書かれていませんでした。 因みに、チェックボックスはセルにリンクさせていない状態です。 よろしくおねがいします!!!

  • 【Excel VBA】チェックボックスの有無

    Excel2003を使用しています。 昨日、『チェックボックスの挿入位置』で質問させていただきましたが、その続きというか、もうひとつ条件を追加したく、改めて質問させていただきます。 Sheet2のN1セルに入力されている番号と同じ番号が入力されているセルをSheet1のA列(A11:A200)から探して、その行のB列にチェックボックスを挿入したく、下記のようにコードを書いています。 ---------------------------------------- Sub test2() Dim myStr As String Dim myRange As Range myStr = Sheets("Sheet2").Range("N1").Value Set myRange = Sheets("Sheet1").Range("A11:A200").Find(myStr) If myRange Is Nothing Then Exit Sub Else Sheets("Sheet1").OLEObjects.Add(ClassType:="Forms.CheckBox.1", Link:=False, DisplayAsIcon:=False, _ Left:=myRange.Offset(, 1).Left , Top:=myRange.Top , Width:=12, Height:=13).Select End If End Sub ---------------------------------------- それで、今回追加したい条件は、既に、チェックボックスが挿入されていた場合は、何もせずに処理を終えたいのです。 現在は、チェックボックスが挿入されていると、そのチェックボックスの上に新たに重なってしまいますので、そうならないようにできたらと思い、質問させていただきました。 よろしくお願いします。

  • エクセル マクロ チェックボックス

    sheet1にチェックボックスが3つあり、マクロを実行するコマンドボタンが1つあります。 チェックボックスにレ点を入れることにより、sheet4のデータからsheet2にグラフを作成しようと考えてますが、エラーが出てしまい解決できません。 どのように訂正したらいいのか教えて頂けないでしょうか。 Private Sub CommandButton1_Click() Dim GraphRange As String Dim Graph As ChartObject Dim lastRow As Long Set Graph = Sheets("sheet2").ChartObjects.Add(150, 27, 350, 200) lastRow = Sheets("sheet4").Range("A" & Rows.Count).End(xlUp).Row GraphRange = Sheets("sheet4").Range(Cells(1, 1), Cells(lastRow, 1)).Value If Sheets("sheet1").CheckBox1.Value = True Then 'CheckBox1にチェックがあれば GraphRange = Sheets("sheet4").Range(Cells(1, 2), Cells(lastRow, 2)).Value End If If Sheets("sheet1").CheckBox2.Value = True Then 'CheckBox2にチェックがあれば GraphRange = Sheets("sheet4").Range(Cells(1, 3), Cells(lastRow, 3)).Value End If If CheckBox3.Value = True Then 'CheckBox3にチェックがあれば GraphRange = Sheets("sheet4").Range(Cells(1, 4), Cells(lastRow, 4)).Value End If Graph.Chart.ChartWizard Source:=Sheets("sheet4").Range(GraphRange).Value, _ Gallery:=xlLine, Format:=1, PlotBy:=xlColumns, _ CategoryLabels:=1, SeriesLabels:=1, HasLegend:=True End Sub

  • VBAのデータ抽出について

     列  A   B   C 行1 番号  色   形  2  1   白   丸  3  2   赤   三角  4  1   赤   丸  5  3   黄   四角 (1)Excel Sheet1にコマンドボタン1があり、それをクリックするとUserForm1が表示されます。 (2)UserForm1には「番号」「色」「形」の各コンボボックス1,2,3が配置されています。 (3)各コンボボックス1,2,3に表示されるのは、Sheet1の各列のデータです。 (4)コンボボックス1,2,3のうち1つ選択→その条件に合うデータを抽出。  コンボボックス1,2,3のうち2つ選択→その2つの条件に合うデータを抽出。  コンボボックス1,2,3のうち3つ選択→その3つの条件にあるデータを抽出。 (5)Sheet1のコマンドボタン2をクリックすると、Sheet1は元のデータ一覧に戻る。 というようなプログラムを組みたいと思っています。 (4)のデータ抽出、(5)の戻し方がよくわかりません。 どなたかご教授下さい。

専門家に質問してみよう