• ベストアンサー

エクセルVBAで、テキストボックスにセルの値を入れる

宜しくお願いします。 エクセルデータの各項目を、すでに書式(表)が印刷された用紙のそれぞれの項目の位置に印刷させたいのですが・・・ 各項目には、500行ぐらいのデータがあり、別のワークシートの表示させたい位置(すでに印刷された用紙にあわせてある)に各項目ごとのテキストボックスを作っておいて、そのテキストボックスに各項目のデータを1行ごとに表示させて、テキストボックスのフォント調整、印刷 ~を繰り返したいのですが、どのようなコードを書けばよいのでしょうか? 進め方としては、データシートからテキストボックスに各項目のデータが表示されたら、シート上でテキストボックスのフォントや位置の微調整が出来るようにしておいて、印刷ボタンをクリックすると印刷され、次へのボタンをクリックすると、次の行のデータがテキストボックスに表示されるようにしたい。 ※印刷する場合は、テキストボックス内の文字のみ印刷(シートには印刷したくない文字書きたいので・・・) また、そのフォームには、パターンが5つあって、データには1行ごとにパターン番号が入力されているとして、それぞれのパターンにあわせたテキストボックスの配置してあるシートへ行くようにもしたい。 データの入れ替わりが多いので、別のワークブックと繋がるような仕組みにしておいて、テキストボックスの配置してあるブック側から、データのあるブックを呼びに行ってデータを取りに行くようにしておきたい。 以上、条件が多くてすみませんが、VBAは初心者で、ほんの部分的にしかまだ分かりません。どなたか詳しい方宜しくお願いします。

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

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.14

前回の解答はプレビューで確認し、プレビュー画面の印刷ボタンを押せば印刷しますが、プレビュー画面を表示しないで直接印刷する場合は、単票印刷の書式覚えておく必要があります。 下記の修正は、印刷時にどのパターンの単票が必要かを知らせます。メッセージ表示のタイミングは、特定の印刷パターンを指定した時は印刷時最初のみ、全パターン指定時は各データ印刷毎です。特定の印刷パターンを指定すれば用紙をまとめてセットできるので実務的と思われます。 ●**** 追加 **** と書いた範囲を追加、**** 修正 **** の1行を修正 Public Sub page_Print(sPatt, iPatt As Integer) '**** 修正 **** '**** 追加 **** ↓ Dim myMsg As String 'メセージ If iPatt = 0 Then myMsg = (Worksheets("Sheet1").Range("B5") - 1) & " 行目" & vbLf myMsg = myMsg & "印刷パターン " & StrConv(sPatt, vbWide) & " を印刷します。" & vbLf myMsg = myMsg & "  用紙をセットしてください。" & vbLf & vbLf myMsg = myMsg & "(印刷しない場合はキャンセルを押します。)" & vbLf & vbLf If MsgBox(myMsg, vbOKCancel) = vbCancel Then Exit Sub End If End If '**** 追加 **** ↑ Range("Print_Area").Select: Selection.Font.ColorIndex = 2 ActiveWindow.SelectedSheets.PrintPreview 'PrintOut Selection.Font.ColorIndex = xlAutomatic Range("Print_Area").Cells(1, 1).Select End Sub ●**** 追加 **** と書いた範囲を追加、**** 修正 **** の1行を修正 Public Sub job_Print() '指定して連続印刷 : Application.ScreenUpdating = False '**** 追加 **** ↓ If prtPattern <> 0 Then myMsg = "印刷パターン " & StrConv(prtPattern, vbWide) & " を印刷します。" & vbLf myMsg = myMsg & "  用紙を複数枚セットしてください。" MsgBox myMsg, vbOKOnly End If '**** 追加 **** ↑ For rowCot = startRow To endRow '連続ページ印刷 Tensou rowCot, prtPattern If prtPattern = 0 Or (prtPattern = shtPatt) Then '印刷パターンを判定 page_Print shtPatt, prtPattern '**** 修正 **** End If Next Application.ScreenUpdating = True Worksheets("Sheet7").Activate End Sub ●**** 修正 ****の1行を修正(5シート同様に修正) Private Sub CommandButton2_Click() 'シート単位の1ページ印刷ボタン page_Print Right(ActiveSheet.Name, 1), 0 '**** 修正 **** End Sub

rurucom
質問者

お礼

nishi6さん、長い間ありがとうございました。何と素晴らしいものになりつつあります。 あと、何点か質問があるのですが・・・補足を書く事が出来なくなってしまったので、質問にエクセルVBAで、テキストボックスにセルの値を入れる(2)で新たに質問させていただきますので、宜しくお願いします。

rurucom
質問者

補足

nishi6さん!ありがとうございます。早速、やってみます!明日にでも結果ご連絡します。

その他の回答 (13)

  • TTak
  • ベストアンサー率52% (206/389)
回答No.3

