• 締切済み

VBAで

会社で毎日現品札というものを発行するのですが、電卓で計算しながら発行しており非常に時間がかかるので1回或いは2回の印刷でできないかとおもい質問させていただきました。 やりたい内容は下記のイメージです。 シートに18梱包分を入力できるようにしてあり、ユーザーフォームにテキストボックスが11から28まで(18梱包分)配置されていて、ここに一括で1梱包数(450や192など)を入力する。※これはできています。 'コマンドボタン2を押すと1梱包数を一括で入力する Private Sub CommandButton2_Click() Dim item As String, i As Long item = TextBox29.Text For i = 11 To 28 Me.Controls("TextBox" & i).Text = item Next i End Sub 次にラベル14に総数(例えば28000)が表示されており、ラベル11には18梱包分の合計(450*18=8100)が表示されています。※450や192はテキストボックス29にシートのAG2から設定してあります。 で、ラベル18に何を何部印刷すればいいか表示したいです。 例えば、「8100を3部と3700を1部印刷してください」となってほしいです。 1梱包数450や192などを下回る総数の場合もあります。 ユーザーフォームに他にもテキストボックスやラベルが配置されています。 よろしくお願いいたします。

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

あえて言う。質問の説明が悪くて、何をどうしたいかわからない。 もし小生がピントはずれなら、そう言ってください。 他の後続回答者のために。 なぜテキストボックスを使うのかよくわからない。 エクセルシートだけを使ってもできそうだのに。 関係ブックは1つ?シート数も1つ? それに質問で、VBAコードなど一部を挙げても、読む方には役に立たない。読者に全貌を理解してもらうようにしないと。 文章だけで説明する訓練をしたらどうです。それに会社特有の帳票名などはなるべく出さないことが望ましい。 ーー 1シートに入力・計算・表示するとすればどうなる?  あとからユーザーフォームやテキストボックスを利用するように、変えるのはやさしいと思う。 入力データシートは A列A1:A18 18梱包分?? B列B1:B18 1梱包数 例 450や192  <--AG2から C1 総個数  例28000 D1 何部印刷指定 ーー 計算はどうするの。総個数÷1梱包数と、割り算して商と余りを出せばよいのか? 1梱包内には1商品や製品だけではないの?こういう会社の状況がわからないので、全体がわかりにくい。

totozaemon
質問者

お礼

imogasiさん ありがとうございます。

