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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
家の中でのこだわりスペースはどこですか?
自分の家で快適に過ごすために工夫しているスペースはありますか? 例)ベランダでお茶を飲むためのカフェテーブル ゲーミングに特化したこだわりのPCスペース
-
これ何て呼びますか
あなたのお住いの地域で、これ、何て呼びますか?
-
初めて自分の家と他人の家が違う、と意識した時
子供の頃、友達の家に行くと「なんか自分の家と匂いが違うな?」って思いませんでしたか?
-
昨日見た夢を教えて下さい
たまにすごいドラマチックな夢見ること、ありませんか? 起きてからも妙に記憶に残っているような、そんな夢。
-
ハマっている「お菓子」を教えて!
この世には、おいしいお菓子がありすぎて……。 次何を食べたらいいか迷っています。 みなさんが今、ハマっている「お菓子」を教えてください!
-
エクセルVBA テキストボックスに3桁ごとにコンマ
Visual Basic(VBA)
-
エクセルVBA ユーザーフォームのtextboxの書式設定って?
Excel(エクセル)
-
TextBoxから数字が文字として入力される?
Visual Basic(VBA)
-
-
4
ユーザーフォームのTextに数値を入れるとセルにエ
Excel(エクセル)
-
5
エクセルVBA ユーザーフォームのTextBoxを日付にしたい
Excel(エクセル)
-
6
ユーザーフォーム内のテキストボックス内の書式設定
Excel(エクセル)
-
7
ExcelVBAのユーザーフォームの中に線を引きたい
Visual Basic(VBA)
-
8
ExcelVBAでテキストボックスの表示形式を小数点第二位まで表示する方法
Visual Basic(VBA)
-
9
エクセル ユーザーフォームにオートシェープ(図形)を貼り付けるこは可能なのでしょうか?
Excel(エクセル)
-
10
エクセルVBAでテキストボックスに入力があった場合のみ、ワークシートに転記したい
Visual Basic(VBA)
-
11
VBA テキストボックスに3桁カンマ表示させたい
その他(Microsoft Office)
-
12
Vba テキストボックス文字を右端から配置していく方法
Visual Basic(VBA)
-
13
ユーザーフォームのラベルに日付を表示させる方法があればお願いします。出来ればコード書いていただけると
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelで数値→文字列変換で指数...
-
テキストボックス内の文字のふ...
-
Excelの関数について、特定の文...
-
日付が1年以内になると他のセル...
-
エクセル 入力中に表示されな...
-
数字がセルの左側に寄っていて...
-
エクセルで縦書きのかっこ
-
【Excel】貼り付けた画像がいつ...
-
excelの16進数表示方法
-
EXCELでCTRL+1が使えません。
-
エクセルで同じ値が連続してい...
-
エクセル カタカナの文字を検...
-
Excelの入力規則のリストに上付...
-
列全体に同様の条件付き書式を...
-
エクセル 入力規則 貼付して...
-
エクセルで平均時間の表示の仕方
-
エクセルで入力欄を明確にしたい
-
エクセルでセルに設定されてい...
-
セルに値を入力したら、セルに...
-
エクセル:セルのバックの色だ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelで数値→文字列変換で指数...
-
テキストボックス内の文字のふ...
-
Excelの関数について、特定の文...
-
日付が1年以内になると他のセル...
-
エクセル 入力中に表示されな...
-
【Excel】貼り付けた画像がいつ...
-
数字がセルの左側に寄っていて...
-
エクセルで同じ値が連続してい...
-
エクセル カタカナの文字を検...
-
excelの16進数表示方法
-
エクセルで平均時間の表示の仕方
-
excel 表計算 加算するセルが空...
-
Excel で金額の,で中央揃えす...
-
エクセルで入力数字に自動的に,...
-
条件付き書式で範囲外だったら...
-
EXCEL 2000→2,000のコ...
-
エクセルで入力欄を明確にしたい
-
Excelの入力規則のリストに上付...
-
EXCELでCTRL+1が使えません。
-
Excel2013でセルの書式が勝手に...
おすすめ情報