• ベストアンサー

VBAについて

エクセルシートで任意に選択されたセルの個数を VBAのUserFormのTextBoxに表示されるのは どのようにしたらよいのでしょうか? 例)エクセルシートで、B2~D2をマウスで選択すると、   UserFormのTextBoxに3と表示されるようにする。 任意に選択されたセルの個数を求めるのは 以下のようにしました↓↓↓ ********************************* * Sub GetAreaValue() *   Dim CELLNUM As Integer *   CELLNUM = Selection.Count * End Sub *********************************

  • gazo
  • お礼率30% (74/241)

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

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

分からない点はどの部分でしょうか? >エクセルシートで、B2~D2をマウスで選択すると、 が分からないなら、ワークシートのSelectionChangeイベントにUserFormのテキストボックスに表示するコードを書いて下さい。 求める関数 >Sub GetAreaValue() を作ったけど表示の仕方が分からないのであれば、その関数はSubで宣言されているのでCELLNUMという変数の内容を外に出せません。 Function GetAreaValue() As Integer と宣言し、関数の最後に GetAreaValue = CELLNUM と書けば選択されているセル数を返す関数になるので UserForm1.TextBox1.Text = GetAreaValue で表示されます。 または、 Sub GetAreaValue(iTextBox As TextBox) と宣言し、関数の最後に iTextBox.Text = CELLNUM と書き、関数内でTextBoxへの表示を行う手もあります。 使い方は Call GetAreaValue(UserForm1.TextBox1) 以下はご参考。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Not UserForm1.Visible Then UserForm1.Show 0 UserForm1.TextBox1.Text = Selection.Count End Sub

gazo
質問者

お礼

回答どうもありがとうございます。 おかげで、無事解決することができました。 どうもありがとうございました。

その他の回答 (2)

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

こんばんは。 >UserFormのTextBoxに3と表示されるようにする。 単純に、UserForm の動きとは別に、このようにすればよいのではありませんか? Private Sub Worksheet_SelectionChange(ByVal Target As Range)   UserForm1.TextBox3.Value = Selection.Count End Sub もちろん、UserForm1.Show 0 で、モードレスモードで立ち上がっていることは言うまでもありませんが。

gazo
質問者

お礼

回答どうもありがとうございます。 おかげで、無事解決することができました。 どうもありがとうございました。

  • arare2005
  • ベストアンサー率31% (63/199)
回答No.2

