誕生日にもらった意外なもの

ユーザーフォームのテキストボックスに
指定したシートの内容を表示するようにしていますがテキストボックスが800くらいあり
マクロで一つづつ記入するとサブルーチンの
中の行数が2000行以上を越えたためかプロシージャ異常になります。
マクロの命令でまとめて書くことは可能なのでしょうか?
例えばテキストボックス1から100まで
シートAのセルA1からA200までを表示
するとか、、、
ご教示をお願いいたします。

質問者からの補足コメント

  • 回答ありがとうございました。
    ご教示頂いた内容でちゃんと動きました。
    ただ少し変更しなければいけなくなりました。例えばテキストボックス1から50までの中に指定したシートのセルA5からA55まで入れたい場合など、できればテキストボックスと表示したいセルの範囲をそれぞれ指定できないでしょうか?ご教示をお願いいたします。

      補足日時:2018/09/17 08:42
  • 回答ありがとうございました。
    説明が悪くてすみません。
    できればテキスト50から100に
    セルB5からB55の内容を表示したい場合
    などそのような感じでテキスト101から
    150までにセルC5からC55など
    複数表示させたいです。
    どのようにしたら良いでしょうか?
    何度も申し訳ありません。
    ご教示頂だけると助かります。

      補足日時:2018/09/19 05:53
  • すみません。連絡ありがとうございます。
    まだ試しておりません。
    また結果をご連絡いたします。
    お助けありがとうございます。

      補足日時:2018/09/21 06:53
  • お世話になります。
    試してみましたが、設定のやり方が
    よくわかりません。
    教えて下さい。
    例えば
    シート名がAと言うシートで
    テキストボックスが1から30で
    セルがA5からA35までの内容を
    表示したい場合どのように設定したらよいのでしょうか?
    ご教示願います。
    よろしくお願いいたします

      補足日時:2018/09/24 12:51

A 回答 (4件)

> シート名がAと言うシートで


>テキストボックスが1から30で
>セルがA5からA35までの内容を
>表示したい場合どのように設定したらよいのでしょうか?

数があっていません。
A5からA34とします。

Call CopyToTextBox("1:30", "A", "A5:A34")
として、ください。

ちなみに
Call CopyToTextBox("1:30", "A", "A5:A35")
とすると、添付画像のメッセージが表示されます。
「ユーザーフォームのテキストボックスに 指」の回答画像4
    • good
    • 0

CopyToTextBoxという汎用のコピー関数を作りましたので、それを呼び出してください。



呼び出し例は以下のようにします。
Call CopyToTextBox("1:3", "Sheet1", "B11:B13")・・・①
Call CopyToTextBox("4:6", "Sheet5", "B2:D2")・・・・②

①テキストボックス1~3へSheet1のB11からB13をコピー(B列の複数行のコピー)
②テキストボックス4~6へSheet1のB2からD2をコピー(2行の複数列のコピー)


'--------------------------------------------------
'テキストボックスへセルの内容をコピー
'textRange:テキストボックスの範囲("2:20"等)
'sheet_name:シート名
'cellRange:セルの範囲("A2:A20"等)
Private Sub CopyToTextBox(ByVal textRange As String, ByVal sheet_name As String, ByVal cellRange As String)
Dim i As Long
Dim textband As Variant
Dim rng As Range
Dim wr As Range
textband = Split(textRange, ":")
Set rng = Worksheets(sheet_name).Range(cellRange)
If textband(1) - textband(0) + 1 <> rng.Rows.Count * rng.Columns.Count Then
MsgBox ("範囲不一致 " & textRange & "<>" & cellRange)
Exit Sub
End If
i = 0
For Each wr In rng
Me.Controls("TextBox" & (i + textband(0))).Text = wr.Value
i = i + 1
Next
End Sub
    • good
    • 0

以下のようになります。


テキストボックス1にA5が対応しますので、テキストボックスiにA(i+4)が対応します。(5=1+4)

Dim i As Long
For i = 1 To 50
Me.Controls("TextBox" & i).Text = Worksheets("A").Cells(i + 4, "A").Value
Next
    • good
    • 1

シートAのセルA1からA200までではなく


シートAのセルA1からA100までになりますが、以下のようにすればできます。

Dim i As Long
For i = 1 To 100
Me.Controls("TextBox" & i).Text = Worksheets("A").Cells(i, "A").Value
Next
    • good
    • 0

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