質問がバラバラになってしまってすみません!
エクセル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件中1~10件)

***(3)***


ユーザーフォームを挿入します。プロパティを例えば、オブジェクト名:ufSyoriCyu
ユーザーフォームにラベルを作ります。Caption:"しばらくお待ちください"にします。
フォント等は適当に調整します。このフォームを表示したい時に、ufSyoriCyu.Show。処理が終わったら、ufSyoriCyu.Hideとします。
Private Sub CommandButton1_Click()
ufSyoriCyu.Show

何かの処理・・・・

ufSyoriCyu.Hide
End Sub

ただし、処理の中身が問題で、"しばらくお待ちください"のフォームを表示しているため次の操作ができなくなることも考えられます。飾り的な機能は一番最後に追加すべきですね。
次はステータスバーに表示する方法です。

シートのコードウインドウに貼り付け。
Private Sub CommandButton1_Click()
StatusShow True 'これ

'何かの処理・・・・

StatusShow False 'これ
End Sub

標準モジュールに貼り付け
Public oldStatusMsg As String

Public Sub StatusShow(OnOrOff As Boolean)
With Application
If OnOrOff = True Then
oldStatusMsg = .DisplayStatusBar
.DisplayStatusBar = True
.StatusBar = "しばらくお待ちください..."
Else
.StatusBar = False
.DisplayStatusBar = oldStatusMsg
End If
End With
End Sub

***(4)***
UserForm1.Hide です。

(1)、(2)は考慮中です。

この回答への補足

nishi6さん! 本当にいつもありがとうございます。
OKです。nishi6さんの言うように、装飾的なものは、あんまりつけない方が良さそうです。わずらわしいときがあるようです。

>(1)、(2)は考慮中です。
よろしく、お願いします。

補足日時:2001/06/25 19:54
    • good
    • 0
この回答へのお礼

nishi6さん、長い間有り難うございます。

こちらの(3)の窓は閉じておきます。つづきを(4)へお願いします。

現在、このプログラムの分は、仮完成状態で実用化しながら検証しています。いろいろと問題も出てきていますが・・・どうにか こうにか修正しながらなんとかやっています。おかげさまで、随分勉強になりました。本当に有り難うございます。
で、今は、また別なものにも挑戦しています。少しずつですが、何とか出来てきています。今度は自分でどれだけ出来るか試してみたいです。(またお世話になるかもしれませんが・・・)

それでは、(4)の方につづきをお願いします。

お礼日時:2001/07/05 20:22

挿入する2行を


WakuView Val(sPatt), False
WakuView Val(sPatt), True
としてみてください。

この回答への補足

お返事が遅れてすみません。

OKです。うまくいきました。

今、本データで試してます。それでまたもや質問ですが・・・

おしえていただいた、下記のコードで・・・
***(3)***該当しなかった場合にその行のデータを別のシートに並べること出来ませんか?

***(2)***A列に、データがある場合は、判定せずにデータをフォームのシートに送らないと言うことをさせたいのですが、よろしくお願いします。
Public Function Hantei(rowNo As Long) 'パターンの自動認識
With Workbooks(wbNM).Worksheets(wsNM) 'データシートを見る
Hantei = 0
Select Case True '各パターン認識設定(項目にデータの有無を判定)
Case .Range("E" & rowNo + 1) <> "" 'And .Range("E" & rowNo + 1) <> ""
Hantei = 1
Case .Range("C" & rowNo + 1) <> "" And .Range("F" & rowNo + 1) <> ""
Hantei = 2
Case .Range("F" & rowNo + 1) <> "" And .Range("I" & rowNo + 1) <> ""
Hantei = 3
Case .Range("C" & rowNo + 1) <> "" And .Range("I" & rowNo + 1) <> ""
Hantei = 4
End Select
End With
End Function '判定終了

***(3)***それから、贅沢なんですが・・・
プログラムが動いているときに、しばらくお待ちください。と表示させること出来ますか?

***(4)***
結構、いろいろ付け加えてきました。で・・・ユーザーフォームを表示させて値をセルに入れているんですが、この処理が(OKボタンを押したあと)ユーザーフォームを自動で消すには、どんなコードを書いたらいいのですか?
「表示させるには、UserForm1.show でその反対は?」

またお世話になりますが、よろしくお願いします。

補足日時:2001/06/22 23:57
    • good
    • 0

原因が分かりました。



rurucomさんが試されたのは、「エクセルVBAで、テキストボックスにセルの値を入れる」で回答したANo.#13のようです。私はANo.#14でOKと思い、「エクセルVBAで、テキストボックスにセルの値を入れる(3)」のANo.#7では、ANo.#14の印刷VBAを想定して書いています。
問題無ければ修正版のANo.#14で試して下さい。

少し説明を・・・・
ANo.#14の印刷ルーティンは各シートから呼び出したり、一括指示等をしたいということなので
  Public Sub page_Print(sPatt, iPatt As Integer)
に修正しました。
 sPattは印刷パターン(=シート番号)
 iPattは各シートから印刷する時は印刷パターン、一括指示する時はゼロ(全部の意味)です。
 こうやって、iPattでVBA内部で処理を分岐させています。 

WakuView sPatt, False は
 sPattは印刷パターン(=シート番号)
 Falseは線を消す
WakuView sPatt, True
 True は線を表示する意味です。

印刷時うまくいっていれば、シート番号はsPattで分かっているので、WakuViewを使って印刷前に強制的に線を消して印刷後線を表示できると考えています。多分、ANo.#14に2行追加でうまくいくと思います。

この回答への補足

すみません!私も振り返ってみていたら、14番だったことにきずきました。なんだか違うなぁと思いながらすすめてました。
で、早速やってみましたら、コンパイルエラー「ByRef 引数の型が一致しません」になってしましました。多分また私が簡単なミスをしているのじゃないかなぁ?・・・・・

何度の見直してみたのですが、どうもパニックです。またお世話になりますが、よろしくお願いします。



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

WakuView sPatt, False '******* 追加 *******   →sPattここが反転(範囲指定状態)で印

Range("Print_Area").Select: Selection.Font.ColorIndex = 2
ActiveWindow.SelectedSheets.PrintPreview 'PrintOut
Selection.Font.ColorIndex = xlAutomatic
Range("Print_Area").Cells(1, 1).Select

WakuView sPatt, True '******* 追加 *******

End Sub

補足日時:2001/06/20 00:15
    • good
    • 0

回答した、「job_Print」と「page_Print」が今どのようになっているか補足して下さい。

すぐ答えはでると思います。
なお、job_Printのメッセージボックス部分は不要です。(あってもいいですが)

この回答への補足

この部分は、まだテストデータなので、まだ教えていただいたときのままです。

Public Sub job_Print() '指定して連続印刷
Dim myMsg As String 'メセージ
Dim myNum 'インプット帰り値
Dim prtPattern As Integer '印刷パターン、0は全て
Dim startRow As Long '印刷開始行、0は開始、最終行を自動計算
Dim endRow As Long '印刷最終行、0は最終行を自動計算
Dim rowCot As Long '行カウンタ


myMsg = "印刷開始行を入力" & vbLf & "  <0(ゼロ)は全データ>"
myNum = InputBox(myMsg): If Len(myNum) = 0 Then Exit Sub Else startRow = Val(myNum)
If startRow = 0 Then
startRow = 1
endRow = Workbooks(wbNM).Worksheets(wsNM).UsedRange.Rows.Count - 1
ElseIf startRow >= 1 Then
myMsg = "印刷最終行を入力" & vbLf & "  <0(ゼロ)は最終行>"
myNum = InputBox(myMsg): If Len(myNum) = 0 Then Exit Sub Else endRow = Val(myNum)
If endRow = 0 Then
endRow = Workbooks(wbNM).Worksheets(wsNM).UsedRange.Rows.Count - 1
End If
Else
MsgBox "エラー": Exit Sub
End If

Application.ScreenUpdating = False
For rowCot = startRow To endRow '連続ページ印刷
Range("A2") = rowCot
Tensou rowCot, prtPattern
If prtPattern = 0 Or (prtPattern = shtPatt) Then '印刷パターンを判定
page_Print
End If
Next
Application.ScreenUpdating = True
Worksheets("Sheet7").Activate
End Sub

Public Sub page_Print() '単ページ印刷、変更しています
Range("Print_Area").Select: Selection.Font.ColorIndex = 2


ActiveWindow.SelectedSheets.PrintOut 'PrintOut
Selection.Font.ColorIndex = xlAutomatic
Range("Print_Area").Cells(1, 1).Select
End Sub

宜しくお願いします。

補足日時:2001/06/19 13:35
    • good
    • 0

>印刷時がダメでした! 表示しているときは、印刷されてしまいます。

これはしょうがないですかね!何かよい方法があったらお願いします。

今、モジュールがどう変わっているか分かりませんので想像ですが、 page_Print に2行追加してみて下さい。
印刷時、枠を非表示にして印刷するはずです。

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

WakuView sPatt, False '******* 追加 *******

Range("Print_Area").Select: Selection.Font.ColorIndex = 2
ActiveWindow.SelectedSheets.PrintPreview 'PrintOut
Selection.Font.ColorIndex = xlAutomatic
Range("Print_Area").Cells(1, 1).Select

WakuView sPatt, True '******* 追加 *******

End Sub

この回答への補足

うまくいきません!

>WakuView sPatt, False '******* 追加 *******ここでエラー!変数が定義されていませんになってしまいます。
sPattは何を表しているのかおしえてください。あと、全体的に処理させている内容もいまいちわかりません!すみません勉強不足で・・・多分、私が*****  追加  ******を入れる場所が悪いような気もするのですが・・・・

ただ、プログラムも複雑になってきました。

この処理方法として、枠を表示非表示させるコードの中に印刷ボタンが押されたときに枠が表示状態だったら、エラーメッセージ「非表示にしてください」で印刷キャンセルさせるようにできないか?
 それか、枠表示は、一時的にテキストボックスの位置を動かすための場所が分かるようにするために表示させるだけなので、表示ボタンを押したあと、一度いずれかのテキストボックスがアクティブになり、非アクティブになった時点で非表示になるなどできないかなぁと思っているんですが、どうでしょうか?

よろしくおねがいします。

補足日時:2001/06/18 22:28
    • good
    • 0

各テキストボックスにはmyText・・・と名前が付いていることを前提にしています。



Sheet1にコントロールツールボックスからトグルボタンを1つ配置します。
オブジェクト名=togWakuView、Caption="枠を非表示"、Value=False にします。
これをコピーして、Sheet2~Sheet5に貼り付けます。

次を標準モジュールに貼り付けます。
'*** 枠の表示切替 ***
Public Sub WakuView(vwSht As Integer, OnOrOff As Boolean)
Dim shp As Shape
For Each shp In Worksheets("Sheet" & vwSht).Shapes
If Left(shp.Name, 6) = "myText" Then
shp.Select
Selection.ShapeRange.Line.Visible = OnOrOff
End If
Next
End Sub

Sheet1~Sheet5のシートモジュールに貼り付けます。
Private Sub togWakuView_Click()
If togWakuView = False Then
WakuView Right(Me.Name, 1), True
togWakuView.Caption = "枠を非表示"
Else
WakuView Right(Me.Name, 1), False
togWakuView.Caption = "枠を表示"
End If
Range(togWakuView.TopLeftCell.Address).Select
End Sub

トグルボタンを押す毎にテキストボックスの枠の表示・非表示が切り替わります。
こういう主旨でした?

この回答への補足

ありがとうございました。
枠の表示、非表示はばっちりです。
印刷時がダメでした!
表示しているときは、印刷されてしまいます。これはしょうがないですかね!

何かよい方法があったらお願いします。

補足日時:2001/06/16 11:44
    • good
    • 0

>1)検索ボタン~Sheet7に配置~



標準モジュールの最初(Publicがある場所、Public Sub・・・ の前)に貼り付け
Public strAdr, endAdr As String '検索開始、最終アドレス
Public mySearch As String '検索文字

標準モジュールに貼り付け
'*** 検索 ***
Public Sub Kensaku()
Dim wbAcv As String 'メニューブック名
Dim wsDat As Worksheet 'データシート名
Dim foundCell As Range '検索結果
Const topAdr = "$B$1" '検索開始位置

wbAcv = ActiveWorkbook.Name
Set wsDat = Workbooks(wbNM).Worksheets(wsNM)
If Len(strAdr) = 0 Then strAdr = topAdr
endAdr = Left(topAdr, 2) & "$" & wsDat.UsedRange.Rows.Count
If Len(mySearch) <> 0 Then
If MsgBox("継続しますか?(新規はキャンセル)", vbOKCancel, "継続") = vbCancel Then
mySearch = InputBox("検索文字を入力して下さい。"): If Len(mySearch) = 0 Then Exit Sub
strAdr = topAdr
End If
Else
mySearch = InputBox("検索文字を入力して下さい。"): If Len(mySearch) = 0 Then Exit Sub
strAdr = topAdr
End If
Application.ScreenUpdating = False
wsDat.Activate: wsDat.Range(strAdr & ":" & endAdr).Select '検索範囲
Set foundCell = Selection.Find(mySearch) '検索実行
Workbooks(wbAcv).Worksheets("Sheet7").Activate
If foundCell Is Nothing Then '検索文字無し
strAdr = topAdr: MsgBox "検索文字:" & mySearch & "は見つかりません。"
ElseIf foundCell.Address = strAdr Then '全検索終了
strAdr = topAdr: MsgBox "検索は終了しました。"
Else '検索文字発見
MsgBox "検索文字:" & mySearch & "は " & StrConv((foundCell.Row - 1), vbWide) & "行目 です。"
strAdr = foundCell.Address
Tensou foundCell.Row - 1, 0 '対象シートを表示
End If
Application.ScreenUpdating = True
End Sub

シート7のシートモジュールに貼り付け。検索ボタンのオブジェクト名=cmdKensaku
Private Sub cmdKensaku_Click()
Kensaku
End Sub

連続して検索できるはずです。

この回答への補足

お返事が遅れてすみません!
これも完璧です!検索の処理(連続検索)に感動しました。かなり実用的です。
予想以上のもので、本当にありがとうございます。

それと・・・またもや新たな問題ですが、

テキストボックス(図形)の枠の線の処理で、各シート毎で線を表示するとしないのボタンを作りたいのですが、お願いします。
条件は、線が表示されていても、印刷はしないようにしたいです(テキストボックスの中の文字は印刷する)
印刷ボタンは、各シートに1枚の印刷ボタンとSheet7に一括印刷ボタンが出来ています。

すみません!よろしくお願いします。

補足日時:2001/06/14 20:59
    • good
    • 0

>2)終了ボタン~Sheet7に配置~


ここでは、メニュー(終了できる方)を「OkWeb_Menu.xls」
データシートを「OkWeb_Data.xls」とします。(ご自分のファイル名に変えてください)
  1.タイトルバーの左のアイコンのクリック、
  2.タイトルバーの右クリック
  3.タイトルバーの×ボタン、
  4.メニュー→閉じる、
  5.ブックの× では閉じれなくする

データシートのThisWorkBookのシートモジュールに貼り付けます。
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If Workbooks("OkWeb_Menu.xls").saveOk = False Then
MsgBox "メニューから終了させてください!", vbOKOnly
Cancel = True
Else
ActiveWorkbook.Save
End If
End Sub

メニュー(終了できる方)のThisWorkBookのシートモジュールに貼り付けます。
Public saveOk As Boolean '終了ボタンでTrue

Private Sub Workbook_BeforeClose(Cancel As Boolean)
If saveOk = False Then
MsgBox "終了ボタンをクリックしてから終了させてください!", vbOKOnly
Cancel = True
Else
Cancel = False
End If
End Sub

メニューの終了ボタンがあるシートのシートモジュールに貼り付けます。
Private Sub cmdSyuryo_Click()
Dim myMsg As String
myMsg = "データシートとフォームのシートを保存して終了します。"
If MsgBox(myMsg, vbOKCancel, "確認") = vbCancel Then
Exit Sub
End If
Workbooks("OkWeb_Menu.xls").saveOk = True
Workbooks("OkWeb_Data.xls").Close saveChanges:=True
ActiveWorkbook.Save
Application.Quit
End Sub

仮のファイルかコピーを作って試してください。一旦保存しないと効力を発揮しません。
データシートを単独に保存できなくするのは簡単ですが、メニューから保存指示すると、データシートの保存不可機能が働いて、データシートが保存できなくなるため、メニューからの指示ならOKという条件付にするのにブック間のモジュールレベルの変数の参照が可能か調べていました。結果はいたって単純でした。勉強になりました。

>3)前回の続きから始める~Sheet7に配置~
これは、メニューを保存(上の2)したので(すれば)、ご自分で作られた「1行前を表示」ボタンか次のデータを表示すれば自然に表示されます。

>1)検索ボタン~Sheet7に配置~
これはB列に同じ値があるんですよね。(連続検索)
明日にでも・・・(窓が全部閉じてるかと思いました。ここは明けておいて下さい)
    • good
    • 0
この回答へのお礼

ありがとうございました。ばっちりです!

お礼日時:2001/06/14 20:49

Select Case の使い方の質問のように思えましたが、違ってる?



Select Caseの使い方に関しては(よく本に書いてあるのが)
  Select Case Atai
    Case 1: Kekka = "結果A"
    Case 2: Kekka = "結果B"
     ↓
    Case 9: Kekka = "結果Z"
  End Select
という風に、Ataiという変数が1,2,・・9に従ってKekkaという変数に"結果A"、"結果B"、・・・が入るというように使います。ここで大事なのは、1回の判定ではAtaiは1~9の1つの値しかとらないということです。
Hanteiでの使い方は少し違っていて、
  Select Case True
    Case Atai = 1: Kekka="結果A"
    Case Atai = 2: Kekka="結果B"
     ↓
    Case Atai = 9: Kekka="結果Z"
  End Select
としています。各Caseの次の式がTrue(正しい)だったら対応した値がKekkaに入ります。この使い方でも上記と同様に各Caseの次の式が同時にTrueになったら判定がおかしくなります。<Atai = 1>という式は、If Atai = 1 Then で使うように、論理式です。論理式ですから、X=1 And Y=1 AND Z=1 のような使い方ができます。Ifを使うより分かり易い(かな)と思って使いました。

まずい例を上げると、Atai1、Atai2(両者とも0または1とします)で判定する場合、
  Case Atai1 = 1
  Case Atai1 = 1 And Atai2 = 1
と書くと、最初の判定でAtai2がどうであれ処理されて、2つ目の式の評価がされないことになります。式の順番を逆にすればうまくいきます。VBAは上から下に順に処理していくためです。
従って、判定がどう複雑になっても、Caseの次の式がそれぞれ独立ならば正しく判定されます。

しかし、入力は人間が行ったりするのでミスはつきものです。
 (1)各パターンの判定はそれぞれが独立になるように充分検討して設定する
     まずい例のようになっていないか検証する必要があります。
 (2)入力ミスに備えて、各パターンに該当しなかったデータについても対応する
ことが必要でしょう。(2)については、パターンの判定の最後に、
  Case Else: MsgBox "パターン判定エラー"
というようにエラー対応し処理を中断できるようにするべきでしょう。

質問の1)、2)、3)については、暫くお待ちを。
自分で改良できるのは、分かってきた証拠でしょう。頑張って下さい。

この回答への補足

ありがとうございます。納得しました。多分!?・・・・・
対象の列にデータがあるかないかだけを認識しているわけですね!問題は、順序と言う事ですね!

質問の1)、2)、3)の件は、今日もいろいろ試してみましたが、やはりまだ出来ませんでした。はぁ・・・私は、まだまだですね!

宜しく、お願いします。

補足日時:2001/06/07 18:08
    • good
    • 0

シート7のボタンの機能は、このボタンだけで



 1.パターンの入力
   0ならパターン無視(全パターンが印刷対象)
   1~5ならそのパターンを印刷
 2.開始行の入力
   0なら全行
   1以上ならそれが開始行
 3.開始行が1以上なら最終行の入力
   0なら最終行を自動設定
   1以上ならそれが最終行
の手順とすることで、全パターンまたは指定パターンについて、全頁または指定頁間が印刷可能なように考えました。

したがって、
>パターン毎に印刷する場合
  <<パターンの入力=1、2、3、4または5、開始行の入力=0>>
    指定したパターンの全行が対象です。当然、指定パターンの開始、最終行
    の入力もできます。

>データの行を範囲指定して印刷する場合
  M行目からN行目の場合、
  <<パターンの入力=0、開始行=M、最終行=N>>
    パターンは全パターンになっているので、M行からN行が対象になります。
    蛇足ですが、パターンの入力=0、開始行=0で全データの印刷になります。

説明不足でしたか。

この回答への補足

あいやーすみません!実は、このプログラムを別の似たような処理に使おうと思って質問したので、パターンの選択はいらなっかたのです。すみません!でも、最初のインプットボックスのコードを消してとりあえず解決しました。大丈夫ですよね?ちゃんと動いてますし!

ところで、本体の方の完成度はかなり高くなってきました。感謝感激です!といってもまだ、テストデータのテスト用の本体ですが・・・ほんとにありがとうございます。そこで疑問があるのですが、Hanteiの理屈を教えていただきたいのですが・・・というのが、実際のデータでは、テストデータより列数が多くて、しかもデータのあるセルとないセルがいろいろあるのですが、A列、B列、C列、を判定させただけでうまくいくのかが、心配です。差し支えなければ、理屈を教えてください。現在、実際のデータにあわせて作っている最中ですが、まだまだかかりそうなのでよろしくお願いします。

そろそろ、最後の質問になってくると思いますが・・・あといくつかお願いします。やればやるほど欲が出てきてしまってすみません!
いろいろ付け加えているのですが、下記の内容の処理がわかりません!

1)検索ボタン~Sheet7に配置~
ボタンを押すことで、インプットボックスが開きそこに入力された文字や数字を列Bから検索させて、該当データを印刷フォームを表示する。

2)終了ボタン~Sheet7に配置~
終了ボタンを押すことで、データシートを「上書き保存」してデータシートとフォームのシートを閉じる。
もし、「×」で閉じようとしたら、エラーメッセージ、終了ボタンをクリックしてから終了させてください!と表示させる。

3)前回の続きから始める~Sheet7に配置~
ゲームで言うコンティニューみたいなもので・・・前回最後に印刷させた行を表示させるボタン。
※Sheet7は、メインメニューとして使っています。

その他、こんなものを付け加えました。nishi6先生からおこられるかなぁ?一応動いてくれてます。ご指摘がありましたらよろしくお願いします。
(1)*******
Private Sub CommandButton3_Click() '先頭行の表示ボタン
Range("B5") = 1
Tensou Range("B5") - (Range("B5") = 0), 0
End Sub
(2)*******
Private Sub CommandButton4_Click() '1行前を表示
Range("B5") = Range("B6") 'B6のセルに"=B5-2"を入れました。
Tensou Range("B5") - (Range("B5") = 0), 0
End Sub
(3)*******
Private Sub CommandButton2_Click()’任意で行を指定して表示させました。
Dim tiMsg As String 'メッセージ
Dim tiNum 'インプット帰り値
Dim StRow As Long '表示する行
tiMsg = "最初に表示させたい行を入力" & vbLf
tiNum = InputBox(tiMsg)
Range("B5") = tiNum - 1
Tensou Range("B5") - (Range("B5") = 0), 0
End Sub
(4)******
Private Sub CommandButton4_Click()
 ’データシートを表示させるボタンをSheet7につけました。
Workbooks.Open "データ.xls"
Worksheets("Sheet1").Activate
 ※ここで本当は、データの左上を表示させたかったのですが出来ませんでした。
End Sub
(5)******
Private Sub Workbook_Open()’ThisWorkBookにコーディング 
’本体を開くとデータシートも開くようにしました。
Workbooks.Open ("データ.xls")
Worksheets("Sheet7").Activate
MsgBox ("ようこそ")
End Sub
あとは、ヘルプ機能を付けていきたいと思っています。ヘルプと言ってもワードかメモ帳にでも項目毎にちょこっと書いて、それを見に行くようにするだけですけど・・・この辺は、がんばって出来そうです。
長くなりましたが、よろしくお願いします。

補足日時:2001/06/06 22:57
    • good
    • 0

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

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

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

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

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

QWordのテキストボックスの行間をつめたいのです

Wordのテキストボックスの行間をつめたいのです。

他者からもらった印刷物がありますが、
文字の高さが3.3mmで行間が3.6mm程度です。
Wordでやろうとしていますがなかなかできません。
テキストボックスの中に文字を入れればテキストボックスの上との行間が縮まりますが
テクストボックス内の行間が縮まりません。
どうしたらできますか?

Aベストアンサー

こんばんは!
↓の画像でテキストボックス内の行間を12ptでやってみました。
当方使用のWord2003の場合です。

左側のテキストボックスはデフォルト(ページ設定)の1行の行間そのままです。

(1)テキストボックス内の文字を範囲指定 → メニュー → 書式 → 段落
(2)「インデントと行間隔」タブ → 間隔の「行間」の下向き▼を選択 → 「固定値」を選択(自動で12ptになると思います)
このポイント数で好みの行間に設定できます。

※ 行間とは文字の上端~次の行の文字の上端までですので、行ピッチと言った方が判りやすいかもしれません。

すなわち、フォントサイズよりも小さいpt数を設定してしまうと文字が重なってしまいます。

以上、参考になれば良いのですが
的外れならごめんなさいね。m(_ _)m

