質問がバラバラになってしまってすみません!
エクセルVBAで、テキストボックスに値を入れる(1)の 回答13で、
データシートの何行目~何行目までを印刷させる方法(Sheet7にボタン)
をさせるには、どうしたら良いでしょうか?宜しくお願いします。

前回のURL:http://oshiete1.goo.ne.jp/kotaeru.php3?qid=79173
      http://oshiete1.goo.ne.jp/kotaeru.php3?qid=85389

このQ&Aに関連する最新のQ&A

A 回答 (11件中11~11件)

シート7にボタンを1つ作成します。

VBAのコントロールツールボックス(トンカチとスパナみたいなアイコン)のコマンドボタンです。

コマンドボタンをダブルクリックして、VBE画面のシート7のシートモジュールに
下記を貼り付けます。13の回答ではCommandButton1が複数表れるので、3番目のボタンの意味でCommandButton3と書いてしまいました。シート7にコマンドボタン1個の場合はCommandButton1となるはずなので job_Print を書けばおしまいです。

====印刷シート7のシートモジュールに貼り付け=====
Private Sub CommandButton1_Click()
job_Print
End Sub

この回答への補足

説明不足ですみませんでした。

パターン毎に印刷する場合と、データの行を範囲指定して印刷する場合とを別々にしたかったのです。現在のボタンは残したままでいいのですが、別にパターンを無視した行の指定をさせたたかったのです。

本当にすみません!説明不足で!よろしくお願いします。

補足日時:2001/06/05 19:04
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

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

エクセルVBAで、テキストボックスにセルの値を入れる(1)の 回答13で
>うまくいったとしてもデータの書込みとテキストボックスの更新が同期がとれない時がある という部分で
これは、どういった理由で同期がとれなくなるのでしょうか? それとその場合の対処法を教えてください。

前回URL:http://oshiete1.goo.ne.jp/kotaeru.php3?qid=79173

Aベストアンサー

回答13を書いているときに、実行していてうまくいっているはずなのに、テキストボックスの数値が更新されない状態になり、いろいろ調べて、Tensouの中にDoEventsを2箇所入れています。それ以降は正常に更新されています。(私のPCでは)

個人的な経験ですが、たまにこの事象にぶつかります。シートやユーザーフォームにオプションボタンやテキストボックスを配し、シートに関連付けると同期がとれない場合があるようです。作りがまずいのかもしれませんが。
特にオプションボタンについては、ボタンの変更がセルに反映しなかったり、セルの値がオプションボタンに反映しないケースがあり、関連付けを止めて直接値をセットしたりしています。マイクロソフトのサポートにも似たような事例がありましたが原因はよく分かりませんでした。専門家にも聞いてみて、関連付けよりVABで直接値を代入する方式にしています。
今回の場合はDoEventsをいれて、正常に更新されるようになりました。

QエクセルVBAでテキストボックスの値の取得と変更について

エクセルのVBAを使ってシート上のテキストボックスのテキストを取得・変更するマクロを作成したいと思っていますがうまく行きませんので、お知恵を拝借したいとおもいます。

環境:WindowsXPでオフィス2002
状況:
エクセルブックa.xlsのシートに「コントロールツールボックス」のテキストボックスを配置(オブジェクト名はTEXTBOX_C)
エクセルブックb.xlsにコードを書き、a.xlsのTEXTBOX_CのプロパティのValueかTextを取りだしたい

試した事:
コントロールを配置したシートに次のマクロ
TEXTBOX_C.Text = "これはコントロールのテキストボックス"
を書くとテキストボックスに文字を入れ込めますが、別のエクセルブックからだと上手く行きません。

また、オートシェイプのテキストボックスの場合は簡単に出きるのですが、コントロールツールボックスではどうしても上手く行きませんので、対象法などご存知の方いらっしゃいましたら教えてください

Aベストアンサー