VBAは最後の手段にしましょう。VBAを使わない方法を要旨だけ書きます。 例として、データシートをSheet1、印刷シートをSheet2とします。 (1)---テキストボックスに別のシートの値を入れる テキストボックスをアクティブにして、数式バーに参照元を入れると、テキストボックスにはその値が表示されます。これを利用すれば、VBAなしでセルの値をテキストボックスに反映できます。もちろんフォントや位置の設定も参照元に関係なくできます。例として印刷シート(Sheet2)にテキストボックスを一個配置して"=A1"と入れてみてください。するとA1の値が表示されますね。 (2)---INDEX関数でデータを検索する データシート(Sheet1)のA1~A500まで500行のデータがあるとします。 次に、印刷シート(Sheet2)のセルA1に "=INDEX(Sheet1!A1:Sheet1!A500,x)" と書けば、セルA1にはSheet1のA列のx行目が表示されます。 xの所にB1と入れて、B1のセルの値を1,2,3,4.....と変化させるとSheet1のA列の1,2,3,4.....行目が順々に表示されますね。そうすると、(1)で、テキストボックスの値がセルA1の値とリンクしているので、セルB1の数値を変化させるとテキストボックスの値も変化します。 (3)---ボタンでセルB1の値を変化させる [フォーム]ツールバーからスピンボタンを選択して、印刷シート(Sheet2)に貼り付けます。スピンボタンの書式設定で[リンクするセル]に"=$B$1"と入れてやれば、スピンボタンの値がB1に表示されますね。あとはボタンを押せば、B1の値が変化して、B1の値を参照しているA1のINDEX関数がSheet1のデータを返すはずです。 最後に、スピンボタンの上下と数値の増減を反転させたり、スピンボタンを印刷しないようにする必要がありますが、可能ですから考えてみてください。 印刷シートが複数あってもこの方法は使えますので、応用問題と思って考えてみましょう。あと、テキストボックスだけ印刷して、シートの文字は印刷しない方法は、セルの色と文字の色を一緒にするマクロを自動記録してみてください。

rurucom
質問者

お礼

TTakさん!ありがとうございます。早速やってみました。うまく動いてます。 すごいですね! VBAでなくてもこんなことが出来るんですね!あとは頑張って考えます。

rurucom
質問者

補足

TTakさん!すみません! ひとつ教えてください! セルに入力されている4桁のデータをバラバラに、1桁ずつテキストボックスに表示される方法はないでしょうか? セルに表示させる場合は、MID関数を使って1セルに1桁ずつ表示させることは出来たので、一旦この方法で表示させて、テキストボックスに表示させたのですが、問題なのが・・・ (1)予めデータ数を予測して、数式をデータシートに入れて置かないといけないと言う事。で、予測が外れたら計算されない事。 (2)これを、更に5つのパターンに分ける為、ファイル容量が大きくなる事。といううより、計算中から先に進みませんでした。 と言う事で、この辺について教えてください。宜しくお願いします。

  • TTak
  • ベストアンサー率52% (206/389)
回答No.2

rurucomさんこんにちは ずいぶん、実務的なフォーマットをお造りのようですね。がんばってください。 さて、お使いの”テキストボックス”なのですが、実は、シート上に配置できるテキストボックスは2種類あって、[図形描画]ツールバーのコマンドボタンから選択されたものか、[コントロールツールボックス]ツールバーのコマンドボタンから選択されたもかで(マクロ)コードの記述が変わってきます。どちらのテキストボックスかお知らせください。また、EXCELのバージョンもおしえてください。

rurucom
質問者

補足

TTakさん!よろしくお願いします。TTakさんの回答はいつも参考にさせていただいています。私も早く回答が出来るようになりたいです。 ご質問の件ですが・・・ ●[図形描画]ツールバーから選択したものを使って作りたいのです。というの が、シート上でその都度フォントの調整などをしながら印刷させたいからです。 ● Excelのバージョンは97です。(会社のPCで作成するので・・・) 説明不足ですみませんでした!よろしくお願いします。

  • ARC
  • ベストアンサー率46% (643/1383)
回答No.1

ワークシート上にテキストボックス(TB1)とコマンドボタン(CB1)を配置して、以下のようにコードを書きます。 (ただし、テキストボックスは、図形描画ツールバーのものではなく、コントロールツールボックスのものを使います。) Private Sub CB1_Click() Me.TB1 = Range("A1") 'A1の中身をテキストボックスに転送する Me.TB1.Font.Name = "MS 明朝" 'フォントをMS 明朝にする Me.TB1.ForeColor = RGB(255, 0, 0) '色を赤にする Me.TB1.Font.Size = 20 '20ポイントの大きさにする Me.PrintOut '印刷する End Sub ちなみに、部分的に印刷したくない文字がある場合は、(図形描画ツールバーの)テキストボックスをシートに配置して、テキストを記入し、テキストボックスの書式設定から、「印刷しない」にチェックを付ければいいです。 不明点とかあったら、補足してください。

rurucom
質問者

補足

すみません! やってみましたが、さっぱり分かりませんでした。すみませんが、詳しく教えていただきたいのですが、宜しくお願いします。

関連するQ&A