エクセルのVBAの初心者です。ユーザーフォームでテキストボックスを作成し、
その中で、加算(電卓のように)する方法はありますか?
うまく通じたかどうか不安ですが、よろしくお願いします。

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

A 回答 (1件)

ユーザーフォームで電卓のような機能を作のは,VBAにかなり熟練しないと難しいと思います。


単純な加算であればすぐに作れますが,ここでの質問内容はおそらく違ったものを求めれれているのではないでしょうか。
(もし単純な加算方法を知りたいのでしたら,再度回答します)

ワークシートの計算機能を使用した簡単なサンプルを紹介します。参考になれば良いのですが。
テキストボックスに計算式を入力しコマンドボタンを押すと,計算結果が表示されるものです。

1.ユーザーフォームに TextBox1 と CommandButton1 を配置します。CommandButton1 の Default プロパティを True にしておくと Enter キーで計算結果が表示できて便利です。
2.以下のコードを入力します。
Private Sub CommandButton1_Click()
On Error Resume Next
Sheet1.Range("A1") = "=" & TextBox1.Text
Sheet1.Range("A1").Calculate
TextBox1.Text = Sheet1.Range("A1").Value
TextBox1.SetFocus
End Sub
3.ユーザーフォームを実行します。

ワークシート(Sheet1)のセル(A1)を計算に使用しているので,注意してください。
    • good
    • 0

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

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

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

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

Q海外子会社がイノベーションを起こし、親会社がそれを学習した事例?

海外子会社がイノベーションを起こし、親会社がそれを学習した事例?

親会社が学習した、親会社の本国での競争にどのように貢献したのか?

Aベストアンサー

 セブンイレブンは、最初に日本が学び、変革して力をつけ、最後にアメリカの会社を吸収。
 IBMが日本語システムを開発するとき、日本語ができるようになれば、将来中国語などが簡単になると説得。
 マクドナルドは商品開発はアメリカに任せたままで売り上げを伸ばし、初代社長の藤田氏がアメリカ本社の重役になった。
 貢献については自分で調べてください。なんでも聞けばいいというものではありません。考えのない知識だけでは本当のことなど理解できません。そもそも「競争」が定義されていない。

QエクセルVBAユーザーフォームのテキストボックスについて

VBA初心者です。
エクセルVBAユーザーフォームのテキストボックスに入力した数字を通貨単位でセルに反映させるにはどうすれば良いのですか?

Private Sub 一月OK_Click()
Range("J10") = Me.一月売上
Range("J13") = Me.一月粗利
Unload Me
End Sub

今はこんな感じです。
ここで月度の売上を入力してシート上で合計させたいのです。
よろしくお願いします。

Aベストアンサー

こんにちは、Wendy02です。

>Range("J10,J13,").NumberFormatLocal = "\#,##0;\-#,##0"
>[ここでテキストボックスの値を数値にして代入するよう指示しているという解釈でよいのでしょうか?]

そういうことではありませんね。単に書式だけのものです。つまり、テキストボックスの値自体は、何も加工されていません。セルに対しての代入というのは、セル側が、自動キャストといって、セルを文字列書式にしていない限りは、仮に、VBAの代入値が、数値型であろうとも、文字型であろうとも、自動的に数値に変換されます。

>Range("J10") = Me.一月売上 → これが駄目だったという解釈でよいのでしょうか?

それ自体が駄目だったとは思いません。
TextBox は、標準で、String型になっておりますからね。だから、それを正しくセル側で変換できる数字になっていれば、問題はありません。

私は、テキストボックスの値に関しては、変数を数値型に宣言するよりも、テキストボックスそのもののプロパティを、たとえば、[IMEMode] 3 - fmIMEModeDisableにしておいて、
数値を入れたほうがよいと思っています。

そして、以下のようなエラー処理を施せば万全です
これは、テキストボックスの「入力規則」で、数値しか入れられません。その上で、万が一に備えて、Clng()で変換すればよいと思っています。

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If Not (KeyAscii >= 48 And KeyAscii <= 57) Then
 MsgBox "数値を入れてください。", vbInformation
End If
End Sub