関連するQ&A

  • VBA 整数加算の方法

    初歩的なことだとは思いますがエクセルVBAで ラベル1にテキストボックス1~40までの 総数(整数)を加算する時はLabel1=Val(Textbox1)+val(Textbox2)+・・・ +Val(Textbox40)とゆうふうに並べるのではなく簡単に する方法を教えていただきたいのですが?

  • エクセルVBA フレーム内のイベント

    フレーム内に、テキストボックスを配置し、 そのテキストボックスをExitした場合にFormatを変更したいのですが、 フレーム内にテキストボックスがあるためかイベントが発生しません。   1) Frame1 の中に Textbox1 を配置   2) Textbox1には数値を入力   3) 入力後、次のコントロールに移動した場合、    Textbox1.textをformat(Textbox1.text,"#,##0")にする   Private Sub Textbox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)     msgbox "Exit"   End Sub   としましたが、ユーザフォームを終了した時に、msgが出力されます。 フレーム内のイベントはどのようにすればよいか、教えていただきたいです。 よろしくお願いいたします。

  • Excel VBA 別ブックを開かずに転記

    Excel2007のユーザーフォームについて教えてください。 ユーザーフォームを以下のように作成しました。 ■テキストボックス6つ テキストボックス2→件名 テキストボックス3→数 テキストボックス4→名前 テキストボックス5→備考1 テキストボックス6→備考2 ■コマンドボタンが1と3の2つです。 コマンドボタン1→転記と印刷 コマンドボタン3→終了 ■シートの構成  sheet"作成と一覧"   1行目を以下の項目で使用しています。  A1→番号(テキストボックス1を表示)  B1→件名(テキストボックス2を表示)  C1→数(テキストボックス3を表示)  sheet"印刷"  A1→番号(テキストボックス1を表示)  A2→件名(テキストボックス2を表示)  B2→数(テキストボックス3を表示)  A3→名前(テキストボックス4を表示)  A4→備考1(テキストボックス5を表示)  A5→備考2(テキストボックス6を表示) テキストボックスに入力した値を2つのシートにそれぞれ転記して、 シート"印刷"を2部印刷しています。 ここまで以下のコードで行いました。 Private Sub CommandButton1_Click() '入力値を作成と一覧シートに転記 行 = ActiveCell.Row 列 = ActiveCell.Column Cells(行, 列) = UserForm1.TextBox1.Value Cells(行, 列 + 1) = UserForm1.TextBox2.Value Cells(行, 列 + 2) = UserForm1.TextBox3.Value '入力値を印刷シートにに転記 Worksheets("印刷").Range("A1") = UserForm1.TextBox1.Value Worksheets("印刷").Range("A2") = UserForm1.TextBox2.Value Worksheets("印刷").Range("B2") = UserForm1.TextBox3.Value Worksheets("印刷").Range("A3") = UserForm1.TextBox4.Value Worksheets("印刷").Range("A4") = UserForm1.TextBox5.Value Worksheets("印刷").Range("A5") = UserForm1.TextBox6.Value 部数 = 2 Worksheets("印刷").PrintOut Copies:=部数, Collate:=True UserForm1.TextBox1.SetFocus Cells(行 + 1, 列).Select End Sub Private Sub CommandButton3_Click() '終了ボタンで値をクリアしてウィンドウを閉じる Dim Ctrl As Control For Each Ctrl In Controls If TypeName(Ctrl) = "TextBox" Then _ Ctrl.Value = "" Next Ctrl Unload Me End Sub 教えて頂きたい事なのですが・・・ コマンドボタン1の入力値を作成と一覧シートに転記の所なのですが、 アクティブセルではなく、常にA列の最後の値の次の空白行に転記するようにしたい場合、 どのように書き換えればいいのでしょうか? もう一点ですが、 別ブックにテキストボックス1から6が入力された一覧があります。 この別ブックを開かずに、 テキストボックス1に入力された番号を探して、 テキストボックス2から6に表示されるようにしたいのです。 うまく説明できないのですが・・・ 別ブックの名前は"たちつ" 別ブックは、あいうサーバーの かきくフォルダの中のさしすフォルダです。 ブック"たちつ"に"一覧"というシートがあります。 一覧のシートのD列の3行目以降には番号が入力されており、日々増えています。 テキストボックス1に入力された番号を、 一覧のD列から探し、 I列の値をテキストボックス2へ K列の値をテキストボックス3へ L列の値をテキストボックス4へ M列の値をテキストボックス5へ J列の値をテキストボックス6へ転記させたいのです。 同じブックの別シートを参照するときには Application.VLookupで出来たのですが、 マクロの記録でやってみても、解決できませんでした。 コードをご覧いただいてお分かりの通り、 VBA超初心者です。 ネットを見ながら試行錯誤している状況です。 コードの間違い等あるかもしれませんが、 ご教示よろしくお願いいたします。

  • VBA初心者です。教えて下さい。

    VBA初心者です。 すいません教えて下さい。 たくさんのテキストボックスに決められた値を入れたいです。 今は1つ1つのテキストボックスに静的に直書きしています。 (理由は聞かないで下さい、、、^^;) 【今】 ---------------------------------------- TextBox0.Text = "0です" TextBox1.Text = "1です" …(省略) TextBox100.Text = "100です" ---------------------------------------- これをもっとスマートに出来ればと思い"For"を使いました。 【やりたいやり方】 ---------------------------------------- For i = 0 To 100 TextBox & i .Text = i &"です。" Next ---------------------------------------- 、、、が当然の結果、i変数を扱うことが出来ずにエラーになります。 どうにかスマートに実現する方法はありませんでしょうか? 申し訳ありませんがご教示頂ければと思います。

  • VBAのFor構文で

    質問させていただきます。 IF textBox1.value = "" then End If のように、VBAのテキストボックスが空白の場合に起動する構文を作ろうと考えているのですが、 このテキストボックスの数が多いので、どうにかして短く出来ないかと考えています。 VBAのテキストボックスを直接For構文で変更する事は可能なのでしょうか? 例えば For i = 1 to 20 IF textBox(i).value = "" then End If Next i 上記のような構文では実際に動かしたときにtextBoxの指定がされていないのでエラーが出てしまいます。 やはり、各テキストボックスごとに構文を作らなければならないのでしょうか? もし可能なら、その方法を教えていただきたいです。

  • VBAについての質問です

    ユーザーフォーム内に2つのテキストボックスがあります。 TextBox1に『10:00』と入力すると、 TextBox2には、10分後の『10:10』と自動表示させるためには、 どうしたら良いのでしょうか? また、TextBox1が空白にした時は、自動的にTextBox2も空白にする 機能も付加したいです。 よろしくお願いします。

  • VBAで数値入力について

    Excel VBAで、UserFormにTextBoxを配置しています。 TextBoxに入力された数値は、半角数値で正数で小数点以下の桁数は1までと制限したいです。 現在は下記のプログラムにしているのですが、「1.2.3」と入力されるとエラーが表示されずに通ってしまいます。。。 どのようにしたらよいのでしょうか。 For i = To Len(TextBox1.Text) If Not Mid(TextBox1.Text, i, 1) Like "[0-9 And .]" Then Message"半角数値ではありません" Exit Sub End If Next i If Val(Text1.Text) = 0 Or TextBox1.Text = "" Then Message"数値を入力してください" Exit Sub End If

  • VBAの計算について教えてください。

    お世話になります。 VBA超初心者です。 教えて頂けると助かります。 ユーザーフォームにテキストボックス1、2、3を作成し、それらを計算させて テキストボックス4に表示をさせたいと考えています。 テキストボックスに入力するパターンは以下の2種類です。 (1)すべてのテキストボックスに数値が入る (2)テキストボックス3のみに数値が入る 行いたい計算は、“(テキストボックス1 × テキストボックス2) + テキストボックス3”です。 曲りなりに作成してみましたが、テキストボックス3の数値を変えた時や削除した時などに、 テキストボックス4に入っている数値が残っていたりと、思うようにできません。 作成したものを掲載しておきます。 何卒よろしくお願いします。 テキストボックス1を変更したとき 1、3に数値が入っていれば、以下の計算を。 それ以外は“0”をテキストボックス4へ Private Sub TextBox1_Change() If TextBox1.Value = True And TextBox3.Value = True Then TextBox4 = Val(TextBox1.Text) * Val(TextBox2.Text) + Val(TextBox3.Text) Else TextBox4 = 0 End If End Sub テキストボックス2を変更したとき 2、3に数値が入っていれば、以下の計算を。 それ以外は“0”をテキストボックス4へ Private Sub TextBox2_Change() If TextBox2.Value = True And TextBox3.Value = True Then TextBox4 = Val(TextBox1.Text) * Val(TextBox2.Text) + Val(TextBox3.Text) Else TextBox4 = 0 End If End Sub テキストボックス3を変更したとき 1、2、3に数値が入っていれば、以下の計算を。 1か2に数値がなく、3に数値があれば、3の数値をテキストボックス4へ。 それ以外は“0”をテキストボックス4へ Private Sub TextBox3_Change() If TextBox1.Value = True And TextBox2.Value = True And TextBox3.Value = True Then TextBox4 = Val(TextBox1.Text) * Val(TextBox2.Text) + Val(TextBox3.Text) ElseIf TextBox1.Value = False or TextBox2.Value = False And TextBox3.Value = True Then TextBox4 = Val(TextBox3.Text) Else texbox24 = 0 End If End SubEnd Sub

  • エクセルVBA テキストボックスへのセットフォーカスについて

    エクセルVBAでユーザーフォーム内に配置されたテキストボックス への数値の入力時に、指定範囲内になければメッセージボックスで 規格外であることを警告し、その規格外が入力されたテキストボックス を強制的に空欄にし、次のテキストボックスにフォーカスを移動させずに、入力間違いのテキストボックスにフォーカスを戻したいのですが どうすればよいのでしょうか? 自分で考えた構文です。 Private Sub TextBox1_AfterUpdate() Dim A As Single A = TextBox1.Text If A < 1.99 Or A > 3.00 Then MsgBox "規格外!!"     TextBox1.Text = "" TextBox1.SetFoucus End If Exit Sub End Sub これですと、次のテキストボックスにフォーカスが移動してしまいます。 次のテキストボックスにフォーカスを移動させずに、規格内の値が 入力されるまでフォーカスを移動させない方法を教えて下さい。 お願い致します。

  • VBA 空白テキストボックスカウント

    こんにちは、よろしくお願いします。 ユーザーフォーム上にテキストボックスが 1-31が4段あります。 1-31には数字が入っているところもあれば、空白の所もあります。 このなかの数字が入っているテキストボックスの数をカウント したいのですがうまくいきません。 自分なりにやってみたこと テキストボックスの空白を数えて Dim i As Integer For i = 1 To 31 If Controls("TextBox" & i).Value = "" Then s_su.Text = Exit Sub s_suはカウントされた数字を表示するテキストボックスです。 上の式の =の右側に何を書いたらいいかがわかりません。 純粋に空白のテキストボックスを数えることは可能でしょうか。 また上記のテキストボックスを1-31数字の合計を別のテキストボックスに 表示しようと思いますが、 val(TextBox1.Text) + val(TextBox2.Text)~これを31回書いてますが もっとスマートに書けるようなコードはありますか。

専門家に質問してみよう