
No.6ベストアンサー
- 回答日時:
こんにちは、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()になります。
詳しく解説していただき、ありがとうございます。
まだ内容理解を簡単に出来る状況ではありませんが、大変参考になります。
ありがとうございました。
No.7
- 回答日時:
長い回答が沢山出ていて、あるいは、既述であればすみません。
(1)通貨単位で反映させる
これはエクセルシートのセルの書式で対応するで、済ませられます。
その書式の設定は普通人手による設定で済ませますが、VBAでもできて
NumberFormatプロパティの設定です。
(2)テキストボックスの表示データも、通貨表示にしたいなら、VBAでFormat関数を使って、人間が入力したデータに、上書きする必要がありますがそこまでやりますか。
TextBox1.TextAlign = fmTextAlignRight
TextBox1.Text = Format(TextBox1.Text, "#,##0")
やTextBox1.Text = Format(TextBox1.Text, "\\#,##0")
(3)売上を入力してシート上で合計させたいのです
これはエクセルのセルの値の合計機能(合計を出す関数を設定)ですむことでテキストボックス入力と関係なくできます。
合計行が毎回決まらないなどの特徴があればVBAで処理せざるを得ませんが。
もちろん、テキストボックスに入力された値を合計して、最後に所定のセルに通貨書式でセットもできます。
通貨の合計も値の合計も普通は同じ機能ですむはずですが何かありますか
。
(4)テキストボックスに入れたら、セルにセットするという方式が普通では。フォームのクリックでシートに一斉に値をセットする質問の方式はどうかと思う。
フォームのテキストボックスに入れた数字・文字をA列に従順にセルに
セットする。
------行数を保持するパブリック変数
標準モジュールがいでモジュール外で
Public i
-----テキストボックスでEnterを押したときのイベント
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 Then
If TextBox1.Text = "999" Then
UserForm1.Hide
Exit Sub
End If
Worksheets("Sheet1").Cells(i, "a") = TextBox1.Text
TextBox1.Text = ""
i = i + 1
End If
End Sub
-----初期行をセット
Private Sub UserForm_Activate()
i = 1
End Sub
これはフォームを消すことができず、うまくいってないかもしれないが、参考にしてください。
大変参考になります。
今現在問題は解決しておりますが、
>(1)通貨単位で反映させる
これはエクセルシートのセルの書式で対応するで、済ませられます。
これは、セルの書式が通貨単位で設定されているところへ代入した場合に有効なのか、代入してからセルに書式設定を行わなければならないのかがわかりません。
(元々、セルの書式は通貨にしていたのですが、そこへテキストボックスから値を代入すると文字列になってしまっていました。)
ご回答有難うございました。
No.5
- 回答日時:
#2 のWendy02です。
私のコードに関して、書式を変更したあとに、数値(.Textでも.Valueでも)を代入しても、書式が変更されるということはありえません。自動キャストは、日付や時間に限ります。
ふつう、VBAから、セルに数字を入れれば、それが、String型であろうが、Variant型であろうが関係ありません。書式設定されてなくても、キャストされますから、数値になります。数字の前に、何か文字列を入っていれば、文字列になります。
たぶん、最初に、テキストボックスの数字に、「\」を入れているわけですね。
テキストボックスへの書式設定はありません。
Private Sub 一月OK_Click()
'セルがすでに、書式設定されているなら、
Range("J10").Value = Clng(Me.一月売上.Value)
Range("J13").Value = Clng(Me.一月粗利.Value)
Unload Me
End Sub
それから、なるべく、値を渡すときは、TextBox も、Rangeもプロパティ(.Value等)をつけたほうがよいです。
この回答への補足
ご回答感謝します。
素人ですみません。とりあえず下記の形(先ほどのは同じものの繰り返しは省略していました。)で数値での代入はなったのですが、理屈がちょっとわかってないので宜しければ噛み砕いていただいても良いでしょうか?
Range("J10,J13,").NumberFormatLocal = "\#,##0;\-#,##0"
[ここでテキストボックスの値を数値にして代入するよう指示しているという解釈でよいのでしょうか?]
それから、テキストボックスに入力する際(最初の形だったときですが)¥を入れてはいませんでした。コードを教えていただきいたのですが、文字列でした。ということは
Range("J10") = Me.一月売上 → これが駄目だったという解釈でよいのでしょうか?
No.4
- 回答日時:
Private Sub 一月OK_Click()
Range("J10,J13").NumberFormatLocal = "\#,##0;\-#,##0"
Range("J10").Value = Val(Me.一月売上)
Range("J13").Value = Val(Me.一月粗利)
Unload Me
End Sub
のようにするとか。
No.3
- 回答日時:
>フォームで値を代入すると文字列になっちゃうんです。
解りました。
>Range("J10") = Me.一月売上
では、先に指定した
>Range("J10,J13").NumberFormatLocal = "\#,##0;\-#,##0"
の設定が変更されてしまうようですね。
これを、代入が完了した後に実行するようにすると問題ないでしょう。
VBAで書式設定しない場合は、代入する値を明示する必要があるようですね。
を
Range("J10") = Me.一月売上.Value
とか
Range("J10") = Me.一月売上.Text
としてください。
また、
Dim TMP As Long
TMP = Me.一月売上
Range("J10") = TMP
のように、変数に格納してからセルに代入すると、書式に影響しません。
別件の
>合計させる数値(売上等)の入力箇所が点在
値が入ったセルや合計欄が固定しているのなら、シートのSUM関数がVBAから利用できます。
Range("J14") = Application.WorksheetFunction.Sum(Range("J12", "J13"))
入力フォームで集計するなら、
dim 売上合計
with Me.
売上合計 = .一月売上 + .二月売上・・・
end with
Range("A1")=売上合計
No.2
- 回答日時:
>VBAで書式設定するにはどうすれば良いのですか?
Private Sub 一月OK_Click()
Range("J10,J13").NumberFormatLocal = "\#,##0;\-#,##0"
Range("J10").Value = Me.一月売上
Range("J13").Value = Me.一月粗利
Unload Me
End Sub
ということかな?
でも、最初に、シート側に書式設定しておいたほうが早いですね。(^^;
No.1
- 回答日時:
>通貨単位でセルに反映させるにはどうすれば
とは、セルに \2,000 とか 2,000円 とか表示させるのですか?
その場合は、セルに書式設定をするかVBAで書式設定を行ってください。
>月度の売上を入力してシート上で合計
合計欄に =SUM() で式を入れるとか、VBAで合計を計算する方法があります。
具体的な方法を記載してもらう方が回答を得られやすいですよ。
ご回答感謝します。
はい、¥で表示させたいのですが、テキストボックスで入力した値を数値としてシートに書き込むためのコードがわからないのです。
VBAで書式設定するにはどうすれば良いのですか?
売上を管理するテンプレートがあり、それは完成しているのですが、合計させる数値(売上等)の入力箇所が点在しているので、その数値の入力をユーザーフォームでまとめて入力したいのです。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルVBAでチェックボックスにチェックを入れる 1 2022/09/14 00:52
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) 【再投稿】VBAで動作しなくて困っています 2 2022/10/11 11:05
- Visual Basic(VBA) エクセルのVBAでダブルクリックでチェックを入れたあと 1 2022/10/26 20:30
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) 【VBA】Excelで罫線を引きたい 3 2022/07/14 12:04
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2022/05/26 17:19
- Visual Basic(VBA) VBAコードを張り付け後のエクセルの進め方 2 2023/02/07 18:24
- Visual Basic(VBA) エクセルVBA ダブルクリックしたら色反転を指定したセルのみにしたい 2 2022/04/06 12:52
- Visual Basic(VBA) 【再投稿】VBAのシフト表でバグが出て困っています 3 2022/09/24 08:29
このQ&Aを見た人はこんなQ&Aも見ています
-
初めて見た映画を教えてください!
初めて見た映画を覚えていますか?
-
人生最悪の忘れ物
今までの人生での「最悪の忘れ物」を教えてください。 私の「最悪の忘れ物」は「財布」です。
-
最強の防寒、あったか術を教えてください!
とっても寒がりなのですが、冬に皆さんがされている最強の防寒、あったか術が知りたいです!
-
この人頭いいなと思ったエピソード
一緒にいたときに「この人頭いいな」と思ったエピソードを教えてください
-
「これいらなくない?」という慣習、教えてください
現代になって省略されてきたとはいえ、必要性のない慣習や風習、ありませんか?
-
エクセルVBA ユーザーフォームのtextboxの書式設定って?
Excel(エクセル)
-
エクセルVBA テキストボックスに3桁ごとにコンマ
Visual Basic(VBA)
-
ユーザーフォーム内のテキストボックス内の書式設定
Excel(エクセル)
-
-
4
TextBoxから数字が文字として入力される?
Visual Basic(VBA)
-
5
Vba テキストボックス文字を右端から配置していく方法
Visual Basic(VBA)
-
6
エクセルVBA ユーザーフォームのTextBoxを日付にしたい
Excel(エクセル)
-
7
ExcelVBAでテキストボックスの表示形式を小数点第二位まで表示する方法
Visual Basic(VBA)
-
8
ユーザーフォームのTextに数値を入れるとセルにエ
Excel(エクセル)
-
9
ユーザーフォームのラベルに日付を表示させる方法があればお願いします。出来ればコード書いていただけると
Visual Basic(VBA)
-
10
ユーザーフォーム上にある「テキストボックス」に小数が入力できない
Excel(エクセル)
-
11
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
12
VBA テキストボックスに3桁カンマ表示させたい
その他(Microsoft Office)
-
13
Excel VBA ユーザーフォーム内のラベルにテキストボックスの計算結果を出す方法
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelで数値→文字列変換で指数...
-
Excelの関数について、特定の文...
-
テキストボックス内の文字のふ...
-
日付が1年以内になると他のセル...
-
数字がセルの左側に寄っていて...
-
【Excel】貼り付けた画像がいつ...
-
エクセル カタカナの文字を検...
-
excelの16進数表示方法
-
エクセル 入力中に表示されな...
-
エクセルで同じ値が連続してい...
-
エクセルで条件付き書式を使わ...
-
Excel2013でセルの書式が勝手に...
-
エクセルでセルに設定されてい...
-
エクセルで入力数字に自動的に,...
-
Excelについて▶あるセルに文字...
-
エクセル「一度設定した列幅を...
-
エクセルで書式設定だけを固定...
-
excel 表計算 加算するセルが空...
-
エクセルに貼り付けると日付表...
-
エクセルの書式を固定したい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelで数値→文字列変換で指数...
-
Excelの関数について、特定の文...
-
テキストボックス内の文字のふ...
-
日付が1年以内になると他のセル...
-
エクセル 入力中に表示されな...
-
エクセルで同じ値が連続してい...
-
数字がセルの左側に寄っていて...
-
【Excel】貼り付けた画像がいつ...
-
excelの16進数表示方法
-
エクセル カタカナの文字を検...
-
excel 表計算 加算するセルが空...
-
エクセルで入力数字に自動的に,...
-
エクセルで入力欄を明確にしたい
-
エクセルで平均時間の表示の仕方
-
エクセルで条件付き書式を使わ...
-
条件付き書式で範囲外だったら...
-
エクセル「一度設定した列幅を...
-
Excel で金額の,で中央揃えす...
-
エクセル:セルのバックの色だ...
-
エクセルで縦書きのかっこ
おすすめ情報