UserForm!TextBox.text = CELLNUM こんな感じだったと思います(^^;

gazo
質問者

お礼

回答どうもありがとうございます。 おかげで、無事解決することができました。 どうもありがとうございました。

関連するQ&A

  • VBAについて

    Private Sub Worksheet_SelectionChange(ByVal Target As Range) UserForm1.TextBox1.Text = Selection.Count ・・・(1) End Sub *************************************************************** ワークシートで選択されたセルの個数を上のようにして、TextBox1に表示させています。 そこで、例えば 1. Sheet1.Range(Cells(8, X), Cells(8, Y))が選択された場合、  ・(1)によって、TextBox1に「Y-X+1」を表示  ・TextBox2に、Sheet1.Cells(4, X) & Cells(4, Y))の値を表示 2. Sheet1.Range(Cells(10, X), Cells(10, Y))が選択された場合、  ・(1)によって、TextBox1に「Y-X+1」を表示  ・TextBox2に、Sheet1.Cells(4, X) & Cells(4, Y))の値を表示 させたいのですが、どのようにしたらよいのでしょうか?

  • セルの選択について

    <Sheet2のコード> Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Not UserForm3.Visible Then UserForm3.Show 0 UserForm3.TextBox1.Text = Selection.Count End Sub *********************************************** <UserForm3のコード> Private Sub CommandButton1_Click() With Selection .MergeCells = True .WrapText = True .Value = TextBox2.Text & ComboBox1.Text End With UserForm3.Hide End Sub ---------------------------------------------- Private Sub UserForm_Initialize() Dim lastrw As Integer, lastrw2 As Integer, i As Integer lastrw = Sheet3.Range("A1").End(xlDown).Row lastrw2 = Sheet3.Range("B1").End(xlDown).Row If Sheet2.Range(Cells(5, 4), Cells(5, 100)).Select Then ・・・(1) For i = 1 To lastrw - 1 ComboBox1.AddItem Sheet3.Cells(i + 1, 1).Value Next i End If If Sheet2.Range(Cells(6, 4), Cells(6, 100)).Select Then ・・・(2) For i = 1 To lastrw2 - 1 ComboBox1.AddItem Sheet3.Cells(i + 1, 2).Value Next i End If End Sub ************************************************* ワークシート上でマウスで選択されたセルの行ごとにUserForm3のComboBox1で表示させる文字を変えたいのですが、どのようにすればよいのでしょうか。 上の(1)(2)だととマウスで選択されたセルではなく(1)(2)の範囲のセルが結合されてしまいます。。。 また、今はワークシート上でマウスを左クリックする度にUserForm3が表示されてしまいます。 これをワークシート上でマウスでセルを選択して右クリックするとUserForm3が表示される ようにしたりすることは可能なのでしょうか。

  • エクセルVBAのマクロ文について

    エクセルVBAで、シート上のボタン(フォーム)をクリックすると、UserForm1が表示されてその中のTextBoxに別のシートのセルに入力したいる値を表示させたくて、以下のようにボタン(フォーム)にマクロを入力したのですが、エラーがでてきてうまくいきません。 入力したマクロが間違っているのでしょうか? Sub ボタン1_Click() UserForm1.Show UserForm1.TextBox1 = Sheets("入力").Ranges("D11").Value End Sub すみませんが、ご存知の方、教えてくださいませんか?

  • VBAで最終行の取得について

    UserFormのConboBoxで「○○」を選んで、 UserFormのTextBoxで『あいう』と入力すると、ワークシートに A      B 1 ○○   ×× 2 あいう と表示され、 UserFormのConboBoxで「××」を選んで、 UserFormのTextBoxで『アイウ』と入力すると A      B 1 ○○   ×× 2 あいう  アイウ 3 :    : と表示されるようにしたいと思います。 以下のプログラムまではできています。 ********************************************* Private Sub UserForm_Initialize()  Dim lasClm As Integer, i As Integer  lasClm = Sheet1.Range("A1").End(xlToRight).Column   For i = 1 To lasClm   ComboBox1.AddItem Sheet1.Cells(1, i).Value   Next i End Sub ********************************************* Private Sub CommandButton1_Click()  Select Case ComboBox1.Text  Case Sheet1.Cells(1, 1).Value '「○○」が選択  Sheet1.Cells(2, 1).Value = TextBox1.Text ・・・(1)  Case Sheet1.Cells(1, 2).Value '「××」が選択  Sheet1.Cells(2, 2).Value = TextBox1.Text ・・・(2)  End Select  UserForm1.Hide End Sub ********************************************** 今は(1)、(2)のように直接セルを指定しているのですが、 この部分を各列(A列、B列)の最終行の値を取得して、 最終行+1のセルに順次TextBoxに入力された値を代入していきたいのですが、 どのようにしたらよいのでしょうか。 しかし、A列とB列は同じように値が増えていくとは限りません。 例)    A     B 1 ○○   ×× 2 あいう  アイウ 3 かきく 4 さしす となる場合もあるので、A列とB列それぞれの最終行の値を取得したいと思っています。

  • Excel VBA-改行について

    Excel VBAで、UserFormのTextBoxに入力されたものをワークシートに表示させたいのですが、 TextBox内で、「Enter」キーが押されたら改行する方法と TextBoxで入力された通り(改行等)にワークシートのセルに表示する方法を どなたか教えて下さい。

  • VBAについて質問します。

    UserFormにTextBoxを縦13個×横9個=117個で並べています。 ExcelのSheetに入力された内容をUserForm内のTextBoxに表示しています。 以下の様に・・・   Dim y As Integer Dim x As Integer For y = 1 To 13 For x = 1 To 9 Controls("TextBox" & (y - 1) * 9 + x) = ThisWorkbook.Sheets(2).Cells(y, x) Next x Next y このコードに表示された数字の先頭に¥を付けたいのですが、どの様にしたら良いでしょうか? だだしUserForm上のTextBoxで縦13個×横9個のうち、縦1列目と縦3列目と縦5列目のみ¥は必要ないです。 それ以外を全て¥を数字の頭に付けたいのですが、よろしくお願いします。

  • VBAについて

    Excel VBAのUserFormにマルチページ(Page1、Page2、Page3)があります。 Sheet1で1行目のセルを選択した場合は、UserFormのPage1のみを表示 (Page2、Page3は非表示)、 Sheet1で2行目のセルを選択した場合は、UserFormのPage2のみを表示 (Page1、Page3は非表示)、 というようにしたいのですがうまくできません。 どのようにしたらよいのでしょうか。

  • ワードVBAで、段落のタブの数を数えたい。

    ワード2002使用です。 2段落目に複数のタブが入力されています。 ワードVBAで、選択した段落のタブの個数を数えたい。 sub タブ() Dim tab数 As Integer ActiveDocument.Paragraphs(2).Range.Select tab数 = Selection.Paragraphs.tabs.Count←ここがよくわかりません msgbox tab数 end sub よろしくお願いします。

  • VBAについて

    はじめまして、以下のVBAについて質問させてください。 A列にデータの個数だけ連番を振りたくて、以下のVBAを入力しました。 連番を振るシートは複数あり、そのシートによってデータの個数は異なります。 しかし、以下のVBAだと最初のシートの個数に応じて、後のシートの連番も振られてしまいます。データの個数に応じてシートごとに連番を振るには、どうすればよいのでしょうか…?!どうか迷える子羊をお助け下さい(T_T) '一番はじめのシートを選択 Sheet "一番".Select 'A列に連番を振る Dim sh As Variant For sh = 3 To Worksheets.Count Dim number As Integer Dim 行2 As Long number = 1 '2行目~最終行までループ For 行2 = 3 To Cells(Rows.Count, 2).End(xlUp).Row Worksheets(sh).Cells(行2, 1) = number number = number + 1 Next 行2 Next sh

  • エクセルVBA ひとつ下の行を選択したい

    オートフィルタがかかっている状態で、 ひとつ下の行のセルを選択したいです。 具体的には、エクセルシートで選択したセルの情報をフォームで編集するのですが、 そのフォームの中のスピンボタンで選択しているセルを上下に移動させたいのです。 以下のコードだと、当然ですがフィルタで抽出されたセル以外も選択されてしまいます。エクセルシート上での矢印キーやENTERキー(入力後にセルを移動する方向が下のとき)と同じ動きがしたいです。 どうかお助けください。。。 Private Sub SpinButton1_SpinUp() Cells(Selection.Row - 1, Selection.Column).Select Call UserForm_Initialize End Sub Private Sub SpinButton1_SpinDown() Cells(Selection.Row + 1, Selection.Column).Select Call UserForm_Initialize End Sub

専門家に質問してみよう