アプリ版:「スタンプのみでお礼する」機能のリリースについて

UserForm上にTextBox1、TextBox2、TextBox3、TextBox4、検索ボタンがあり、シートのC列にデータが入力されています。
下記のことを行いたいと考えています。

(1)TextBox1に検索する文字列入力
(2)TextBox2に台数(例えば100)を入れて検索ボタンを押す
(3)検索ボタンを押すと、TextBox3にTextBox1の値が入り、TextBox4にTextBox1の値から入力した台数の行にある値を検索して表示させたいのです。
と同時に、TextBox3、TextBox4からシートの範囲選択を行うことは可能でしょうか?

以前も質問させていただきましたが、動作するに至らずでしたので再質問させていただきました。
よろしくお願いしますm(__)m

A 回答 (5件)

セルの範囲をシート上でクリックもしくはドラッグして入力する場合は、TextBoxではなくRefEditコントロールを使用します。


RefEditコントロールをUserFormに貼り付けるにはVBE画面で以下の操作をします。

(1)フォームの画面でツールボックスを表示
(2)ツーツボックスの余白を右クリック
(3)「その他のコントロール」をクリック
(4)スクロールして「RefEditCtrL」のチェックボックス
 をクリック
(5)「OK」クリック

これでRefEditコントロールがツールボックスに新たに表示されますので、TextBox1を削除しRefEditコントロールを貼り付けてください。

コードは以下を参考にして下さい。

Private Sub CommandButton1_Click()
'---「(1)TextBox1に検索する文字列入力」
'---「おっしゃる通りです。C1:C4000にデータが入力」

str先頭セルアドレス = RefEdit1.Value

'---「(2)TextBox2に台数(例えば100)を入れて」

int相対行 = TextBox2.Text - 1


'---対象セルの位置を求める
'---注:C1と入力してもC1:C4000と入力しても結果は同じ

int対象セルの行番号 = Range(str先頭セルアドレス).Row + int相対行
int対象セルの列番号 = Range(str先頭セルアドレス).Column

'---「(3)TextBox3にTextBox1の値が入り、」

TextBox3.Text = str先頭セルアドレス


'---「TextBox4にTextBox1の値から入力した台数の行にある値」
'---「TextBox1の検索文字列から100行目のデータ」

TextBox4.Text = Cells(int対象セルの行番号, int対象セルの列番号)

End Sub

なお、入力エラーの処理はありません。
    • good
    • 0

こんにちは。



ご質問自体は、あまりよく理解できませんが、こういう内容かなって思います。
それと、ボタンがひとつ余計のようですね。本来は、TextBox2 に代入した時点で、範囲が取れます。



'Option Explicit
Dim i As Long
Dim j As Long
Dim CopyRng As Range
Private Sub CommandButton1_Click()
'OKボタン
'TextBox3とTextBox4のシリアルNoの範囲をC列から範囲選択した状態にする。
 With ActiveSheet
  If i > 0 And j > 0 Then
  Set CopyRng = .Range(.Cells(i, 3), .Cells(j, 3))
  CopyRng.Select
  End If
 End With
End Sub

Private Sub CommandButton2_Click()
'貼り付けボタン
'選択した範囲をコピーし、別シートのB11から下へ貼り付ける。
 If Not CopyRng Is Nothing Then
  If IsEmpty(Worksheets("Sheet2").Range("B11")) Then
    CopyRng.Copy Worksheets("Sheet2").Range("B11")
  Else
    CopyRng.Copy Worksheets("Sheet2").Range("B65536").End(xlUp)
    MsgBox "コピー完了", 64
    CopyRng.Cells(1).Select
    Set CopyRng = Nothing
  End If
 End If
End Sub

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
'TextBox1
 If KeyCode = 13 Then
  TextBox3.Text = TextBox1.Text
  i = Val(TextBox3.Text)
 End If
End Sub


