VBAでコンボボックスとテキストボックスの連動
- VBAを使用して、コンボボックスとテキストボックスを連動させる方法を教えてください。
- Book1でユーザーフォームを作成中の私は、別のブックBook2のSheet1にあるデータを使用してコンボボックスとテキストボックスを連動させたいです。
- ComboBox1で会社名を選択したときに、TextBox1に会社の会社ID、TextBox2に電話番号を表示させる方法を教えてください。
- ベストアンサー
VBAでコンボボックスとテキストボックスの連動
業務命令でVBAの勉強を始めました。 フォームの作成を始めたところなのですが、早くもつまづいてしまい、先に進めません。 どうかご教授をお願いいたします。 現在Book1でユーザーフォームを作成しています。 別なブックBook2のSheet1にあるデータでコンボボックス とテキストボックスを連動させたいと考えております。 Book2のSheet1では、A列に会社名、B列に会社ID、C列に電話番号の表があります。 ComboBox1で会社名を選択したときに、TextBox1にその会社の会社ID、TextBox2に電話番号を表示させるにはどのようにしたらいいのでしょうか? ネットで検索しながらフォーム作成をしており、似たような条件のコードを自分なりに修正してやってみましたがどうやっても動作しません。 どうかよろしくお願いいたします。
- Visual Basic
- 回答数7
- ありがとう数4
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
No1の訂正です。 Set FRange = .Range(.Cells(2, "A"), .Cells(LastRow, "C")).Find(FStr, LookAt:=xlWhole) は Set FRange = .Range(.Cells(2, "A"), .Cells(LastRow, "A")).Find(FStr, LookAt:=xlWhole) でした。 No1のComboBox1_Changeは遅いので以下のようにすれば早くなります。 Private Sub ComboBox1_Change() Dim i As Long With ComboBox1 i = 2 Do While ExecuteExcel4Macro("'C:\ok\[Book2.xlsx]Sheet1'!R" & i & "C1") <> 0 If .Value = ExecuteExcel4Macro("'C:\ok\[Book2.xlsx]Sheet1'!R" & i & "C1") Then TextBox1.Value = ExecuteExcel4Macro("'C:\ok\[Book2.xlsx]Sheet1'!R" & i & "C2") TextBox2.Value = ExecuteExcel4Macro("'C:\ok\[Book2.xlsx]Sheet1'!R" & i & "C3") Exit Do End If i = i + 1 Loop End With End Sub
その他の回答 (6)
- HohoPapa
- ベストアンサー率65% (454/692)
>理解しようとしてみたのですが・・・、無理でした。 SQLは今後いろいろな局面で活用できますので DBのイロハをマスターする必要がありますが、 ぜひ克服してほしいところです。 >ただマクロが[実行中]のままになってしまいます。 VBAのフォームが開いているわけですから 開いている間は,VBAは実行中です。 が、だからといって「困った」はないはずです。 もしフォームが開いている状態で Book1のシートを操作したいのであれば Private Sub CommandButton1_Click() UserForm1.Show vbModeless End Sub といったコードに変更します。
お礼
ありがとうございます。 これから勉強を進めていっていつか理解できるようになりたいと思います。 実行中の件はそのままでもよかったのですね。 大変失礼いたしました。 色々教えていただきまして、ありがとうございます。
- kkkkkm
- ベストアンサー率65% (1620/2460)
> ファイルを開くのに時間がかかっているのだと思います。 勘違いでした。フォームを開いているので「実行中」になります。それで正常です。フォームを閉じれば「実行中」は消えます。
お礼
ありがとうございます。 このままで問題なかったのですね。 素人すぎる質問失礼いたしました。
- kkkkkm
- ベストアンサー率65% (1620/2460)
> おかげさまで希望の動きとなったのですが、マクロが[実行中]のままになってしまいます。 VBEのタイトルバーのところで「実行中」と出ているのだと思いますが、ファイルを開くのに時間がかかっているのだと思います。 No2のComboBox1_Change()のコードで試してみてください。
- HohoPapa
- ベストアンサー率65% (454/692)
No3の補足です。 Book1.xlsmとBook2.xlsxは同じフォルダーに配置されている前提です。 また、Book2.xlsxは (開いていてもかまいませんが) あえて、開いておく必要はありません。
- HohoPapa
- ベストアンサー率65% (454/692)
ちょっとハードルが上がりますが、SQL文を使う対応を紹介します。 添付画像のようにコードを配置します。 以下、画像ではあふれているModule1のコードが以下です。 Option Explicit Sub 会社一覧表示() Dim SQL As String Dim cn As Object Dim rs As Object 'SQL全文を組み立て、実行 SQL = "SELECT *" & vbCrLf SQL = SQL & "FROM [" & "Sheet1" & "$A1:Z50000]" & vbCrLf Set cn = CreateObject("ADODB.Connection") Set rs = CreateObject("ADODB.Recordset") cn.Provider = "Microsoft.ACE.OLEDB.12.0" cn.Properties("Extended Properties") = "Excel 12.0;HDR=Yes;IMEX=1" cn.Open ThisWorkbook.Path & "\" & "Book2.xlsx" rs.Open SQL, cn If rs.EOF And rs.Bof Then MsgBox "抽出結果が0レコード" Exit Sub End If rs.MoveFirst Do If rs.EOF = True Then Exit Do UserForm1.ComboBox1.AddItem rs("会社名") rs.MoveNext Loop '後処理 rs.Close Set rs = Nothing cn.Close Set cn = Nothing End Sub Sub 詳細表示() Dim SQL As String Dim cn As Object Dim rs As Object 'SQL全文を組み立て、実行 SQL = "SELECT *" & vbCrLf SQL = SQL & "FROM [" & "Sheet1" & "$A1:Z50000]" & vbCrLf SQL = SQL & "Where [会社名] = '" & UserForm1.ComboBox1.Text & "'" & vbCrLf Set cn = CreateObject("ADODB.Connection") Set rs = CreateObject("ADODB.Recordset") cn.Provider = "Microsoft.ACE.OLEDB.12.0" cn.Properties("Extended Properties") = "Excel 12.0;HDR=Yes;IMEX=1" cn.Open ThisWorkbook.Path & "\" & "Book2.xlsx" rs.Open SQL, cn If rs.EOF And rs.Bof Then MsgBox "抽出結果が0レコード" Exit Sub End If rs.MoveFirst UserForm1.TextBox1.Text = rs("会社ID") UserForm1.TextBox2.Text = rs("電話番号") '後処理 rs.Close Set rs = Nothing cn.Close Set cn = Nothing End Sub
お礼
HohoPapa様、ありがとうございます。 理解しようとしてみたのですが・・・、無理でした。 とりあえずコピーして使わせていただいたら希望通りに動きました。 ただマクロが[実行中]のままになってしまいます。 ■ボタンで停止をすることはできますが、何か他の方法はございませんでしょうか?
- kkkkkm
- ベストアンサー率65% (1620/2460)
ユーザーフォームのプロシージャに以下を記載してください。 Book2の1行目は項目行で2行目から実際の会社名が入っていると考えています。 TextBox1にその会社の会社ID、TextBox2に電話番号を表示させるときが遅いと思います。Book1の別のシートにBook2のSheet1のデータを参照させておいてそちらを使った方がいいかもしれません。 Book2は閉じたままで実行してください。 C:\ok\[Book2.xlsx]Sheet1 は実際のブックのフォルダ名及びブック名とシート名に Private Sub UserForm_Initialize() Dim i As Long With ComboBox1 i = 2 Do While ExecuteExcel4Macro("'C:\ok\[Book2.xlsx]Sheet1'!R" & i & "C1") <> 0 .AddItem ExecuteExcel4Macro("'C:\ok\[Book2.xlsx]Sheet1'!R" & i & "C1") i = i + 1 Loop End With End Sub '↓これがバックでファイルを開いているのでその分時間がかかると思います。 Private Sub ComboBox1_Change() Dim FStr As String, LastRow As Long Dim ex As New Excel.Application Dim mPath As String Dim wb As Workbook Dim FRange As Range FStr = ComboBox1.Value mPath = "C:\ok\Book2.xlsx" '実際のフォルダとブック名に Set wb = ex.Workbooks.Open(Filename:=mPath, UpdateLinks:=0, ReadOnly:=True, IgnoreReadOnlyRecommended:=True) With wb.Worksheets("Sheet1") '実際のシート名に LastRow = .Cells(Rows.Count, "A").End(xlUp).Row TextBox1.Value = _ Application.WorksheetFunction.VLookup(FStr, .Range(.Cells(2, "A"), .Cells(LastRow, "C")), 2, False) TextBox2.Value = _ Application.WorksheetFunction.VLookup(FStr, .Range(.Cells(2, "A"), .Cells(LastRow, "C")), 3, False) ' Findを使うこともできますがどちらも遅いと思います。 ' Set FRange = .Range(.Cells(2, "A"), .Cells(LastRow, "C")).Find(FStr, LookAt:=xlWhole) ' If Not FRange Is Nothing Then ' TextBox1.Value = FRange.Offset(0, 1).Value ' TextBox2.Value = FRange.Offset(0, 2).Value ' End If End With Call wb.Close Call ex.Application.Quit End Sub
関連するQ&A
- エクセルVBA 別シートからのコンボボックス連動
エクセルVBA 別シートからのコンボボックス連動について Book1(多人数入力用ブック) ・入力シート ・データ用シート Book2(反映用ブック) ・シート1 Book1にコンボボックスが2列 テキストボックスが2列 * 6行のユーザーフォームを作成しました。 コンボボックス1 コンボボックス2 テキストボックス1 テキストボックス2 コンボボックス3 コンボボックス4 テキストボックス3 テキストボックス4 ・ ・ ・ 左のコンボボックスで「あ」が選ばれたときには、右のコンボボックスで「あ行の顧客」・・・というように連動させたいと考えております。 データ用シートのデータは、 A B C 1 あ あ行で始まる顧客 か行で始まる顧客 2 か 3 さ 4 た 5 な 6 Private Sub UserForm_Initialize() Dim c As Range ComboBox1.RowSource = "データ用シート!A1:A9" End Sub Private Sub ComboBox1_Change() 'Dim Rng As Range 'Dim i As Long i = ComboBox1.ListIndex If i > -1 Then Dim c As Range Set Sh = Worksheets("データ用シート") Set Rng = Worksheets("データ用シート").Range("B2:I30") ComboBox2.Value = "" ComboBox2.RowSource = Rng.Columns(i + 1).Address End If End Sub 上記コードですと、コンボボックス2が入力シートのデータを表示してしまいうまくいきません。 欲をいえば、 Book1(多人数入力用ブック)入力シートの特定セルに コンボボックス2・テキストボックス1 コンボボックス4・テキストボックス3というように続けて1セルに反映 Book2(反映用ブック)シート1に コンボボックス2・テキストボックス1・テキストボックス2 を各1セル 1行に反映させたいと考えております。 まったく知識がないのですが 仕事上どうしても必要となったので、各種サイトを見よう見真似でやっております。 ご助力いただければ幸いです。
- 締切済み
- Visual Basic
- VBAで条件が2つある場合の転記について
現在Book1.xlsmでユーザーフォームを作成しています。 ここにComboBox7(日付)、ComboBox8(項目)、TextBox11(数値)を配置しています。コンボボックス やテキストボックスに入力があるとBook1.xlsmのSheet1にそれぞれComboBox7はA2、ComboBox8はB1、TextBox11はB2に入力されるようになっています。 ここで、B2の数値を別なブックBook2.xlsxのSheet2に転記したいと考えております。 Book2.xlsxのSheet2では、A列に日付、B1~AZ1に項目が入っています。 Book1.xlsmのSheet1のA2と同じ日付、B1と同じ項目が交差するところにB2の数値を転記したい場合はどのようにしたら良いのか教えていただけませんでしょうか?
- ベストアンサー
- Visual Basic
- Excel ユーザーフォームでコンボボックスを使用してデータ入力
Excelのユーザーフォームでコンボボックスを使用して、シートのデータを表示しています。 コンボボックス:ComboBox1 テキストボックス1-3:TextBox1-3 コンボボックスのRowSource:シート名!A2:C100 コンボボックスの変更時の動作: Me!TextBox1.Value = ComboBox1.Value とここまではできたんですが、テキストボックス2にシートのB列の値を、テキストボックス3にシートのC列の値を入れたいのですが、 どのようにしたらいいのでしょうか?
- ベストアンサー
- オフィス系ソフト
- コンボボックス 連動 VBA
VBA初心者です。 ご教授ください。 入力フォームにコンボボックスを4っつ リストボックスを一つ作成し 一つ目のコンボでシートを選択後 二つ目以降のコンボボックスでセル範囲を選択し絞り込み、最終のリストボックスに 絞り込み表示を行い、コマンドボタンにて フィルター操作を行いたいのですが 重複表示させずに、絞り込んでいく方法がうまくいきません。下記コードにコンボボックス3以降も記述したのですが、絞り込みができません。よろしくお願いします。 Private Sub UserForm_Initialize() For i = 2 To Worksheets.Count 'シートの数だけ繰り返す ComboBox1.AddItem Worksheets(i).Name '取得したシート名をリストボックスへ Next End Sub Private Sub ComboBox1_Change() Dim Index As Integer Dim strBuf As String Index = ComboBox1.ListIndex 'ワークシートリストの選択された位置 strBuf = ComboBox1.List(Index) 'ワークシート名を取得 Worksheets(strBuf).Activate ' セルA1を左上端にする Application.Goto Reference:=Range("A1"), Scroll:=True ComboBox2.Clear Dim リスト As New Collection Dim 列 As String, 上端セル As String, 最下端セル As String Dim セル範囲 As Range, 各セル As Range 列 = "b" '※3 上端セル = 列 & "4" '※4 最下端セル = 列 & "65536" With Worksheets(strBuf) '※5 Set セル範囲 = .Range(.Range(上端セル), .Range(最下端セル).End(xlUp)) End With For Each 各セル In セル範囲 'セル範囲の各セルについて繰り返し処理 On Error Resume Next '次行が実行時エラーならその次行から継続 リスト.Add 各セル.Value, CStr(各セル.Value) 'Collectionオブジェクトにメンバを追加 If Err.Number = 0 Then '実行時エラーが発生していなければ Me.ComboBox2.AddItem 各セル.Value 'コンボボックスのリストに項目を追加 End If On Error GoTo 0 Next End Sub
- 締切済み
- Visual Basic
- コンボボックスからテキストボックスへのデータ反映
コンボボックスにてデータ(文字列+数字)を選択して、同フォーム内にある テキストボックスへ数字だけを表示させるにはどのようにコードを入力すれば良いでしょうか? VS2010を利用しています。 コンボボックスには、●●会社 00000000000 ▲▲会社 1111111111 といったように登録されております。 Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged TextBox1.Text = ComboBox1.Text End Sub 上記のコードですと、文字列+数字がテキストボックスへ反映されてしまいます。 お忙しい中お手数をお掛けしますが、ご教授下さい。
- ベストアンサー
- Visual Basic
- コンボボックスの変更に応じてテキストボックスの有効を切り替える(ExcelVBA2007)
お世話になります。 Excel VBA 2007で質問です。 今、 Label1 ComboBox1 TextBox1 Label2 ComboBox2 TextBox2 ・・・ Label100 ComboBox100 TextBox100 のようなフォームがあるとします。 ComboBox1~100は「Any」「is」「is not」のいずれかの値が取れ、初期値はAnyとします。 TextBox の Enabled プロパティの初期値は False とします。 やりたいことは、 ComboBox が「Any」でない場合(is または is not のいずれかの場合)にのみその右隣の TextBox の Enabled プロパティを True にしたいのです。 いま、ComboBox30 を Any から is に切り替えたとします。 すると、TextBox30.Enabled を False から True にしたいのです。 ここで、ComboBox30 を is から is not に切り替えたとします。 TextBox30.Enabled は True のままです。 ここで、ComboBox30 を is not から Any に切り替えたとします。 すると、TextBox30.Enabled を True から False にしたいのです。 ComboBox のイベントハンドラで Sub ComboBox30_Change () If ComboBox30.Value = "Any" Then TextBox30.Enabled = "False" Else TextBox30.Enabled = "True" End If End Sub のように書けばいいことは分かっているのですが、その場合は数字だけ変えたイベントハンドラを100個書かなければなりません。 このイベントハンドラを1個にすることはできるでしょうか。 (コンボボックス100個のうちどれかが変更されたら、変更されたコンボボックスの番号を知りながら呼び出されるハンドラ) 次善の策として、 Sub ComboBox30_Change () userSubroutine End Sub のように書くこともできるかと思いますが、この場合、どのコンボボックスが変更されたか(どのイベントハンドラが起動されたか)を知って、userSubroutine に渡さなければなりません。 よろしくお願いします!
- ベストアンサー
- Visual Basic
- excelのコンボボックスでの階層リスト表示
(すいません、再投稿します) excelのコンボボックスで、階層にわけてリスト表示させたいのですが、うまくいきません。 数日悩んでまして、どなたか教えてもらえませんか。 シート1:会社名 1列目:会社名 2列目:ID シート2:事業部名 1列目:事業部名 2列目:ID シート3:部門名 1列目:部門名 2列目:ID シート4:担当名 1列目:担当名 2列目:ID ユーザーフォームにそれぞれのコンボボックスを作っています。 ComboBox1:会社名 TextBox1:ID ComboBox2:事業部名 TextBox2:ID ComboBox3:部門名 TextBox3:ID ComboBox4:担当名 TextBox4:ID たとえば会社名がAのときは、ComboBox2ではAの事業部だけが表示される、というようなかんじです。 同時に隣のIDももってこないといけない為に、苦戦しています。助けてください。。。。 下記記述は3番、まではうまくいくのですが、”4番TextBox2の値代入”がうまくいきません。 -------- Option Explicit Dim シート名 As String Dim 行 As Long Dim 範囲 As String Dim 事業部範囲 As String '-1---ComboBox1------------------- Private Sub ComboBox1_DropButtonClick() シート名 = "会社名" Worksheets(シート名).Activate 'ワークシートをアクティブにする Range("A1").CurrentRegion.Select 'アクティブセル領域を選択する With Selection 行 = .Rows.Count '同上領域の行数を取得する 範囲 = .Cells(1, 1).Address & ":" & .Cells(行, 1).Address '同上領域のアドレスを変数に End With ComboBox1.RowSource = シート名 & "!" & 範囲 'コンボボックスのリストのソースを設定する End Sub '-2----ComboBox1------------------- Private Sub ComboBox1_Click() 'コンボボックス上でクリックされると実行される シート名 = "会社名" 行 = ComboBox1.ListIndex + 1 'コンボボックスで選択された行 + 1 TextBox1.Text = Worksheets(シート名).Cells(行, 2) '対応するセルの値をテキストボックスに End Sub '-3----ComboBox2------------------- Private Sub ComboBox1_Change() ' ComboBox1 が変化した時の処理 シート名 = "事業部名" Dim si As Integer With UserForm1 .ComboBox2.Text = "" si = .ComboBox1.ListIndex ' ComboBox1 の何番目が選択されたかを得る Select Case si Case 0 ' 0番が選択されていたらComboBox2 の内容 Worksheets(シート名).Activate Range("A1:A6").CurrentRegion.Select With Selection 事業部範囲 = .Cells(1, 1).Address & ":" & .Cells(6, 1).Address End With ComboBox2.RowSource = シート名 & "!" & 事業部範囲 Case 1 Worksheets(シート名).Activate Range("A7:A11").CurrentRegion.Select With Selection 事業部範囲 = .Cells(7, 1).Address & ":" & .Cells(11, 1).Address End With ComboBox2.RowSource = シート名 & "!" & 事業部範囲 Case 2 Worksheets(シート名).Activate Range("A12:A15").CurrentRegion.Select With Selection 事業部範囲 = .Cells(12, 1).Address & ":" & .Cells(15, 1).Address End With ComboBox2.RowSource = シート名 & "!" & 事業部範囲 Case 3 Worksheets(シート名).Activate Range("A16:A25").CurrentRegion.Select With Selection 事業部範囲 = .Cells(16, 1).Address & ":" & .Cells(25, 1).Address End With ComboBox2.RowSource = シート名 & "!" & 事業部範囲 End Select End With End Sub '---4--TextBox2に値代入-------------------- Private Sub ComboBox2_Click() Dim si As Integer With UserForm1 .ComboBox2.Text = "" si = .ComboBox2.ListIndex ' ComboBox2 の何番目が選択されたかを得る Select Case si Case 0 ' 0番が選択されていたらComboBox2 の内容 Range("A1:A6") シート名 = "事業部名" Worksheets(シート名).Activate Range("A1:B6").CurrentRegion.Select With Selection 事業部範囲 = .Cells(1, 2).Address & ":" & .Cells(6, 2).Address End With '行 = ComboBox2.ListIndex + 1 TextBox2.Text = Worksheets(シート名).Cells(事業部範囲, 2) Case 1 Case 2 Case 3 End Select End With End Sub '----5-Close-------------------- Private Sub UserForm_Deacti Unload UserForm1 End Sub
- ベストアンサー
- Visual Basic
- 全てのコンボボックスに同じchangeイベント
VBA初心者です。お知恵を貸してください。 UserForm上にある全てのコンボボックス(1つを除く)に同じchangeイベントを適応させたいです。 【動き】 1.UserForm起動 2.フォーム上のSheetComboBoxからシートを選択 3.選択したシートを参照し、フォーム上にシートにある行数分ComboBoxi(変数)_1〜3、TextBoxi(変数)を作成。ComboBoxにシートの値を参照した「文字列 数値」をセット。TextBoxは空欄。 4.ComboBoxi_1〜3が変更されるごとに、TextBoxiにComboBoxの内容の数値部分を計上する。 5.登録ボタンをクリックしてComboBoxi_1〜3の内容をシートの特定列に転記。 3までは作成することができましたが、4で行き詰まってしまいました。 コンボボックスのコントロール名は動的なので、どのようにchangeイベントを書けばいいのか、また、コンボボックスの量が多い(1行3つ*行数分)ので、すべてに対して書かなければならないのか…ということです。 何か一括でchangeできるような方法をご存知の方は教えていただけないでしょうか。どうぞよろしくお願いいたします。
- 締切済み
- Visual Basic
- エクセルVBA コンボBOXの相互連動
皆さんこんにちは。 エクセル2013を使用しています。 ネットや本では 地方名>都道府県名>市町村名のような 順にコンボボックスで行う絞り込み検索の方法が たくさん載っています。 コンボボックス1を選択しないとコンボボックス2・3の 選択肢は表示されないようなものです。 ですが、私がやりたいのは どのコンボボックスから選択しても 残りのコンボボックスが連動するものを作りたいのです。 おそらくやりたい事はオートフィルターだ!と思ったので 今、私の知りうる数少ない知識を駆使した結果がこれです。 (1)原本Sheetをコピー→コンボ用Sheetを作成 (2)コンボ用SheetのA~C列を列ごとに重複除去をし 除去した内容をE~F列に記載 (3)E~Fの内容をコンボボックス1~3のコントロールにする (4)コンボボックスのどれかを選択すると そのコンボボックスのTEXTでオートフィルターがかかる、 原本Sheet対応列を絞り込み (5)コンボ用Sheetを削除 (1)~(5)エンドレス・・・みたいなコードでやりたい事に対応出来ましたが 何しろシートのコピー・削除が何回もあるので 重くて重くてとても使い物にはなりません。 どうにか重くならずに同じような作動をするコードはないでしょうか。 このような感じで原本Sheetは作成されております。 [原本Sheet] A B C 1 駅名 顧客名 店舗名 2 ○ △ □ 3 ○ ▲ ■ 4 ◎ △ □ 5 ◎ ▽ ◇ 6 ● ▽ ◆
- ベストアンサー
- Excel(エクセル)
- エクセル VBA コンボボックスで検索
エクセルVBA初心者です。 シート1行目には工場名、2行目に見出し、3行目からデータが記入されています。 2行目に見出しとして、A列には作業者名、B列に工事番号、C列から作業時間などが記入されています。 ユーザーフォームにコンボボックス、コマンドボタンを設置し、コンボボックスには工事番号一覧が表示されるようにするところまではできましたが、コンボボックスで工事番号を選択し、コマンドボタンを実行することで、1シート内の一致する行だけを表示したいのですが、いろいろなサイトを参考に試してみたのですがうまくいきませんでした。 同じ内容のシートが複数ありますが、シート毎での検索・抽出をしたいと考えています。 どのようなコードを作成したら良いのかご教授願えたら幸いです。 よろしくお願い致します。
- ベストアンサー
- オフィス系ソフト
お礼
kkkkkm様、ありがとうございます。 1行ずつ調べながら作業をしており、お礼まで時間がかかってしまいました。 おかげさまで希望の動きとなったのですが、マクロが[実行中]のままになってしまいます。 ■ボタンで停止をすることはできますが、何か他の方法はございませんでしょうか?