あとは、Val(), Clng() をヘルプで確認してみてください。
その関数の使い分けが、わかるはずです。その用途に合わせて、使ってください。ただし、小数点が含まれるときは、私のほうは、CDbl()になります。

こんにちは、Wendy02です。

>Range("J10,J13,").NumberFormatLocal = "\#,##0;\-#,##0"
>[ここでテキストボックスの値を数値にして代入するよう指示しているという解釈でよいのでしょうか?]

そういうことではありませんね。単に書式だけのものです。つまり、テキストボックスの値自体は、何も加工されていません。セルに対しての代入というのは、セル側が、自動キャストといって、セルを文字列書式にしていない限りは、仮に、VBAの代入値が、数値型であろうとも、文字型であろうとも、自動的に数値に変...続きを読む

Q地域ユーザー対象のネットビジネス事例を教えてください。

現在地域(地方)のユーザー向けポータルサイトの構築を検討しています。色々参考サイトを探しているのですが見つけられません。知っている方がいましたら教えて下さい。
又、ポータルサイトじゃなくても地域内で成り立っているネットビジネスの事例を知っていましたら教えて下さい。
色々調べたのですが「地方から全国市場へ発信」といったビジネスモデルは沢山あるのですが、地域ユーザー対象でビジネスとして成り立っている事例が見つけられません。業種等は一切問いません。
※ちなみに私の地域は20万人程度の小さな町です。

Aベストアンサー

地元民から金取るんかい?!と思われがちになりそうな気が。
金取るならいっそ「地方から全国市場へ発信」って考えるのが普通なんだろうね。
強いて言えば、野球グランドなど公共施設の予約システムとかか!

Q【Excel VBA】ユーザーフォーム テキストボックスの有効・無効について

Excel2003を使用しています。

ユーザーフォームにテキストボックスを11個とコマンドボタンを2個配置しています。
TextBox9に“0000”(文字列です)が入力されたら、TextBox10を有効に、それ以外は無効に設定したく、TextBox10のEnabledプロパティをFalse、LockedプロパティをTrueにして、コードを下記のように書いたのですが、うまくいきません。どこか、間違っているでしょうか?
コードは該当部分だけ、載せています。よろしくお願いします。

--------------------------------------------------
If TextBox9.Text = "0000" Then
TextBox10.Enabled = True
TextBox10.Locked = False
TextBox10.BackStyle = fmBackStyleOpaque
Else
TextBox10.Enabled = False
TextBox10.Locked = True
TextBox10.BackStyle = fmBackStyleTransparent
End If

Excel2003を使用しています。

ユーザーフォームにテキストボックスを11個とコマンドボタンを2個配置しています。
TextBox9に“0000”(文字列です)が入力されたら、TextBox10を有効に、それ以外は無効に設定したく、TextBox10のEnabledプロパティをFalse、LockedプロパティをTrueにして、コードを下記のように書いたのですが、うまくいきません。どこか、間違っているでしょうか?
コードは該当部分だけ、載せています。よろしくお願いします。

--------------------------------------------------
I...続きを読む

Aベストアンサー

上記のコードはどこに書かれていますか?
もし、入力後のルーチンに書かれているとすると、入力中に反映されないのでうまく行かないということが起こり得ます。

TextBox9の値が変更されたら、イベントを発生させて同時に処理をすればOKだと思いますが。(トグルボタンの表示処理と同様です)

Sub TextBox9_Change() の中にコードを表記すればうまく行くのでは?

違ったら失礼!

Qシュンペーターのイノベーションについて

シュンペーターによって提唱されたイノベーションの概念を説明し、企業の具体的なイノベーションの事例についてのレポートを書かないといけないのですが、イノベーションは 1・新しい財貨の生産 2・新しい生産方法の導入 3・新しい販売先の開拓 4・新しい仕入先の獲得 5・新しい組織の実現って教科書に書いてあるのですが、「今までとは違った方法で新しい何かを生み出すことって」のがイノベーションって解釈したのですが間違ってますでしょうか?
レポートに書くときはもっと詳しくまとめて書きます。
あとここの企業のイノベーションの事例を調べたらおもしろいよとかって企業を知っている方いましたら、ぜひ教えてください。
宜しくお願い致します。