エクセルを新規に開きました。
そのSheet1に(コントロールツールボックスの)TextBoxを貼りつけました。
そのBook1から、ファイル-開くで別ブックを開きました。
別ブックのMojule1側に下記を書いて
Sub test02()
MsgBox Workbooks("book1").Worksheets("sheet1").textbox1.Text
End Sub
を実行すると、Book1のTextBoxに入れた文字列が表示
されました。
がそんな質問ではないのですか。

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

宜しくお願いします。

エクセルデータの各項目を、すでに書式(表)が印刷された用紙のそれぞれの項目の位置に印刷させたいのですが・・・

各項目には、500行ぐらいのデータがあり、別のワークシートの表示させたい位置(すでに印刷された用紙にあわせてある)に各項目ごとのテキストボックスを作っておいて、そのテキストボックスに各項目のデータを1行ごとに表示させて、テキストボックスのフォント調整、印刷 ~を繰り返したいのですが、どのようなコードを書けばよいのでしょうか?

進め方としては、データシートからテキストボックスに各項目のデータが表示されたら、シート上でテキストボックスのフォントや位置の微調整が出来るようにしておいて、印刷ボタンをクリックすると印刷され、次へのボタンをクリックすると、次の行のデータがテキストボックスに表示されるようにしたい。

※印刷する場合は、テキストボックス内の文字のみ印刷(シートには印刷したくない文字書きたいので・・・)

また、そのフォームには、パターンが5つあって、データには1行ごとにパターン番号が入力されているとして、それぞれのパターンにあわせたテキストボックスの配置してあるシートへ行くようにもしたい。

データの入れ替わりが多いので、別のワークブックと繋がるような仕組みにしておいて、テキストボックスの配置してあるブック側から、データのあるブックを呼びに行ってデータを取りに行くようにしておきたい。

以上、条件が多くてすみませんが、VBAは初心者で、ほんの部分的にしかまだ分かりません。どなたか詳しい方宜しくお願いします。

宜しくお願いします。

エクセルデータの各項目を、すでに書式(表)が印刷された用紙のそれぞれの項目の位置に印刷させたいのですが・・・

各項目には、500行ぐらいのデータがあり、別のワークシートの表示させたい位置(すでに印刷された用紙にあわせてある)に各項目ごとのテキストボックスを作っておいて、そのテキストボックスに各項目のデータを1行ごとに表示させて、テキストボックスのフォント調整、印刷 ~を繰り返したいのですが、どのようなコードを書けばよいのでしょうか?

進め方としては...続きを読む

Aベストアンサー

前回の解答はプレビューで確認し、プレビュー画面の印刷ボタンを押せば印刷しますが、プレビュー画面を表示しないで直接印刷する場合は、単票印刷の書式覚えておく必要があります。
下記の修正は、印刷時にどのパターンの単票が必要かを知らせます。メッセージ表示のタイミングは、特定の印刷パターンを指定した時は印刷時最初のみ、全パターン指定時は各データ印刷毎です。特定の印刷パターンを指定すれば用紙をまとめてセットできるので実務的と思われます。

●**** 追加 **** と書いた範囲を追加、**** 修正 **** の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

前回の解答はプレビューで確認し、プレビュー画面の印刷ボタンを押せば印刷しますが、プレビュー画面を表示しないで直接印刷する場合は、単票印刷の書式覚えておく必要があります。
下記の修正は、印刷時にどのパターンの単票が必要かを知らせます。メッセージ表示のタイミングは、特定の印刷パターンを指定した時は印刷時最初のみ、全パターン指定時は各データ印刷毎です。特定の印刷パターンを指定すれば用紙をまとめてセットできるので実務的と思われます。

●**** 追加 **** と書いた範囲を追加、**** 修...続きを読む

Qエクセル VBA ユーザーフォームを閉じる

ユーザーフォームを開く時は
UserForm1.Showですが
閉じる時は?
UserForm1.Close
だとコンパイルエラーになります。
End
にするしかないですか?

Aベストアンサー

Unload Me とか Unload UserForm1 でユーザーフォームを閉じることができます。

Qある範囲のセルから任意の値を検索して、その隣のセルの値を取得するという関数はありますか?