Private Sub TextBox2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  'TextBox2
  Dim t As Long
  Dim Ret As Long
  With ActiveSheet
    If KeyCode = 13 Then
      If i > 0 Then
        j = CLng(TextBox2.Value) '行数を入れる
        TextBox4.Text = TextBox2.Value
      End If
    End If
  
  End With
End Sub
    • good
    • 0

テキストボックスを使いまくらなくとも、セル範囲の指定は


Sub test01()
Dim a As Range
Set a = Application.InputBox(prompt:="検索範囲指定", Type:=8)
MsgBox a.Address
Range("D1").Select
Worksheets("Sheet1").Range(a.Address).Select
End Sub
のように、Application.InputBoxのType:=8で捉えられる。
ーーー
>TextBox1に検索する文字列入力
この正確な意味は、
TextBox1に検索する、セル範囲の文字列を入力、のことか?
そして例えばTextBox1がA1:A20という文字列で,
TextBox2が100という数値なら,
台数が入っている、A1:A20の範囲で100の行を探すということではないの?
そう書けば簡単ではないの。
ーー
それなら初めに言った、、Application.InputBoxのType:=8が良いと思うよ。
ーー
使わないのなら、
Sub test02()
s = InputBox("検索セル範囲文字列")
Worksheets("Sheet1").Range(s).Select
End Sub
が参考になると思うよ。
文字列sがTextbox1と考えればよいから。

この回答への補足

返事が遅くなり、申し訳ありません。

>TextBox1に検索する文字列入力
おっしゃる通りです。C1:C4000にデータが入力されており、TextBox2に100と入力すると、TextBox1の検索文字列から100行目のデータをTextBox4に表示させたいのです。
Application.InputBoxの使い方がまだよくわかっていないため、調べて勉強してみます。

補足日時:2007/07/10 19:25
    • good
    • 0

こんばんは。



#1 さんとダブりました。(くどいのはお許しください)

前回の質問とあわせて読ませていただきました。
たぶん、前のものでも、今回のものでも、、キメウチでコードを書く人は掲示板ではいるとは思いますが、私には、出来ません。書いても「動きません」と言われるだけだと思います。

そのご説明では、情報として不足しているようです。

>TextBox1に検索する文字列入力
たぶん、シリアルNo.を検索する、というのでしょうね。
それが、C列にあるのですか?

>TextBox2に台数(例えば100)を入れて検索ボタンを押す
台数を入れて、どこを検索するのですか?

>TextBox3にTextBox1の値が入り、
>TextBox4にTextBox1の値から入力した台数の行にある値
>検索して表示させたいのです。

台数のある行というのはどこにあるのですか?
シリアルNo.は台数ではありません。

最後の範囲選択とはどのようになるのでしょうか?
行として選択するのでしょうか?

さっぱり分からないのです。簡単な図でも書いていただけませんか?

この回答への補足

言葉足らずで申し訳ありませんでしたm(__)m

>たぶん、シリアルNo.を検索する、というのでしょうね。
>それが、C列にあるのですか?
その通りです。検索するシリアルNo.はC列にあります。

>台数を入れて、どこを検索するのですか?
台数を100とすると、TextBox1に入力したシリアルNo.からC列の100行目を検索したいと思っています。

>台数のある行というのはどこにあるのですか?
台数という言い方は適切ではありませんでしたm(__)m
C列の100行目という意味です。

>最後の範囲選択とはどのようになるのでしょうか?
行として範囲選択したいと思っています。
具体的にはTextBox3とTextBox4に入力されたシリアルNo.の範囲を選択したいと思っております。

補足日時:2007/07/10 19:36
    • good
    • 0

条件やデータ構造が理解出来ません。



> TextBox1の値から入力した台数の行にある値

TextBox1とTextBox2とシート上のデータに対する関連が見えません。
以前に質問されたならば、ある程度のコードは出来ているのでしょうか?

動作に至らなかった部分に絞って質問しては如何でしょう?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています