フォームを作り、その上に2列×15個のテキストボックスを配置しました。(2列15行の「表」(ひょう)のような状態です。)
左列は入金関係、右列は出金関係金額を入力します。
一番下行のテキストボックス2つは各列の合計(入金合計・出金合計)を入れたいのです。
各列の、どれかのテキストボックスに値が入力されたら、即時にその列の合計を変えたいのです。
複数の(同種と仮定して)コントロールをグループ的にまとめて考えて、そのどれかにイベントが起こったことを捉える方法はあるのでしょうか。14×2個のテキストボックスのChangeイベントを書けば良いとかを思い付くのですが鬱陶しいのと、VBAプログラムのレパートリーを広げたくて、どなたか(不可能という結論も含めて)、ご存知の方は教えてください。
98・Access97・Access2000です。

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

A 回答 (1件)

こんにちは。

maruru01です。

おそらくかなり面倒だと思いますが、レパートリーを広げたいということなので、紹介します。
ただし、本に載っていた(しかもVB)だけで、実際に私は試してないので本当に出来るかどうかわからないですが。

やり方ですが、フレキシブルグリッドを使用する方法です。
フレキシブルグリッドは、ツールボックスのその他のコントロールの中の
「Microsoft FlexGrid Control, version 6.0」
を選択して配置します。
このフレキシブルグリッドは、エクセルの表のようなデザインをしています。ただし、ユーザーが直接入力出来ません。
そこで、テキストボックスをグリッドのセルと同じ大きさで用意します。
そして、グリッドのEnterかGotFocusイベントで、
1.どのセルが選択されたかを取得
2.そのセルの上にかぶせるようにテキストボックスを移動
3.テキストボックスにフォーカスを移動
4.テキストボックスにセルの内容を代入
ここでユーザーがテキストボックスに入力し、テキストボックスからフォーカスが移動したらそのExitかLostFocusイベントに
5.テキストボックスの真下のセルにテキストボックスの値を入力
6.グリッドのセルの値(変更後)を元に再計算
仮にテキストボックスからEnterや矢印キーで移動したら、別のセルへ移動して、また1.から繰り返す。
こんな感じです。
要は、いくつ入力欄があっても、実際に入力するのは1箇所だけなので、そこにテキストボックスを持ってきて入力するということです。
細かいところはいろいろ調整しないといけないと思います。

おそらく、全部のテキストボックスのイベントを書く方が、簡単で早く出来ると思いますが、まあ、時間に余裕があったら試してみて下さい。
では。
    • good
    • 0

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

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

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

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

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

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

Aベストアンサー

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

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

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

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

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

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

Qテキストボックスの数値をFor~Nextで1個飛びに計算して合計を出したい

VS.NET2003使用者です。
ExcelのVBAより最近転向しました。

タイトルの通り、テキストボックスに入力されている数値を1
個飛びに計算したいのですが、うまく行きません。
テキストボックスはTextBox1~Textbox80まであります。
1個ずつ数値に変換して足して行けば、問題なく計算は出来ます。

出来ればシンプルに行きたいので、For~Nextで出来ないか試しました。
Dim N, STL, TTL As Integer
 For N = 1 To 79 Step 2
  STL = CInt(Me.Controls("textbox" & N).Text())
 TTL = TTL + STL
Next

結果が以下の通りです。
'System.InvalidCastException' のハンドルされていない例外が microsoft.visualbasic.dll で発生しました。
追加情報 : 文字列 "textbox1" から型 'Integer' へのキャストが有効ではありません。

色々検索してみましたが、これといった回答がヒットしません。
この方法は不可能なのでしょうか。

VS.NET2003使用者です。
ExcelのVBAより最近転向しました。

タイトルの通り、テキストボックスに入力されている数値を1
個飛びに計算したいのですが、うまく行きません。
テキストボックスはTextBox1~Textbox80まであります。
1個ずつ数値に変換して足して行けば、問題なく計算は出来ます。

出来ればシンプルに行きたいので、For~Nextで出来ないか試しました。
Dim N, STL, TTL As Integer
 For N = 1 To 79 Step 2
  STL = CInt(Me.Controls("textbox" & N).Text())
 TTL = TTL + STL...続きを読む

Aベストアンサー

> VS.NET2003使用者です。
ですか・・・

VB.NET2003の場合、「Controlsコレクション」で、「コントロール名」は使えないはずです。
#「Integer型のIndex指定のみ」

「Control.ControlCollection.Item プロパティ」
(http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/cpref/html/frlrfsystemwindowsformscontrolcontrolcollectionclassitemtopic.asp)

VB2005なら、コントロール名が使用可能なんですが・・・
「Control.ControlCollection.Item プロパティ」(.NET Framework 2.0)
(http://msdn2.microsoft.com/ja-jp/library/system.windows.forms.control.controlcollection.item(VS.80).aspx)

と言うことで、別の方法を使ってください。
#例えば、自分でCollectionや配列を準備して設定するとか・・・

> VS.NET2003使用者です。
ですか・・・

VB.NET2003の場合、「Controlsコレクション」で、「コントロール名」は使えないはずです。
#「Integer型のIndex指定のみ」

「Control.ControlCollection.Item プロパティ」
(http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/cpref/html/frlrfsystemwindowsformscontrolcontrolcollectionclassitemtopic.asp)

VB2005なら、コントロール名が使用可能なんですが・・・
「Control.ControlCollection.Item プロパティ」(.NET Framework 2.0...続きを読む

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

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

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

Aベストアンサー

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

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

Qリッチテキストボックスとテキストボックスの違い

VB6のリッチテキストボックスとテキストボックス
の違いは何なんでしょうか?

Aベストアンサー

RichTextだと扱えるファイルサイズが大きくなり
プロパティの指定が可能になります。

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemwindowsformsrichtextboxclasstopic.asp

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

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

Aベストアンサー

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

Qテキストボックスのキーイベントについて

VS2005を使用して勉強中の初心者です。
今、勉強を兼ねて実験的に作成しているアプリにおいて
「TextBox1にフォーカスがある時
エンターキーを押すことでメッセージボックス"TEST"を表示させる」
ということをさせようと考えています。
以下のようなイベントプロシージャによって、
一応目的の動きをさせることはできましたが
この時、エンターキー押下による改行を入力させずに
メッセージボックス表示のみを実行させるには
どのように書き直すべきなのでしょうか。
よろしくお願い致します。

Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs)
If e.KeyCode = Keys.Enter Then
MsgBox("TEST")
End If
End Sub

Aベストアンサー

KeyPressイベントも処理しないといけないようですよ

Private Sub TextBox1_KeyPress(引数省略)
  if e.KeyChar = Chr(13) then
    e.Handler = True
  end if
End Sub

KeyDownイベントの中で条件が成立した場合に e.Handled を Trueにしましょう

if e.KeyCode = Keys.Enter then
  e.Handled = True
  MsgBox( "TEST" )
end if
といった具合です

KeyDownイベントでキーの判断をする場合
単にEnterだけが押された場合とShiftやCtrlなどと一緒に押された場合を考慮したほうがいいでしょう
現在の状態ですと CtrlやShiftを併用してもこの処理ルーチンを通ってしまいます

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

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

Aベストアンサー

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

Qvb2005 で複数のテキストボックスのイベントについて

vb2005で
タブの中に、複数のテキストボックスが存在しています。(15個程)
その中の指定した10個のみ、フォーカスを外したときにイベントを
発生させるよい方法はありますでしょうか。
一つのテキストボックスは下記で行えるのですが、複数の場合よい方法はありますでしょうか。

Private Sub Textabc_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles Textabc.Validating

~~処理~~

End Sub

Aベストアンサー

指定した10個のうち、何個フォーカスが外れているかを(フォーカスイベントで)カウントしておいて、別個の関数でカウントが10の時、行いたい処理を実行するようにしておいて、各テキストボックスのフォーカスイベントでその関数を呼び出すようにすれば良いのでは?

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

QA列をテキストファイル名に、B列のみをファイル文書に書き出すマクロ

テストデータとして下記を作りました。
ファイル名をaa1.csvで保存しました。

大島,大阪
古河,豊橋
恩田,岐阜
寒川,福島
桐井,新潟
青井,久留米

上記のCSVファイルをマクロを利用して
1行1ファイルのテキストファイルに出力したいです。

また、出力する形式として、
A列をテキストファイル名に
B列のみをファイル文書に書き出したいです。

1行1ファイルのテキストファイルに出力はできたのですが、
A列とB列がテキストファイルの文章として出力されてしまいます。

A列をテキストファイル名に
B列のみをファイル文書に書き出す
マクロを作成することはできるでしょうか。

Aベストアンサー

以下のようにしてください。
---------------------------------------
'目的のブックのシートを開いたままお使いください。
Sub ColumnOut2Text()
Dim i As Long
Dim j As Long
Dim Fno As Integer
Dim OutColumn As String
'ユーザー設定
Const myPath As String = "C:\ZZZ\"
'かならず、最後に\ を入れてください。
'
With Worksheets("Sheet1")
For i = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
Fno = FreeFile()
Open myPath & .Cells(i, 1).Value & ".txt" For Output As #Fno
'For j = 1 To .Cells(1, Columns.Count).End(xlToLeft).Column
' OutColumn = .Cells(1, j).Value & Chr(13) & .Cells(i, j).Value & Chr(13)
'Print #Fno, OutColumn
'Next j
'OutColumn = Empty
Print #Fno, .Cells(i, 2).Value 'この行を追加
Close #Fno
Next i
End With
Beep
End Sub
------------------------------------------------
不要な行はコメントアウトしています。
追加した行は、以下の1行です。
Print #Fno, .Cells(i, 2).Value 'この行を追加

尚、sheet1のB列にCSVファイルの2列目のデータ(大阪、豊橋、岐阜等)が格納されていると理解しています。
もし、違っていたら、その旨補足してください。

以下のようにしてください。
---------------------------------------
'目的のブックのシートを開いたままお使いください。
Sub ColumnOut2Text()
Dim i As Long
Dim j As Long
Dim Fno As Integer
Dim OutColumn As String
'ユーザー設定
Const myPath As String = "C:\ZZZ\"
'かならず、最後に\ を入れてください。
'
With Worksheets("Sheet1")
For i = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
Fno = FreeFile()
Open myPath & .Cells(i, 1).Value & ".txt" For Output As #Fno
'For j = 1 To ....続きを読む


人気Q&Aランキング

おすすめ情報