Excelの関数について質問します。
ある範囲のせるを検索して、その隣のセルの値を取得するという関数を探しています。
なければユーザー定義で作りたいと思っています。
VLOOKUP関数では一番左端が検索されますが、
それをある範囲まで拡張して、
その右隣の値を取得できるようにしたいのです。
どうかお知恵をお貸しください。

Aベストアンサー

●X1セルの値を範囲A1:F200の中から探して、その右隣のセルの値を返す

 =OFFSET(A1,SUMPRODUCT(ROW(A1:F200)*(A1:F200=X1))-1,SUMPRODUCT(COLUMN(A1:F200)*(A1:F200=X1)))

※最初のA1はワークシートの左上隅を示すものなので、検索範囲に関わらずA1固定
※SUMPRODUCT(ROW(A1:F200)*(A1:F200=X1)) ⇒ A1:F200で値がX1と一致するセルの行番号

>その「ある範囲」の中には検索したい値が入っているセルは1つしかありません。
というのが前提です。複数のセルがHITすると関係ないセルの値が返るので、
場合によっては、IFをかぶせてCOUNTIFで確認した方が良いかもしれません。
 ex. =IF(COUNTIF(A1:F200,X1)=1,【上記数式】,"えらー")

ちなみに、VBAでやるならこんな感じになるかと。

動作の概要
 【検査範囲】から【検査値】を探し、
 最初にHITしたセルについて、右隣のセルの値を返す。
 ex. =Sample(X1,A1:F200)

'--------------------------↓ココカラ↓--------------------------
Function Sample(ByVal 検査値 As Variant,ByVal 検査範囲 As Range)
 For Each セル In 検査範囲
  If セル = 検査値 Then Exit For
 Next セル
 Sample = セル.Offset(0, 1)
End Function
'--------------------------↑ココマデ↑--------------------------

いずれもExcel2003で動作確認済。
以上ご参考まで。

●X1セルの値を範囲A1:F200の中から探して、その右隣のセルの値を返す

 =OFFSET(A1,SUMPRODUCT(ROW(A1:F200)*(A1:F200=X1))-1,SUMPRODUCT(COLUMN(A1:F200)*(A1:F200=X1)))

※最初のA1はワークシートの左上隅を示すものなので、検索範囲に関わらずA1固定
※SUMPRODUCT(ROW(A1:F200)*(A1:F200=X1)) ⇒ A1:F200で値がX1と一致するセルの行番号

>その「ある範囲」の中には検索したい値が入っているセルは1つしかありません。
というのが前提です。複数のセルがHITすると関係ないセルの値が返るので、
場...続きを読む

Qテキストボックスの値を変数に代入したい。

テキストボックスの値を変数に代入したいのですが、どういうコードを書けばいいですか?
例えばTextBox1の値を変数xに代入したいのですが。

Aベストアンサー

VBでは処理の順番は、上から順に行います。(VBだけでなく殆どのプログラム言語でも同じ)

質問者のコードは
計算をしてから、変数に値を入れている。

QVBAフォームのテキストボックスに初期値を表示するには?

VBAのフォームのテキストボックスに、初期値としてフォームを開いた当日の日付を表示したいのです。
開いたときは今日の日付が既に表示されていて、必要に応じて書き換える、そんなふうにしたいのですが。

Aベストアンサー

こんにちは。

こういうことかな?

Private Sub UserForm_Initialize()
  TextBox1.Text = Format$(Date, "yy/mm/dd")
End Sub

Qユーザーフォームへのデータ入力を繰り返す方法

宜しくお願い致します。
ユーザーフォームへのデータ入力を繰り返したいのですが、うまく動いてくれません。
登録件数分データを入力(textbox2)し、それをExcelのシートに出力していきたいと思っています。

具体的には
Dim 登録件数 as integer
DIM i as integer
For i = 1 To 登録件数
TextBox1.Value = i
Cells(i, 2).Value =textbox2.value
TextBox2.Value = ""
Next i
のようなことを考えていますが、これで実行すると、2回目以降、ユーザーフォームのtextbox2にデータを入れることができません。

初歩的な質問で誠に恐縮ではございますが、どこを正せば動くようになるのか、ご指導の程宜しくお願い致します。

Aベストアンサー

>データはB1のセルにどんどん上書きをしてしまいます。

DIM i as integer
の変数宣言をプロシージャ(sub ~ End Sub)の外に置いていますか?
内部にあると常に初期化されて、カウントアップ(+1)してくれません。

>「何でFor文でなくて、If文なのだろう?

IF文は比較するのに使います。
今回の場合、書き込み前に繰返し回数をiの値をIF文で比較し、iの値をカウントアップ(i=i+1)して、書き込みます。

for文でも同じ事ができますが、テキストボックスのデータ入力状態を待って繰返して実行させるには不適な方法です。

>一回登録ボタンを押した後、次のデータを入力するためには、テキストボックス内をマウスでクリックしてからでないとデータを入力できません。

これも実装時の些細な気遣いが必要な部分です。
フォーム上のコントロールは、実行時には自動的に次のコントロールにフォーカスが移動します。
TabIndex プロパティの番号順にフォーカスが移動して行くので、入力順によってはこの値(順番)も変更した方が良いでしょう。

Dim i As Integer

Private Sub CommandButton1_Click()
Dim 登録件数 As Integer
登録件数 = 10

If i >= 登録件数 Then
MsgBox "Count Up"
Exit Sub
Else
i = i + 1
Cells(i, 2).Value = TextBox2.Value
TextBox2.Value = ""
TextBox2.SetFocus
End If
End Sub

>TextBox2.SetFocus

で、コマンドボタンデータ転記後にフォーカスを任意のコントロールに戻せます。

>データはB1のセルにどんどん上書きをしてしまいます。

DIM i as integer
の変数宣言をプロシージャ(sub ~ End Sub)の外に置いていますか?
内部にあると常に初期化されて、カウントアップ(+1)してくれません。

>「何でFor文でなくて、If文なのだろう?

IF文は比較するのに使います。
今回の場合、書き込み前に繰返し回数をiの値をIF文で比較し、iの値をカウントアップ(i=i+1)して、書き込みます。

for文でも同じ事ができますが、テキストボックスのデータ入力状態を待って繰返して...続きを読む

Qエクセル・VBAでテキストボックスに入力された文字を

エクセル・VBAでテキストボックスに入力された文字を
B列から検索し、結果をユーザーフォームのリストbox
に表示したいのですがうまくいきません
検索は部分一致・大文字小文字無視で行いたいです
よろしくお願いします

Aベストアンサー

部分的に一致していても、リストに追加するように出来ますか?
If Range("B" & i).Value = TextBox1.Value Then

If Range("B" & i).Value Like "*" & TextBox1.Value & "*" Then
にするとか

また、表示された1・2列目をクリックすると、そのセル
をアクティブに出来ると良いのですが・・・
No1の方のコードをお借りします。
Private Sub ListBox1_Click()
Range("C:C").Find(what:=ListBox1.Value, LookIn:=xlValues, lookat:=xlPart, MatchCase:=False).Activate
End Sub
とかでは?

QエクセルVBAのIf,Then 構文でOr条件とAnd条件の結合方法?

ワークシート関数で書けば
=IF(OR(F18=0,AND(F15>0,F16>0)),TRUE)です。
これをVBAで書こうとして

If Sheet1.Range("F18") = 0 Or Sheet1.Range("F15") > 0 And Sheet1.Range("F16") > 0 Then
MsgBox True
Else
MsgBox False
End If

とやってみたのですが、正しくないようです。
どのように書けばいいのでしょうか?

Aベストアンサー

>とやってみたのですが、正しくないようです。

式は正しいと思いますよ

ANDとORは、ANDが先に演算されます。/*と+-では、/*が先に演算されるようなものです。

でも、わかり易くするために、#1のかたのように括弧をつけるほうが良いですね。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報