Aベストアンサー

>「今までとは違った方法で新しい何かを生み出すことって」のがイノベーションって解釈したのですが間違ってますでしょうか?

間違ってはいないのですが、シュンペーターが「馬車を改良しても鉄道にはならない」と言っているように、ただ単に違うというだけでなく、技術的な「断絶」があるような違った方法で何かを生み出すことです。

現在では全く当り前になっている、インスタントラーメン、ベルトコンベアー、ネット通販、等も最初はイノベーションだったわけです。

QVBEユーザーフォームのテキストボックスがいっぱい

excel2000を利用しています。

ユーザーフォームで、大量のテキストボックスを貼っているのですが(1000個近く)

これのオブジェクト名をひとつひとつ変えるのが、すごく大変で、リストみたいな感じで、簡単に変更することが出来ないかな?

何かいい方法がないかなって悩んでいます。

何かいい方法等、あればアドバイスお願いいたします。

Aベストアンサー

>大量のテキストボックスを貼っている

図形描画のテキストボックスですか? それともコントロールツールボックスのテキストボックスですか?


>簡単に変更することが出来ないかな?

簡単にできますが,具体的にいったい「どういう具合に変更」できたらアナタ的には便利なのですか?

○「テキストボックス_そのボックスが置いてあるセル番地」みたいな名前にしてみたい
○「テキスト1,2,3」と連番が付けばよい(でもこれなら通常はそういう風になっているはず)
○何か,あなたにとって「判りやすい(「使いやすい」)名前一覧」がシート名不明のA1:A1000に記載してあって,その名前を付けたい。(しかし一体どのテキストボックスにどの名前を取り付ければよいのか,対応が謎)




作成例:どういう具合に名前を付けたいにせよ,概ねこのバリエーションで出来ます。

sub macro1()
'図形のテキストボックスの場合
dim tx as textbox
for each tx in activesheet.textboxes
tx.name = "Text_" & tx.topleftcell.address
next
end sub

sub macro2()
’コントロールツールボックスのテキストボックスの場合
dim o as object
for each o in activesheet.oleobjects
if typename(o.object) = "TextBox" then
o.name = "text_" & o.topleftcell.address
end if
next
end sub

>大量のテキストボックスを貼っている

図形描画のテキストボックスですか? それともコントロールツールボックスのテキストボックスですか?


>簡単に変更することが出来ないかな?

簡単にできますが,具体的にいったい「どういう具合に変更」できたらアナタ的には便利なのですか?

○「テキストボックス_そのボックスが置いてあるセル番地」みたいな名前にしてみたい
○「テキスト1,2,3」と連番が付けばよい(でもこれなら通常はそういう風になっているはず)
○何か,あなたにとって「判りやすい(「...続きを読む

Q流通イノベーションって何ですか?

スーパー、コンビニ等の発展を調べているのですが、説明の中に流通イノベーションという言葉が出てくるのですが、その意味が把握できず困っています。単に流通革新と捉えてしまっていイのでしょうか。
流通イノベーションとは何か評価できる流通イノベーションの事例など、分かる方がいたら教えて欲しいのでよろしくお願いします。
また参考になるHPなどありましたらお教えいただくと大変助かります。お願いします。

Aベストアンサー

アメリカに37年住んでいる者です。 私なりに書かせてくださいね。

こちらでLogistics InnovationないしInnovative Logisticsと言われているのを日本語訳にしたものと思いますが、「流通イノベーションとは何か評価できる流通イノベーションの事例」がスーパー・コンビニを実現した、そして従来の魚屋さん、八百屋さん、お肉屋さん、また、おにぎりやさん、などと比べて流通・物流の改革とも言われる「やり方」を考えれば自然とこの質問の答えが出てくると思います。

マーケティングの一部である流通・物流のこの改革はまた、これらの小さな店の存在をなくしていったわけですね。

アメリカのWal-Martが日本の製造会社のJITの観念を使ったことで成功への道を開いたわけですが、そのやり方が消費者に対してのショッピングバリューを作り上げたわけですが、その為に(その流通イノベーション)についていけなけない小さなお店が犠牲になったことも、また、仕入先への負担(日本の下請け工場的な)も今まで考えも付かないほどの高さになり、更に、州や町の「店舗設立」に関しての「管理法」「小店舗保護法」へも直接の影響を与えましたね。

ガソリンスタンドがコンビに運営をはじめたのも自然な成り行きとも言えるでしょう。

これらを元にいろいろな多方面への影響を作ったスーパー・コンビニの運営方法を考えるとご質問への答えが出てくるでしょう。

これでいかがでしょうか。 分かりにくい点がありましたら、補足質問してください。 

アメリカに37年住んでいる者です。 私なりに書かせてくださいね。

こちらでLogistics InnovationないしInnovative Logisticsと言われているのを日本語訳にしたものと思いますが、「流通イノベーションとは何か評価できる流通イノベーションの事例」がスーパー・コンビニを実現した、そして従来の魚屋さん、八百屋さん、お肉屋さん、また、おにぎりやさん、などと比べて流通・物流の改革とも言われる「やり方」を考えれば自然とこの質問の答えが出てくると思います。

マーケティングの一部である流通・物流...続きを読む

Qユーザーフォーム内のテキストボックス内の書式設定

A1セルに12.345と入力してあり、書式は「数値」で小数点以下の桁数2にしてあり、
「12.35」と表示されます。

VBAを起動して、ユーザーフォームを挿入し、
テキストボックスを作成し、
TextBox1の「ControlSource」にA1と入力すると
TextBox1には「12.345」と表示されます。

エクセルのA1と同じ様に
TextBox1も「12.35」と表示したいのですがどうすればいいのでしょうか?

エクセル2003です。
よろしくお願い致します。

Aベストアンサー

こんばんは。

>TextBox1の「ControlSource」にA1と入力すると

としたら、セルと連動するのですから、セルを合わせるか、テキストボックスを合わせるかしても、結果的に同じ値になるのですから、TextBox1 とA1 を、そのままつなげることはできません。

テキストボックスのダミーを設けます。(ここでは、TextBox2 とします)
そして、そちらに、ControlSource = A1 と置き、プロパティの Visible =False にします。

'ユーザーフォームモジュール

Private Sub TextBox2_Change()
 Dim buf As Variant
 buf = ActiveSheet.Range("A1").Text
 If IsNumeric(buf) Then
   TextBox1.Text = Format(buf, "#,##0.00")
 End If
End Sub

Private Sub UserForm_Initialize()
  TextBox1.Text = ActiveSheet.Range("A1").Text
End Sub

なお、テキストボックスの表示の基本は、Text ですから、表示は、あくまでも、文字列です。ですから、そこに書式自体は、イタリックや太字などの文字列書式しか存在していません。

こんばんは。

>TextBox1の「ControlSource」にA1と入力すると

としたら、セルと連動するのですから、セルを合わせるか、テキストボックスを合わせるかしても、結果的に同じ値になるのですから、TextBox1 とA1 を、そのままつなげることはできません。

テキストボックスのダミーを設けます。(ここでは、TextBox2 とします)
そして、そちらに、ControlSource = A1 と置き、プロパティの Visible =False にします。

'ユーザーフォームモジュール

Private Sub TextBox2_Change()
 Dim buf As Var...続きを読む

Qイノベーションに関してですが、業界のトップの地位にある企業または製品が

イノベーションに関してですが、業界のトップの地位にある企業または製品が、後発の企業または製品との競争に敗れた事例ってありますか?
何故、そうなったのかも知りたいです。


もし、そのような事が記述されているサイトがありましたら、教えて頂きたいです。

Aベストアンサー

有名な例では、表計算ソフトがあります。

今は殆どEXCELしかないという感じですが、もともとは表計算ソフトはVisiCalcという名前でアメリカの学生がアップル用に開発したものです。


当時(1980年ごろ)すでに今の表計算ソフトの基本的な機能は持っていたという画期的的なソフトで、爆発的に売れたようです。このソフトを使うためにアップルが売れたということもあったようです。

しかしその会社は企業としての体質が弱かったのか、マーケティングに失敗したのかで、結局は次々に大手の同種のソフトに負けて、今は存在していません。

でもそのおかげで現在われわれがプログラミング用の言語を知らなくても計算ができるようになったので、われわれはその開発者には感謝しなければなりません。

Q「ユーザーフォーム」のサイズ変更と「テキストボックス」の条件設定について

エクセル2000で、あるマクロを作成中です。
これに関して、2点アドバイスを頂きたくお願い致します。

【 1 】
完成した後に使用するPCのモニターが、15インチと17インチが混在する環境となります。
ユーザーフォームの寸法を15インチモニターに合わせて設定すると、17インチモニター使用時はフルスクリーンになりません。
これをモニターのサイズに合わせて、自動で変化させることは可能なんでしょうか?
もし可能であれば、その方法はどうすればいいのでしょうか?

【 2 】
コンボボックスで選択項目を表示させるのですが、「その他」を選んだ場合のみ、入力可能なテキストボックスを作りたいのです。
その他以外を選択した場合は、
1. テキストボックスそのものを非表示にする。
2. テキストボックスのバックカラーを「白」から「グレー」に変化させ、それまで入力可能だったものを入力不可にする。
また、タブも停止から非停止にしたいと考えています。
上記1、2はどちらでも構いません。

この2点について、どなたか詳しい方からご教示頂きたくお願い致します。

エクセル2000で、あるマクロを作成中です。
これに関して、2点アドバイスを頂きたくお願い致します。

【 1 】
完成した後に使用するPCのモニターが、15インチと17インチが混在する環境となります。
ユーザーフォームの寸法を15インチモニターに合わせて設定すると、17インチモニター使用時はフルスクリーンになりません。
これをモニターのサイズに合わせて、自動で変化させることは可能なんでしょうか?
もし可能であれば、その方法はどうすればいいのでしょうか?

【 2 】
コンボボックスで選択...続きを読む

Aベストアンサー

【 1 】について
ユーザーフォームの画面表示サイズは
モニターのインチ数というよりは、
画面の解像度によって決まるのでは
ないでしょうか。
画面の解像度は以下のようにして取得可能です。

Private Declare Function GetSystemMetrics _
Lib "user32" (ByVal nIndex As Long) As Long
Sub Kaizoudo()
Dim X As Long, Y As Long
Dim nGA As String
X = GetSystemMetrics(0) '画面の幅を取得
Y = GetSystemMetrics(1) '画面の高さを取得
MsgBox "幅" & X & "×" & "高さ" & Y
End Sub

上記で取得した画面の解像度に応じて、
ユーザーフォームの大きさを変化させれば、
よいかと思います。
その場合、配置しているコントロールの位置も
フォームの大きさに合わせて変える必要があります。

【 2 】について
>1. テキストボックスそのものを非表示にする。

テキストボックスのVisible プロパティをFalseに設定する。

Private Sub ComboBox1_Change()
If Me.ComboBox1.Text = "その他" Then
Me.TextBox1.Visible = False
Else
Me.TextBox1.Visible = True
End If
End Sub

>2. テキストボックスのバックカラーを「白」から「グレー」に変化させ、
それまで入力可能だったものを入力不可にする。

BackColor プロパティをグレイに設定し、
Enabled プロパティをFalseに設定すれば良いかと思います。

Private Sub ComboBox1_Change()
If Me.ComboBox1.Text = "その他" Then
Me.TextBox1.Enabled = False
Me.TextBox1.BackColor = vbGrayText
Else
Me.TextBox1.Enabled = True
Me.TextBox1.BackColor = vbWindowBackground
End If
End Sub

【 1 】について
ユーザーフォームの画面表示サイズは
モニターのインチ数というよりは、
画面の解像度によって決まるのでは
ないでしょうか。
画面の解像度は以下のようにして取得可能です。

Private Declare Function GetSystemMetrics _
Lib "user32" (ByVal nIndex As Long) As Long
Sub Kaizoudo()
Dim X As Long, Y As Long
Dim nGA As String
X = GetSystemMetrics(0) '画面の幅を取得
Y = GetSystemMetrics(1) '画面の高さを取得
MsgBox "幅" & X & "×" & "高さ" & Y...続きを読む


人気Q&Aランキング

おすすめ情報