Qエクセルで、QNo.6227849(http://oshiete.go

エクセルで、QNo.6227849(http://oshiete.goo.ne.jp/qa/6227849.html)の追加での質問です。

tom04様よりご教授いただきました方法で私の希望はかないましたが・・・

Sheet2にさらに営業の検索条件("全員"にした場合は全て)というように
Sheet2の検索条件を増やした場合どのようになりますか?

ご教授よろしくお願いいたします。

tom04様ご覧になられていましたらm(__)m

Aベストアンサー

こんばんは!
「ハクション大魔王」のようにまたまた参上です!

当方のIDが書かれていたために他の方からの回答はなかったみたいですね!

本当は個人的に呼びかけるのではなく、なるべく多くの方の考え方を参考にされた方が良いと思います。
私が紹介した方法がベストではないと思います。
頭が固い(人間も古い)せいか、どうしても発想の転換ができない場合もあります。

色々な方からの案(方法)を試して、その中から自分に一番適している方法を選択することも必要かと思います。

せっかくご指名をいただいたので、本題の方に入ります。

以前の条件にもう一つ「営業」の表を追加すれば良いわけですかね?
一応そういうことだとして、画像をアップしてみます。
(以前の表をもう一度作成してみましたので、Sheet2の左側が画像から切れていますが以前のままです)
営業の場合は「件数」と「契約料」が必要だと思いますので、勝手に画像のような感じにしてみました。
列方向に項目は変更してもちゃんと表示されるはずです。

↓の画像のようにSheet1にもう1列作業列を設けてみました。
作業列3のK2セルに
=IF(AND(COUNTBLANK(Sheet2!$A$2:$B$2),Sheet2!$N$2=""),"",IF(Sheet2!$N$2="全員",IF(AND(A2>=Sheet2!$A$2,A2<=Sheet2!$B$2),ROW(A1),""),IF(AND(A2>=Sheet2!$A$2,A2<=Sheet2!$B$2,D2=Sheet2!$N$2),ROW(A1),"")))
としてオートフィルで下へずぃ~~~!っとコピー

O2セルは
=COUNT(Sheet1!K:K)

P2セルは
=SUM(Q5:Q1000)

そしてN5セルに
=IF(COUNT(Sheet1!$K$2:$K$1000)<ROW(A1),"",INDEX(Sheet1!$A$2:$H$1000,SMALL(Sheet1!$K$2:$K$1000,ROW(A1)),MATCH(N$4,Sheet1!$A$1:$H$1,0)))

という数式を入れ、列方向と行方向にオートフィルでコピーすると
画像のような感じになります。

尚、以前の回答で5行目の数式も訂正してみてください。

A5セルは
=IF(COUNT(Sheet1!$I$2:$I$1000)<ROW(A1),"",INDEX(Sheet1!$A$2:$H$1000,SMALL(Sheet1!$I$2:$I$1000,ROW(A1)),MATCH(A$4,Sheet1!$A$1:$H$1,0)))

I5セルは
=IF(COUNT(Sheet1!$J$2:$J$1000)<ROW(A1),"",INDEX(Sheet1!$A$2:$H$1000,SMALL(Sheet1!$J$2:$J$1000,ROW(A1)),MATCH(I$4,Sheet1!$A$1:$H$1,0)))

としてこれも列方向と行方向にオートフィルでコピーで大丈夫だと思います。
(日付・ポイント・契約料等の表示形式はそれぞれ修正してください。)

以上、こんなんで良かったのですかね?m(__)m

こんばんは!
「ハクション大魔王」のようにまたまた参上です!

当方のIDが書かれていたために他の方からの回答はなかったみたいですね!

本当は個人的に呼びかけるのではなく、なるべく多くの方の考え方を参考にされた方が良いと思います。
私が紹介した方法がベストではないと思います。
頭が固い(人間も古い)せいか、どうしても発想の転換ができない場合もあります。

色々な方からの案(方法)を試して、その中から自分に一番適している方法を選択することも必要かと思います。

せっかくご指名をいただい...続きを読む

Qエクセル2002/テキストボックス内の文章の行間?

エクセル2002です。
テキストボックス内に書いた文章の行間を任意に変えることが可能ですか?

普通に書くとくっつきつぎで、一行あけると開きすぎなので、一行の半分くらいの行間にしたいのです。
テキストボックスの書式設定は見てみましたが、方法を見つけられませんでした。

Aベストアンサー

あまり良い方法と言えないかもしれませんが。

テキストボックス内に文字を入力します。
そしてテキストボックスの書式設定を出して、配置のタブを開きます。
文字の配置の縦位置を「均等割付」に設定します。
これでテキストボックスの縦の高さに合わせて、行間が広がります。
ちょうど良い行間にテキストボックスの高さを調節します。

Qhttp://okwave.jp/qa/q5776430.html

http://okwave.jp/qa/q5776430.html
の質問に関連したものです。

添付画像のB列をなくした場合
はどこをいじればよいのでしょうか?

入れ子になりすぎてわけがわからなくなってしまいました。
アドバイス頂けると助かります。
よろしくお願いします。




=IF(COUNT($A$2:$A$1000)<ROW(A1),"",INDEX($A$2:$A$1000,SMALL(IF($A$2:$A$1000<>"",ROW($A$1:$A$999)),ROW(A1))))

F2セルには次の式を入力します。

=IF(E2="","",OFFSET(INDEX(A:A,MATCH(E2,A:A,0)),0,2)&IF(OFFSET(INDEX(A:A,MATCH(E2,A:A,0)),1,1)=2,CHAR(10)&OFFSET(INDEX(A:A,MATCH(E2,A:A,0)),1,2),"")&IF(OFFSET(INDEX(A:A,MATCH(E2,A:A,0)),2,1)=3,CHAR(10)&OFFSET(INDEX(A:A,MATCH(E2,A:A,0)),2,2),"")&IF(OFFSET(INDEX(A:A,MATCH(E2,A:A,0)),3,1)=4,CHAR(10)&OFFSET(INDEX(A:A,MATCH(E2,A:A,0)),3,2),"")&IF(OFFSET(INDEX(A:A,MATCH(E2,A:A,0)),4,1)=5,CHAR(10)&OFFSET(INDEX(A:A,MATCH(E2,A:A,0)),4,2),""))

http://okwave.jp/qa/q5776430.html
の質問に関連したものです。

添付画像のB列をなくした場合
はどこをいじればよいのでしょうか?

入れ子になりすぎてわけがわからなくなってしまいました。
アドバイス頂けると助かります。
よろしくお願いします。




=IF(COUNT($A$2:$A$1000)<ROW(A1),"",INDEX($A$2:$A$1000,SMALL(IF($A$2:$A$1000<>"",ROW($A$1:$A$999)),ROW(A1))))

F2セルには次の式を入力します。

=IF(E2="","",OFFSET(INDEX(A:A,MATCH(E2,A:A,0)),0,2)&IF(OFFSET(INDEX(A:A,MATCH(E2,A:A,0)),1,1)=2...続きを読む

Aベストアンサー

なんだかなあ、作業列を使わないと無駄な計算が多い。
A列昇順に並んでいる
5人まで
D2セル
=IF(COUNT(A:A)<ROW(A1),"",SMALL(A:A,ROW(A1)))
E2セル
=IF(D2="","",CHOOSE(MIN(5,IF(D3="",COUNTA(B:B)+1,MATCH(D3,A:A))-MATCH(D2,A:A)),
LOOKUP(D2,A:B),
LOOKUP(D2,A:B)&CHAR(10)&INDEX(B:B,MATCH(D2,A:A)+1),
LOOKUP(D2,A:B)&CHAR(10)&INDEX(B:B,MATCH(D2,A:A)+1)
 &CHAR(10)&INDEX(B:B,MATCH(D2,A:A)+2),
LOOKUP(D2,A:B)&CHAR(10)&INDEX(B:B,MATCH(D2,A:A)+1)
 &CHAR(10)&INDEX(B:B,MATCH(D2,A:A)+2)
 &CHAR(10)&INDEX(B:B,MATCH(D2,A:A)+3),
LOOKUP(D2,A:B)&CHAR(10)&INDEX(B:B,MATCH(D2,A:A)+1)
 &CHAR(10)&INDEX(B:B,MATCH(D2,A:A)+2)
 &CHAR(10)&INDEX(B:B,MATCH(D2,A:A)+3)
 &CHAR(10)&INDEX(B:B,MATCH(D2,A:A)+4)))
D2:E2セル 下へオートフィル

なんだかなあ、作業列を使わないと無駄な計算が多い。
A列昇順に並んでいる
5人まで
D2セル
=IF(COUNT(A:A)<ROW(A1),"",SMALL(A:A,ROW(A1)))
E2セル
=IF(D2="","",CHOOSE(MIN(5,IF(D3="",COUNTA(B:B)+1,MATCH(D3,A:A))-MATCH(D2,A:A)),
LOOKUP(D2,A:B),
LOOKUP(D2,A:B)&CHAR(10)&INDEX(B:B,MATCH(D2,A:A)+1),
LOOKUP(D2,A:B)&CHAR(10)&INDEX(B:B,MATCH(D2,A:A)+1)
 &CHAR(10)&INDEX(B:B,MATCH(D2,A:A)+2),
LOOKUP(D2,A:B)&CHAR(10)&INDEX(B:B,MATCH(D2,A:A)+1)
 &CHAR(10)&INDEX(B:B,MATCH(D2,A:A)+2)
 &CHAR(1...続きを読む

Qパワポのテキストボックスの行間のデフォルト値の設定

パワポ2000を使っています。
テキストボックスを作ると必ず行間が9.99行となっているので、毎回1行に変更しています。作った時点に1行になるように、変更する方法がわかりません。
つまり、パワポのテキストボックスの行間のデフォルトを、現在の9.99行から1行に変更したらよいのですが、変更する方法がわかりません。

Aベストアンサー

行間を1行にしたテキストボックスを選択し、右クリックで「オートシェープの規定値」選択すると次からのテキストボックスは開業行になりませんか?

Qエクセル マクロ webクエリ URL;http://…/2009/03/03/….html って形にするには?

エクセルのマクロでwebのデータを取り込みたいのですが

2009年3月3日のデータを取る時のアドレスがhttp://…/2009/03/03/….htmlの場合
With ActiveSheet.QueryTables.Add(Connection:= _
"URL;http://…/2009/03/03/….html"
となりますが、これをLoopさせて3/2、3/1、2/28、2/27…のデータを取りたいのですが
どういう形でLoopさせればよいのでしょう?
単純にMonthやDayを使うと1~9月や日は一桁になってしまうと思いますけど

Aベストアンサー

Date型の変数を定義して2009/03/03で初期化後-1しながらLoopでは?

Dim dt As Date
Dim url As String
  dt = DateValue("2009/03/03")
    url = "URL;http://…/" & dt & "/….html"
    dt = dt - 1

Qテキストボックス内の行間の変え方

Microsoft Wordでテキストボックス内の行間を変えるにはどうしたらよいですか。
文字サイズを大きくすると、伴って行間も広くなってしまうのですが、行間だけを指定することができるでしょうか。教えて下さい。

Aベストアンサー

テキストボックス内のテキストを選択して右クリック
「段落」を選択してください。
行間の変更ができます。

Qエクセルで当番表を作ろうと、探していると、http://www.mat

エクセルで当番表を作ろうと、探していると、http://www.matsubarase.com/misc_program/Pipet-HTU.phpと言うサイトを見つけました。自動作成マクロですごく便利なのですが、マクロのpassがある為に、アレンジできません。又、勉強にもなりません。こんなの簡単だと思われる方はたくさんおられると思いますが、どなたか教えて頂けませんか?宜しくお願いします。

Aベストアンサー

そのマクロは、マクロ学校1年生卒業で、難しいことは何もしていません。

ただ、リンク先のツールは、kt関数がないので私の環境では動きません。祝日自体は、政府の来年の発表があるまでは、祝日さえ決まらないのですから、年間のリストを作っておけば良いのです。だから、kt 関数は必要ありません。

>マクロのpassがある為に、アレンジできません。

そういう考え方は改めたほうがよいです。他人のものでも、自分のマクロでも半年経てば別人のマクロで、分かりません。ご自身で作ることをお薦めします。

表だけみてマクロも作ってみたのですが、今回のサイトの改編で私の作ったプロシージャ全部は入らないです。もう、ここのサイトで完全にはマクロの質問はダメかもしれません。

マクロは三つに分かれています。[カレンダーの枠組みのフォームを作る][日付を入れる][人名を入れる]その内の人名を入れるマクロだけ入れておきます。
'-------------------------------------------
Sub PutInNames()
  Dim arNames As Variant
  Dim rng As Range
  Dim StartRng As Range
  Dim i As Long
  Dim j As Long
  Dim SetteiSh As Worksheet
  Dim n As Long, m As Long
  Dim Doyobiflg As Boolean  
  '=========================================
  Set SetteiSh = Worksheets("設定")
  Set rng = SetteiSh.Range("D5:D12") '名前リスト
  Doyobiflg = False '日曜/祭日のみ True
  '=========================================
  With SetteiSh
    If Application.CountA(rng) < 2 Then
      MsgBox "名前リストがないかもしれません。", vbExclamation
      Exit Sub
    End If
    
    arNames = rng.Value '名前リスト
    arNames = Application.Transpose(arNames)
    m = UBound(arNames)
    For i = 1 To rng.Rows.Count
      If rng.Cells(i, 2).Value <> "" Then
        j = i '最初の人の順番
        Exit For
      End If
    Next i
    If i > rng.Rows.Count Then
      MsgBox "最初の印がありません。", vbCritical
      Exit Sub
    End If
   End With
    '-------------------------------------------
    With ActiveSheet 'アクティブシート
      '書き込み
      Set StartRng = .Range("A6")
      n = j '最初の人の順番の移し替え
      With StartRng
        For i = 1 To 50
          With .Cells(1 + Int((i - 1) / 7) * 3, ((i - 1) Mod 7) + 1)
            If Val(.Offset(-1).Value) > 0 Then
              '日曜日か土曜日含むかの判定
              If .Offset(-1).Font.ColorIndex <= IIf(Doyobiflg, 3, 1) Then
                .Cells(1).Value = arNames(n)
                n = n Mod m + 1
              Else
                .Cells(1).ClearContents
              End If
            End If
          End With
        Next
      End With
    End With
End Sub

そのマクロは、マクロ学校1年生卒業で、難しいことは何もしていません。

ただ、リンク先のツールは、kt関数がないので私の環境では動きません。祝日自体は、政府の来年の発表があるまでは、祝日さえ決まらないのですから、年間のリストを作っておけば良いのです。だから、kt 関数は必要ありません。

>マクロのpassがある為に、アレンジできません。

そういう考え方は改めたほうがよいです。他人のものでも、自分のマクロでも半年経てば別人のマクロで、分かりません。ご自身で作ることをお薦めします。

表だけ...続きを読む

QPPTのVBA 全てのテキストボックスの行間を最小

【PPTのVBA 全てのテキストボックスの行間を最小に】

 今晩は、質問させていただきます。どうぞよろしくお願いいたします。
PPT2007でございます。

 手元に大量にあるPPTファイル群のテキストボックスの行間が全て広いため、
全て一括で小さくしてしまいたい次第でございます。
もしこれを手作業でやりますと、テキストボックスをアクティブにする→右クリック
→「段落」→「段落前」を0に。
となり時間がかかりますため、VBAでどうにかしたい次第でございます。

 しかしネットで検索しても出てこず、
また上記操作を自動記録しようといたしましても記入されません。
(PPT2007には自動記録が無いため、excel、wordでトライいたしましたが、無理でございました。。。)

一個のテキストボックスの操作方法さえ分かれば後は、
For each スライド
  For each テキストボックス
  :
  :
  Next
Next
みたいな感じで出来ると思うのでございますが。。

 もしお詳しい方がいらっしゃいましたら,お教えいただけないでしょうか。
どうぞよろしくお願いいたします。

【PPTのVBA 全てのテキストボックスの行間を最小に】

 今晩は、質問させていただきます。どうぞよろしくお願いいたします。
PPT2007でございます。

 手元に大量にあるPPTファイル群のテキストボックスの行間が全て広いため、
全て一括で小さくしてしまいたい次第でございます。
もしこれを手作業でやりますと、テキストボックスをアクティブにする→右クリック
→「段落」→「段落前」を0に。
となり時間がかかりますため、VBAでどうにかしたい次第でございます。

 しかしネットで検索しても出てこず、
また...続きを読む

Aベストアンサー

MKT_さん
こんにちは。

下記のコードでできると思います。
※PPT2003での対応ですが…

Sub 行間変更()
 Dim I  As Long
 Dim J  As Long
 For I = 1 To ActivePresentation.Slides.Count
  With ActivePresentation.Slides(I)
   For J = 1 To .Shapes.Count
    If .Shapes(J).HasTextFrame = msoTrue Then
     .Shapes(J).TextFrame.TextRange.ParagraphFormat.SpaceBefore = 0
    End If
   Next J
  End With
 Next I
End Sub

QEXCELで、1+1=2, 2+2=4...を100回正確に行う方法

1+1=2, 2+2=4 を100回した場合の、個々の結果を表示させたいと考えています。
Excelでやろうとしたのですが、15桁以上は丸めが入ってしまいます。
この丸めを回避するために、15桁までと、15桁以上を別々に計算すれば良いという
事はわかっているのですが、具体的に、どのような関数を使い、セルを埋めて行けば
よいかが判りません。

操作方法、あるいは参考になるURLを示してもらえませんか。

Aベストアンサー

10桁ごとに表示する関数を作りました。
2^100は31桁になるので4列使用します

D列に下10桁を表示
C列に下11から20桁を表示
B列に下21から30桁を表示
A列に下31から40桁を表示

D1セルに1
D2セルに =MOD(D1*2,10^10)
D3以降はこの式をコピーし貼り付けてください。

C2セルに =MOD(INT(D1*2/10^10)+C1*2,10^10)
C3以降はこの式をコピーし貼り付けてください。

A,B列はC列の式をコピーし貼り付けてください。

10桁ごとに表示されます。

ただし表示形式が標準を0000000000(0が10個)としてください。


人気Q&Aランキング

おすすめ情報